Деление с использованием повторного вычитания в 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
Другие вопросы по тегам