int main(){ char receive_buffer[80] = "12345 shangshandalaohu"; int crc; crc = getcrc(receive_buffer); char* rest; printf("receive_buffer is %s\n",receive_buffer); rest = getrest(receive_buffer); printf("crc is %d\n",crc); printf("rest is %s\n",rest); }
int main(void) { int memCounter = 0; char input; int numCountRef, firstNumRef, secondNumRef, intRestRef; printf("CS 350 Lab 8, Andrey Danilkovich\nFull SDC Simulator\n\n"); initCPU(); readMemory(); printf("\nBeginning execution:\n"); printf("At the > prompt, press return to execute the next instruction (or q to quit or h or ? for help).\n"); char prompt[] = "> "; printf("%s", prompt); char command[80]; fgets(command, sizeof command, stdin); // Read past end of current line. scanf("%c", &input); do { while(input != '\n' && getchar() != '\n' ){ /* Do Nothing to clear \n from a char */ } // clear out the extra space after the char numCountRef = getcount(mem, memCounter); firstNumRef = getfirst(mem, memCounter, numCountRef); secondNumRef = getsecond(mem, memCounter, numCountRef); intRestRef = getrest(mem, memCounter, numCountRef); if(firstNumRef == 0) { memCounter++; } else if(input == '\r' | input == '\n') { instruction_cycle(mem, regs, memCounter); memCounter++; printf("%s", prompt); scanf("%c", &input); if(firstNumRef == 8 & regs[secondNumRef] > 0) { memCounter = intRestRef; } } else if(input == 'h') { helpMsg(); // call help message printf("%s", prompt); scanf("%c", &input); } else if(input == 'q') { printf("Quitting program.\n"); } else { printf("Unknown command; ignoring it.\n"); printf("%s", prompt); scanf("%c", &input); } } while (memCounter != 99 & input != 'q'); // Finish Program // Print Halting message, diplay registers and memory printf("At 00 instr 0 0 00: HALT\n\nHalting\n"); printf("\nRegisters:\n"); dumpRegisters(regs); printf("\nMemory:\n"); dumpMemory(mem); }
int instruction_cycle(int mem[], int regs[], int memCounter) { int intCount, firstNum, secondNum, intRest; char readInput, futureInput; intCount = getcount(mem, memCounter); firstNum = getfirst(mem, memCounter, intCount); secondNum = getsecond(mem, memCounter, intCount); intRest = getrest(mem, memCounter, intCount); // TEST CASE: printf("** This is the first digit: %d **\n", firstNum); if (firstNum != 0) printf("At %02d instr %d %d %02d: ", memCounter, firstNum, secondNum, intRest); switch (firstNum) { case 0: // DONE!!! { // HALT execution // Microcode: Running ← false memCounter++; break; } case 1: // DONE!!! { // LD // EXAMPLE: LD R0 <- M[02] = 9225 // Microcode: Reg[R]←Mem[MM] regs[secondNum] = mem[intRest]; printf("LD R%d <- M[%02d] = %d\n", secondNum, intRest, regs[secondNum]); break; } case 2: // DONE!!! { // ST // EXAMPLE: ST M[22] <- R3 = -1 // Microcode: Mem[MM]←Reg[R] mem[intRest] = regs[secondNum]; printf("ST M[%02d] <- R%d = %d\n", intRest, secondNum, mem[intRest]); break; } case 3: // DONE!!! { // ADD // EXAMPLE: ADD R1 <- R1 + M[22] = 3 + -1 = 2 // Microcode: Reg[R]←Reg[R] + Mem[MM] printf("ADD R%d <- R%d + M[%02d] = %d + %d", secondNum, secondNum, intRest, regs[secondNum], mem[intRest]); regs[secondNum] = (regs[secondNum] + mem[intRest]) % 10000; printf(" = %d\n", regs[secondNum]); break; } case 4: // DONE!!! { // NEG // EXAMPLE: NEG R3 <- -(R3) = -1 // Microcode: Reg[R]←–Reg[R] regs[secondNum] = (-1 * regs[secondNum]); printf("NEG R%d <- -(R%d) = %d\n", secondNum, secondNum, regs[secondNum]); break; } case 5: // DONE!!! { // ST // EXAMPLE: LDM R3 <- 1 // Microcode: Reg[R] ← MM regs[secondNum] = intRest; printf("LDM R%d <- %d\n", secondNum, intRest); break; } case 6: // DONE!!! { // ADDM // EXAMPLE: ADDM R0 <- R0 + 01 = 9225 + 1 = 9226 // Microcode: Reg[R]←Reg[R]+MM regs[secondNum] = regs[secondNum] + 1; printf("ADDM R%d <- R%d + 01 = %d + 1 = %d\n", secondNum, secondNum, (regs[secondNum] - 1), regs[secondNum]); break; } case 7: // EQUAL 0? { // BR // EXAMPLE: BR 10 // Microcode: PC←MM printf("BR %d\n", intRest); break; } case 8: { // BRP // EXAMPLE: BRP 13 if R1 = 2 > 0: Yes // Microcode: if Reg[R]>0 then PC ← MM if(regs[secondNum] > 0) { memCounter = intRest; printf("BRP %02d if R%d = %d > 0: Yes\n", intRest, secondNum, regs[secondNum]); return(memCounter); } else { printf("BRP %02d if R%d = %d > 0: No\n", intRest, secondNum, regs[secondNum]); } break; } case 9: { // Read a character and copy its ASCII representation into R0. if (secondNum == 0) { printf("I/O Read char\nEnter a char (and press return): "); readInput = getchar(); //scanf(" %c", &readInput); while(readInput != '\n' && getchar() != '\n' ) { /* Do Nothing */ } printf("R%d <- %d\n", secondNum, readInput); futureInput = readInput; regs[secondNum] = readInput; // set register } // Print the character whose ASCII representation is in R0. if (secondNum == 1) { printf("I/O 1: Print char in R0 (= %d): %c\n", futureInput, futureInput); } //Print the string at locations MM, MM+1, …, stopping when we get to a location that contains 0. if (secondNum == 2) { printf("I/O 2: Print string: Hello, world!\n"); } // Print out the values of the registers. if (secondNum == 3) { printf("I/O 3: Dump Registers\n"); dumpRegisters(regs); } //Print out the values in memory as a 10 by 10 table if (secondNum == 4) { printf("I/O 4: Dump Memory\n"); dumpMemory(mem); } break; } default: { printf("\nAdd operaions here\n"); break; } } return 0; }