Почему мой код продолжает получать ошибку сравнения в строке 2, и как я могу это исправить? - PullRequest
0 голосов
/ 24 марта 2019

На хакерском языке ассемблера в симуляторе процессора Add4.asm тест не проходит в строке 2. Я пробовал разные формы, чтобы исправить это, но не могу понять. Как я могу установить его на 0 или, если это не проблема, как еще я могу исправить свой код? Справка по языку ассемблера ADD4

Всякий раз, когда я запускаю свой файл .asm, в строке 2 я получаю ошибку сравнения. Пожалуйста, помогите мне решить эту проблему. Вот мой код .asm, за которым следует ADD4.tst. Номера строк для Add4.asm четко аннотированы.

Add4 добавляет четыре числа (найденные в RAM [0],…, RAM [3] или R0,…, R3 эквивалентно) и сохраняет результат в RAM [0] (a.k.a. R0). Ваша программа должна завершиться за 30 циклов или меньше

Add4.asm:

1. @1
2. D=M
3. @2
4. D=D+M
5. @3
6. D=D+M
7. @4
8. D=D+M
9. @5
10. D=D+M
11. @0
12. M=D

Add4.tst:

load Add4.asm,
output-file Add4.out,
compare-to Add4.cmp,
output-list RAM[0]%D2.6.2;
set RAM[0] 1,
set RAM[1] 2,
set RAM[2] 3,
set RAM[3] 4,
repeat 30
{ ticktock; }
output;
set PC 0,
set RAM[0] 0,
set RAM[1] 0,
set RAM[2] 0,
set RAM[3] 0,
repeat 30
{ ticktock; }
output;
set PC 0,
set RAM[0] -10,
set RAM[1] 5,
set RAM[2] 100,
set RAM[3] 9,
repeat 30
{ ticktock; }
output;

add4.cmp:

1.|  RAM[0]  |
2.|      10  |
3.|       0  |
4.|     104  |

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Вы ошибочно используете @1, @2 и т. Д., Чтобы ссылаться на значения, хранящиеся в ОЗУ.На самом деле это буквальные числа 1, 2 и т. Д., Поэтому ваша программа всегда будет добавлять одни и те же числа, что приведет к ошибке сравнения.

Вместо этого вы должны поставить префикс перед R, если вы ссылаетесь на регистр, следующим образом:

@R0
D=M
@R1
D=D+M
@R2
D=D+M
@R3
D=D+M
@R0
M=D
0 голосов
/ 24 марта 2019

Не зная, что должен делать Add4, трудно дать вам значимую обратную связь.В дополнение к предоставлению файла Add4.cmp, как предлагает @jknotek, вы также должны определить задачу, которую он пытается выполнить.

Однако, одна вещь, которая выпадает, это то, что ваша тестовая установка инициализирует адреса памяти 0-3, и вы получаете доступ к адресам 1-5 и сохраняете их в адрес 0.

Кроме того, для ясности обычно лучше обращаться к ячейкам памяти 0-15 по заранее заданным символам @Rn.

...