M68000装配,如何循环减法

时间:2018-04-14 02:51:14

标签: assembly 68000

我想做一个减法循环。我的任务是找出一笔100美元的钞票数量。例如,用户输入950美元。那里有9张一百美元的钞票。我首先做的是将用户输入存储在日期寄存器1中,并将其与100进行比较。

cmpi.w      #100,D1

我想基本上做"如果D1小于100,则减去另外100"。我怎样才能实现这个循环?我想使用大于和小于指令的分支,但我不确定如何。

1 个答案:

答案 0 :(得分:0)

正常算法将除以100.M68K DIVU / DIVS指令同时提供结果和余数:

MOVE #950,D1
DIVU #100,D1

0x00320009留在D1寄存器中,即0x9(9)作为结果,0x32(50)作为余数。

如果你真的想要一个循环,请看一下下面的代码(在EASy68K(http://www.easy68k.com/上)汇编并运行)。这是非常标准的汇编代码,其他架构上的循环看起来非常相似。 (事实上​​,这是我第一次编写M68K汇编代码。)

START:
    MOVE #950,D1
Loop:
    CMP #100,D1
    BPL OverEqual100
    BRA Under100
OverEqual100:
    SUB #100,D1
    ADD #1,D0
    BRA Loop
Under100:
    SIMHALT

(另见本答复的评论。)