2

我正在尝试用 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
4

1 回答 1

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
于 2018-11-17T14:25:32.427 回答