M68000 Assembly,如何循环减法
M68000 Assembly, how do I loop a subtraction
我想做一个减法循环。我的任务是找出总计 100 美元钞票的数量。例如,用户输入 $950。里面有 9 张一百美元的钞票。我首先做的是将用户输入存储在日期寄存器 1 中,并将其与 100 进行比较。
cmpi.w #100,D1
我基本上想做 "if D1 is less than 100, subtract another 100"。我怎样才能实现这个循环?我想使用大于和小于指令的分支,但不确定如何使用。
正常算法是除以100。M68K DIVU
/DIVS
指令同时提供结果和余数:
MOVE #950,D1
DIVU #100,D1
会在D1寄存器中留下0x00320009
,即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
(另请参阅此答案所附的评论。)
我想做一个减法循环。我的任务是找出总计 100 美元钞票的数量。例如,用户输入 $950。里面有 9 张一百美元的钞票。我首先做的是将用户输入存储在日期寄存器 1 中,并将其与 100 进行比较。
cmpi.w #100,D1
我基本上想做 "if D1 is less than 100, subtract another 100"。我怎样才能实现这个循环?我想使用大于和小于指令的分支,但不确定如何使用。
正常算法是除以100。M68K DIVU
/DIVS
指令同时提供结果和余数:
MOVE #950,D1
DIVU #100,D1
会在D1寄存器中留下0x00320009
,即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
(另请参阅此答案所附的评论。)