Деление с использованием повторного вычитания в MARIE
Я пытаюсь написать программу на ассемблере MARIE, которая разделит два числа, используя повторное вычитание. Мне нужно посчитать количество вычитаний, необходимых для достижения нуля или минус числа. У меня есть несколько проблем с этим, вот мой код до сих пор:
Load A
Store A
Load, Load A
Subt B
Skipcond 800
Jump Endloop
Load C
Add One
Store C
Endloop, Output
Halt
A, DEC 10
B, DEC 2
C, DEC 0
One, DEC 1
Любая помощь будет высоко ценится, так как я боролся с этим некоторое время
ОБНОВИТЬ:
Я изменил свой код, но теперь получаю бесконечный цикл - есть идеи, как я могу это исправить?
Input
Store A
Input
Store B
Load A
Skipcond 800
Jump Endloop
Loop, Subt B
Store A
Load X
Add One
Store X
Load A
Skipcond 400
Jump Loop
Load X
Endloop, Halt
A, DEC 0
B, DEC 0
X, DEC 0
One, DEC 1
1 ответ
С помощью Skipcond 400
если число не делится делителем, будет бесконечный цикл, так как он станет отрицательным, а не нулевым.
Необходимо соблюдать осторожность, чтобы не увеличивать X, когда остаток не делится на B. Поэтому выполняется проверка для остатка, равного нулю, поэтому X можно увеличивать, когда A больше не является положительным.
Input
Store A
Input
Store B
Loop, Load A
Subt B
Store A
Skipcond 800
Jump Endloop / While X is positive it will continue
Load X
Add One
Store X
Jump Loop
IncrementX, Load X
Add One
Store X
Load A
Subt B
Store A
Endloop, Load A
Skipcond 000 /Skip if negative
Jump IncrementX
Load X
Output
Halt
A, DEC 0
B, DEC 0
X, DEC 0
One, DEC 1