Эмулятор процессора - 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;
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5