You are responsible to write an assembly function to perform searching of a list of names in stored in ascending order.
This function will use the linear search algorithm. The names could be stored in mixed case. Therefore your assembly function must do the comparison in a case insensitive manner. This function will use the C function signature but everything within this function should be assembly code using the ASM block similar to the assembly example shown in class.
Program Specification: long search_by_name (char* list, long count, char* token); list – the starting address of the list of structures to be searched count – total number of names in the list token – name to be search in the list This function returns the Student ID of the student record in the list. While the list was constructed, the ID was populated in sequence starting with 1001. If the name is not found, then it returns 0 and print an error message on the console.
Additional Information: We do NOT support partial search, it means that it is all or nothing. Both the file name and search token are being passed by command line arguments. The output is display on the screen. You MUST have detailed comments within the ASM block for your algorithm (per line). Program Checklist: For program #3, you will submit your p3.cpp and a file named readme.p3 text file with any comments (things that work or not work about your code besides the required header (name, student ID, OS type, 32/64 bit, and compiler info). You MUST be able to compile and run the program from the command line). If we can't test your program, you're not going to get much credit for your work!!!
Given the same test data, the output of your ASM function should match exactly the output of the output from the given C function. There are at least different scenarios you need to test. #1 Test existing elements with exact match #2 Test case insensitivity #3 Test partial search & non-existent elements ----------------------------------------------------------------------------------------------------------------------------------- Code: #include #include #include struct student { long ID; /* 8 bytes in 64-bit, and 4 types in 32-bit */ char name[24]; }; /* This function returns the char* to the name string if the input sid has a match on the student ID from the array of student structures */ long search_by_id (char* list, long count, long sid) { long index=0; asm ( "movq %1, %%rax;" "movq %2, %%rbx;" "movq %3, %%rcx;" "xorq %%rdx, %%rdx;" "loop_start:" "cmpq %%rdx, %%rcx;" "je not_found;" "movq (%%rax), %%rsi;" "cmpq %%rsi, %%rbx;" "je found;" "addq $32, %%rax;" /* 32 = size of each record for 64-bit; In 32-bit, it is 28 */ "inc %%rdx;" "jmp loop_start;" "not_found:" "xorq %%rax, %%rax;" "jmp done;" "found:" "addq $8, %%rax;" "done:" : "=a" (index) : "r" (list), "r" (sid), "r" (count) : ); return index; } long search_by_name (char* list, long count, char* token) { long index = 0; /* Replace the following C code with the ASM block */ struct student *clist = (struct student*)list; for (index = 0; index < count; index++) if ( strcasecmp( clist[index].name, token ) == 0) return clist[index].ID; return 0; } int main(int argc, char** argv) { char *token; char *sname=NULL; FILE *fptr; long id = 0; long sid = 0; long i = 0; struct student list[100]; /* array of structure */ if (argc != 4) { printf("Usage: %s filename token student_id\n", argv[0]); return 1; } token = argv[2]; sid = atol(argv[3]); printf("\n"); fptr = fopen((argv[1]), "rtc"); if (fptr == NULL) printf( "File %s was not opened\n",argv[1] ); else { /* Set pointer to beginning of file: */ fseek( fptr, 0L, SEEK_SET ); /* Read data from file: */ while ( fscanf(fptr, "%s", (char*) &list[i].name) != EOF ) { list[i].ID = i+1001; printf( "%s ", list[i].name ); i++; } printf( "\n\nNumber of names = %ld\n", i ); printf( "Search Token = %s\n", token ); fclose( fptr ); } printf( "\nStudent Id = %ld; Name = %s.\n\n", sid, (char*)search_by_id((char*)list, i, sid)); id = search_by_name ((char*)list, i, token); if (id) printf( "Student Id = %ld; Name = %s\n", id, list[id-(1001)].name ); else printf( "Student is not found.\n"); return 0; }
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of