Nasm 循环

JMP指令可用于实现循环。例如,下面的代码片段可用于执行循环体10次。

MOV    CL, 10
L1:
<LOOP-BODY>
DEC    CL
JNZ    L1

然而,该处理器的指令集包括一组用于执行迭代循环指令。基本循环指令的语法如下:

LOOP     label

其中,标签是对象标注,标识中的跳转指令的目标指令。LOOP指令假定ECX寄存器包含循环计数值。当循环指令被执行时,ECX寄存器递减,控制跳转到目标标签直到ECX寄存器的值,即计数器达到零值。

上面的代码可以写成:

mov ECX,10
l1:
<loop body>
loop l1

例子:

下面的程序将打印在屏幕上数字1〜9:

section    .text
global _start ;must be declared for using gcc
_start:    ;tell linker entry bytekits
    mov ecx,10
    mov eax, '1'

l1:
    mov [num], eax
    mov eax, 4
    mov ebx, 1
    push ecx
    mov ecx, num
mov edx, 1
int 0x80
    mov eax, [num]
    sub eax, '0'
    inc eax
    add eax, '0'
    pop ecx
    loop l1
    mov eax,1   ;system call number (sys_exit)
    int 0x80;call kernel
section    .bss
num resb 1

上面的代码编译和执行时,它会产生以下结果:

123456789:
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!