Changes to be committed:

new file:   infolabs/modelingfonneiman/code.c
new file:   infolabs/modelingfonneiman/tmp.out
This commit is contained in:
2025-11-09 23:40:38 +07:00
parent 09acaeef51
commit ef5bf64085
2 changed files with 95 additions and 0 deletions
+95
View File
@@ -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");
}