Эмулятор процессора - C (СИ)
Формулировка задачи:
Рассмотрим 8-битный процессор, который может обрабатывать элементарные команды, получая их на вход в виде кодов.
Числа считаются беззнаковыми.
HLT (0) - останов
ADD (1) - сложение
SUB (2) - вычитание
У этих команд аргументы - 2 номера регистров, результат записывается в первый из них.
MOV (3) - присвоение
Аргументы - номер регистра и целое число, которое в него заносится.
IR (4) - вывести все регистры
Регистры и их номера: A (5), B (6), C (7), D (8).
До начала работы программы в регистрах нули. Что будет выведено в результате работы программы?
Входные данные Почему-то не проходит последний тест( Может кто увидит ошибку в коде или просто посоветует как сделать можно?
3 5 1 3 6 2 1 5 6 4 0
Результат3 2 0 0
Вот мой код:#include <stdio.h> #include <stdlib.h> main() { unsigned a[4], p[3], i; a[1]=0; a[2]=0; a[0]=0; a[3]=0; while (1) { for(i=0; i<3; i++) {scanf("%u", &(p[i])); if ((p[0]==0)||(p[0]==4)) break;} if (p[0]==3) { a[p[1]-5]=p[2]; } if (p[0]==2) { if ((a[p[1]-5])<(a[p[2]-5])) a[p[1]-5]=0; else a[p[1]-5]=a[p[1]-5]-a[p[2]-5]; } if (p[0]==1) { a[p[1]-5]=a[p[1]-5]+a[p[2]-5]; } if (p[0]==0) break; if (p[0]==4) printf("%u %u %u %u\n",a[0],a[1],a[2],a[3]); } return 0; }
Решение задачи: «Эмулятор процессора»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> main() { unsigned a[4], p[3], i; a[1]=0; a[2]=0; a[0]=0; a[3]=0; while (1) { for(i=0; i<3; i++) {scanf("%u", &(p[i])); if ((p[0]==0)||(p[0]==4)) break;} if (p[0]==3) { a[p[1]-5]=p[2]; if (a[p[1]-5]>255) {a[p[1]-5]=0;a[p[1]-4]++;}; } else if (p[0]==2) { if ((a[p[1]-5])<(a[p[2]-5])) a[p[1]-5]=0; else a[p[1]-5]=a[p[1]-5]-a[p[2]-5]; } else if (p[0]==1) { a[p[1]-5]=a[p[1]-5]+a[p[2]-5]; if (a[p[1]-5]>255) {a[p[1]-5]=0;a[p[1]-4]++;}; } else if (p[0]==0) break; else if (p[0]==4) printf("%u %u %u %u\n",a[0],a[1],a[2],a[3]); } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д