#include #include FILE *infile; unsigned char mem[32]; unsigned char accu, pc; char get(char *str) { char c; int j; c = 0; for (j=0; j<8; j++) c += (str[j]-'0') * pow(2,(7-j)); return c; } void put() { int i; int pt; for (i=0; i<8; i++) { pt = (int)(pow(2,(7-i))); if (accu/pt > 0) printf("1"); else printf("0"); accu = accu % pt; } printf("\n"); } int main() { int b; int i, instr; char s[12]; infile = fopen("computer.in", "r"); while(1) { accu = 0; pc = 0; for(i=0; i<32; i++) { fscanf(infile, "%s\n", s); /* if (feof(infile)) return 0;*/ mem[i] = get(s); } b=0; while(b==0) { fscanf(infile, "%s\n", s); instr = get(s); pc++; if (s[0]=='1' && s[1]=='1' && s[2]=='1') { put(); b = 1; } if (s[0]=='1' && s[1]=='1' && s[2]=='0') pc = instr % 32; if (s[0]=='1' && s[1]=='0' && s[2]=='1') accu++; if (s[0]=='1' && s[1]=='0' && s[2]=='0') accu--; if (s[0]=='0' && s[1]=='1' && s[2]=='0') if (accu==0) pc = instr % 32; if (s[0]=='0' && s[1]=='0' && s[2]=='1') accu = mem[instr % 32]; if (s[0]=='0' && s[1]=='0' && s[2]=='0') mem[instr] = accu; /* printf("C: %s Accu: %d\n", s, accu); */ if (feof(infile)) { return 0;} } } fclose(infile); return 0; }