M.A.R.I.E将一个数字除以另一个数字

时间:2010-10-25 00:58:22

标签: assembly marie

我正在使用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

2 个答案:

答案 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