在Nasm中while循环的必需例子

时间:2012-10-16 14:38:11

标签: assembly nasm

有人可以解释一下如何在NASAM汇编语言中编写一个While循环,例如哪些寄存器涉及需要什么样的mov操作以及如何保存计数器,我试图掌握汇编但是它有点棘手begining ...

谢谢大家

顺便说一下:我正在尝试学习这门语言,我正在学习

3 个答案:

答案 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。)