Assembly M68000部件,如何循环减法
我想做一个减法循环。我的任务是找出100美元钞票的总数。例如,用户输入$950。里面有9张100美元的钞票。我首先做的是将用户输入存储在日期寄存器1中,并将其与100进行比较Assembly M68000部件,如何循环减法,assembly,68000,Assembly,68000,我想做一个减法循环。我的任务是找出100美元钞票的总数。例如,用户输入$950。里面有9张100美元的钞票。我首先做的是将用户输入存储在日期寄存器1中,并将其与100进行比较 cmpi.w #100,D1 我想基本上做“如果D1小于100,再减去100”。如何实现这个循环?我想使用大于和小于指令的分支,但不确定如何使用。通常的算法是除以100。M68KDIVU/DIVS指令同时提供结果和剩余部分: MOVE #950,D1 DIVU #100,D1 将0x00320009保留在D1
cmpi.w #100,D1
我想基本上做“如果D1小于100,再减去100”。如何实现这个循环?我想使用大于和小于指令的分支,但不确定如何使用。通常的算法是除以100。M68K
DIVU
/DIVS
指令同时提供结果和剩余部分:
MOVE #950,D1
DIVU #100,D1
将0x00320009
保留在D1寄存器中,即0x9(9)作为结果,0x32(50)作为余数
如果确实需要循环,请查看以下代码(在EASy68K()上汇编和运行)。这是非常标准的汇编代码,其他体系结构上的循环看起来非常相似。(事实上,这是我第一次编写M68K汇编代码。)
(另请参见本答案所附的注释。)您的意思是“如果D1小于100,请勿再减去100”。。查看一些教程,我觉得这篇文章过于冗长,所以可能对您有好处:(第6部分和第7部分讨论有符号/无符号整数分支)。。。通常,您创建一段代码,它进行减法运算并循环,而另一段代码不进行减法运算并完成运算,将一些标签放在前面(标签类似于书签,标记特定的内存地址),然后使用分支指令跳转到特定的内存位置(标签)当某些条件为真时。您需要在循环的开始处使用
=
分支或
=
,所以代码是正确的。(助记符是不准确的,因为在数学中零不是正值。而且你的标签也是不准确的,应该是overqual100:
和Under100:
)并且它可以通过只使用bmi Under100
而不是两次bpl+bra
跳转来简化。修复了标签。谢谢
START:
MOVE #950,D1
Loop:
CMP #100,D1
BPL OverEqual100
BRA Under100
OverEqual100:
SUB #100,D1
ADD #1,D0
BRA Loop
Under100:
SIMHALT