MARIE ASM Lang - 整数除法(正/负)

时间:2017-02-01 21:07:40

标签: assembly marie

出于学习目的,我试图在MARIE中编写任何整数除法。

这是标准(希望是正确的)代码,它将X除以Y和余数,但只有正整数。

MFMessageComposeViewController

我怎样才能让它适用于否定?可能有些IF和一些掩码可能,但我不知道如何正确地做到这一点。

1 个答案:

答案 0 :(得分:1)

取决于您如何定义... D/d=[q,r](Dividend / divisor = [quotient,remainder])

  • 5/2 = [2,1](你有这个)
  • -5 / -2 = [3,1]或 [2,-1] (x86方式)
  • 5 / -2 = [ - 2,1] (x86)或[-3,-1]
  • -5/2 = [-3,1]或 [ - 2,-1] (x86)

(在x86 CPU上,余数r的符号始终与被除数D的符号相同

如果你看一下上面的结果,在每种情况下绝对值是相同的:

  • | 5 | / | 2 | = [| 2 |,| 1 |]

余数具有被除数的符号,商具有被除数XOR除数的符号([+, +] == [-, -] == + vs [+, -] == [-, +] == - )。

所以你可以在你的例程开始时添加一个准备部分,它将测试每个值,并标记为一些标志,无论是正面还是负面,将其转换为正面,进行划分,然后是当前{{1通过标志修补结果。

有点像(这是我第一次使用Marie Assembly,所以更像是一个提示,并在需要的地方纠正它,希望只有语法,但可能甚至是逻辑错误,我没有验证代码的工作原理!):

END

其他选项可能是针对每种情况(4种变体)具有单独的例程变量,因为它们仅在ADD / SUBT Y / ONE和终止条件000与800之间不同,这将针对每种情况执行更少的指令(更好的性能),但会有更多的代码行加上面的代码可能会给你一些新的想法,如何在Assembly中做事。