Changes to be committed:
new file: infolabs/modelingfonneiman/code.c new file: infolabs/modelingfonneiman/tmp.out
This commit is contained in:
@@ -0,0 +1,95 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
int pt(int prog[], int cmd,int acc,int pc);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
int prog[] = {
|
||||||
|
2, 5, // load 5
|
||||||
|
3, 3, // mult 3
|
||||||
|
1, // print acc
|
||||||
|
4, 7, // jump 7
|
||||||
|
2, 0, // load 0
|
||||||
|
5, 11,// jz 11
|
||||||
|
2, 2, // load 2
|
||||||
|
5, 1, // jz 1
|
||||||
|
3, 4, // mul 4
|
||||||
|
1, // print
|
||||||
|
0 // stop
|
||||||
|
};
|
||||||
|
|
||||||
|
int cmd, pc, acc;
|
||||||
|
cmd = pc = acc = 0;
|
||||||
|
|
||||||
|
while(pc != -1){
|
||||||
|
cmd = prog[pc];
|
||||||
|
switch(cmd){
|
||||||
|
case 0: //Проверка на команду остановки
|
||||||
|
printf("STOP\t ACC = %d\t PC = %d",acc,pc);
|
||||||
|
pc = -1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // Комманда 1 - вывод регистра
|
||||||
|
pt(prog,cmd,acc,pc);
|
||||||
|
pc++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: // Комманда 2 - Присвоить регистру число
|
||||||
|
acc = prog[pc+1];// из след ячейки памяти
|
||||||
|
pt(prog,cmd,acc,pc);
|
||||||
|
pc+=2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // Комманда 3 - Умножить регистр на число
|
||||||
|
acc *= prog[pc+1];// в след ячейке памяти
|
||||||
|
pt(prog,cmd,acc,pc);
|
||||||
|
pc +=2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4: // Комманда 4 - Безусловный переход на указанную
|
||||||
|
pt(prog,cmd,acc,pc); // ячейку памяти
|
||||||
|
pc = prog[pc+1];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5: // Комманда 5 - Переход на указанную ячейку
|
||||||
|
pt(prog,cmd,acc,pc);// памяти если регистр равен 0
|
||||||
|
if(acc == 0){
|
||||||
|
pc = prog[pc+1];
|
||||||
|
}
|
||||||
|
else({
|
||||||
|
pc+=2;
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: printf("err\n");return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Блок отвечающий за вывод в терминал
|
||||||
|
// значиний в момент выполнения комманд
|
||||||
|
int pt(int prog[],int cmd,int acc,int pc){
|
||||||
|
printf("\n");
|
||||||
|
printf("cmd: %d\n",cmd);
|
||||||
|
switch(cmd){
|
||||||
|
case 1:
|
||||||
|
printf("\tPrint acc\n\t\tacc = %d\n",acc);
|
||||||
|
printf("\t\tcurr pc = %d",pc);break;
|
||||||
|
case 2:
|
||||||
|
printf("\tLoad acc\n\t\tacc = %d\n",acc);
|
||||||
|
printf("\t\tcurr pc = %d",pc);break;
|
||||||
|
case 3:
|
||||||
|
printf("\tMult acc\n\t\tacc = %d\n",acc);
|
||||||
|
printf("\t\tcurr pc = %d",pc);break;
|
||||||
|
case 4:
|
||||||
|
printf("\tJump to\n\t\tto = %d\n",prog[pc+1]);
|
||||||
|
printf("\t\tcurr pc = %d",pc);break;
|
||||||
|
case 5:
|
||||||
|
if(acc==0){
|
||||||
|
printf("\tJump to if acc zero\n\t\tto = %d\n",prog[pc+1]);
|
||||||
|
}else(printf("\tJump to if acc zero\n\t\tacc != 0\n"));
|
||||||
|
printf("\t\tcurr pc = %d",pc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
Executable
BIN
Binary file not shown.
Reference in New Issue
Block a user