有人可以解释一下如何在NASAM汇编语言中编写一个While循环,例如哪些寄存器涉及需要什么样的mov操作以及如何保存计数器,我试图掌握汇编但是它有点棘手begining ...
谢谢大家
顺便说一下:我正在尝试学习这门语言,我正在学习答案 0 :(得分:5)
我想你问一下x86汇编程序? 在汇编程序中没有while循环(也许你可以使用特殊的宏,取决于汇编程序)。你必须自己构建。您可以使用汇编程序命令,如
jne, jnz, je, jz, cmp, inc, dec
或一些更特别的过时命令
jcxz, loop
例如:
mov ecx,255
loop1:
dec ecx
jne loop1
ret
此示例将寄存器ecx中的值计数到0,然后离开循环。 另一个例子,但计算在上面。
mov ecx,0
loop1:
inc ecx
cmp ecx, 255
jne loop1
ret
答案 1 :(得分:0)
循环需要一个起点(为方便起见,可能带有标签),中间有些东西(循环体),以及跳回到开头的指令。跳转可以是基于某些条件终止循环的条件,或者循环体中可能存在通过跳转到别处而显式终止循环的某些东西。对您使用的寄存器或存储器位置或指令没有特别限制,但是,某些指令集(如x86和x86-64)具有特定指令,旨在使写入循环更容易,并且可能具有一些硬编码依赖性某些寄存器。但是,同样,也没有要求实际使用它们。
除此之外,你的问题很模糊,除了程序员参考你正在编写的CPU制造商的手册(英特尔,AMD,.....)之外,没有太多要补充的内容。 。)是强烈推荐的参考文献,通常可以免费下载。
答案 2 :(得分:0)
许多宏汇编程序确实支持WHILE宏:
http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_8/CH08-9.html#HEADING9-90
这是摩托罗拉在70年代写的一些6809代码:
WHILE B,GT,(0,Y)
ORA B,X
DECB
ENDWH
(为清楚起见,那里使用的唯一“实际”6809操作码是ORA和DECB。)