我正在使用MARIE程序学习装配,但是从书中我无法解决这个问题:
将一个数字除以另一个数字,并将商和余数存储在两个不同的存储位置。
这就是我到目前为止,我做错了什么?仅供参考,程序中没有内置除法或乘法因此我必须使用循环来进行,但我想我错过了一些东西。
该程序可以在这里http://computerscience.jbpub.com/ecoa/2e/downloads/MarieSim-v1.3.01.zip
ORG 100
Input / Enter a number
Store X / Saves the number
Input / Enter a number
Store Y / Saves the number
Load Zero / Move 0 into AC
Store Z / Set Z to 0
If, Load Z / Load Z
Skipcond 400 / If AC=0 (Z=0), skip the next instruction
Jump Endif / Jump to Endif if X is not greater than 1
Then, Load X
Subt Y / X - Y
Store X / X = X - Y
Endif, Load Z / Load Z into AC
Add One / Add 1 to Z
Store Z / Z = Z + 1
Output / Print to screen
Halt / Terminate program
X, Dec 0 / X has starting value
Y, Dec 0 / Y has starting value
Z, Dec 0
One, Dec 1 / Use as a constant
Zero, Dec 0 / Use as a constant
END
答案 0 :(得分:0)
如果你想使用重复减法来划分,你的程序最好有某种形式的循环。
你的程序结构的方式,它只会在从X中减去Y一次后直接运行到Halt
指令,Z将最终成为一个。
最好手动完成代码并在一张纸上执行每一步,然后你就会看到出错的地方。顺便说一句,对Jump Endif
的评论是错误的,它不是X,而是你在检查Z.
您可能希望修改代码,然后修改问题,如果它仍然存在问题。
答案 1 :(得分:-1)
////Divide Positive numbers/ A have to be biger then B///by: E
ORG 100
Input /Input A value
Store A
Input /Input B value
Store B
If, Load A
Skipcond 800
Jump EndIf
Then, Load A
Subt B
Store A
Load C
Add One
Store C
Jump If
EndIf, Load C
Halt, Output
C, DEC 0
A, DEC 0
B, DEC 0
One, DEC 1