uint32_t ass_multiply(char *instruction) { char *mnemonic = get_mnemonic(instruction); char *rest = get_rest(instruction); char Rd[2], Rm[2], Rs[2], Rn[2]; uint32_t RdI, RmI, RsI, RnI; uint32_t result = (111 << 29) | (1 << 4) | (1 << 7); if (strcmp(mnemonic,"mul") == 0) { sscanf(rest, "%[^','],%[^','],%s", Rd, Rm, Rs); RnI = 0; } else { sscanf(rest, "%[^','], %[^','], %[^','],%s", Rd, Rm, Rs, Rn); result |= (1 << 21); RnI = reg_from_string(Rn); } RdI = reg_from_string(Rd); RmI = reg_from_string(Rm); RsI = reg_from_string(Rs); result |= (RdI << 16) | (RnI << 12) | (RsI << 8) | (RmI & mask4); free(mnemonic); free(rest); return result; }
int preprocess_get_line ( char read_in_line [], char label [] , char instruction [] ){ /************************************************ process lines ************************************************/ int a = 0; int * check_mark = &a; // printf("00#%s#", read_in_line); // 1. remove comment, semicolom, and empty line read_in_line = get_line_before_semicol(read_in_line, check_mark); // printf("label#%s# instruction#%s#\n", label, instruction); // printf("1 #%s#\n\n", read_in_line); // 2. detect label read_in_line = get_label_instruction(read_in_line, label); // printf("label#%s# instruction#%s#\n", label, instruction); // printf("2 #%s#\n\n", read_in_line); // 3. find mnemonic read_in_line = get_mnemonic(read_in_line, instruction); // printf("label#%s# instruction#%s#\n", label, instruction); // printf("3 #%s#\n\n", read_in_line); // 4. find quotation read_in_line = get_quotation(read_in_line, instruction); // printf("label#%s# instruction#%s#\n", label, instruction); // printf("4 #%s#\n\n", read_in_line); // 5. put rest segments together, one comma is also a segment read_in_line = get_operations(read_in_line, instruction); // printf("label#%s# instruction#%s#\n", label, instruction); print_output_line(label, instruction); return * check_mark; }