Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly M68000部件,如何循环减法_Assembly_68000 - Fatal编程技术网

Assembly M68000部件,如何循环减法

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

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

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