Long time no see
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
#include <stdio.h>
|
||||
void 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;
|
||||
}
|
||||
|
||||
// Блок отвечающий за вывод в терминал
|
||||
// значиний в момент выполнения комманд
|
||||
void 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");
|
||||
}
|
||||
BIN
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user