在MARIE中使用重复减法进行除法

时间:2016-04-08 23:48:45

标签: assembly 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 个答案:

答案 0 :(得分:1)

如果数字不能被分频器整除,请使用Skipcond 400  会有一个无穷循环,因为它会变为负数而不是零。

当余数不能被B整除时,需要注意不要使X递增。因此,要检查余数等于零,以便当A不再为正数时X可以递增。

    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