有人可以解释一下如何用 NASAM 汇编语言编写 While 循环,例如涉及哪些寄存器需要哪些 mov 操作以及如何保持计数器,我正在尝试掌握汇编,但一开始有点棘手。 .
多谢你们
顺便说一句:我正在尝试为我正在学习的课程学习这种语言
I guess you ask about x86 assembler? In assembler there is no while loop (maybe you can use special macros for that sometime, depends on the Assembler). You have to construct by your own. You can use assembler commands like
jne, jnz, je, jz, cmp, inc, dec
or some more special outdated command
jcxz, loop
for example:
mov ecx,255
L1:
dec ecx
jne L1
ret
This example counts the value in the register ecx until 0 and then left the loop. Another example but which count above.
mov ecx,0
L2:
inc ecx
cmp ecx, 255
jne L2
ret
循环需要一个起点(为方便起见可能带有标签),中间的一些东西(循环体),以及跳回起点的指令。跳转可能是有条件的基于某些条件终止循环,或者循环体中可能有一些东西通过跳转到其他地方来显式地终止循环。对您使用的寄存器或内存位置或指令没有特别限制,但是,对于某些指令集(如 x86 和 x86-64),它们具有旨在使编写循环更容易的特定指令,并且可能具有一些硬编码依赖于某些寄存器。但是,同样,也不需要实际使用它们。
除此之外,您的问题很模糊,除了您正在为其编写的 CPU 制造商(英特尔、AMD ......)的程序员参考手册之外,没有什么要补充的了强烈推荐参考,通常免费下载。
许多宏汇编器确实支持 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。)