汇编语言 循环

  • 循环

    JMP指令可用于实现循环。例如,以下代码段可用于执行循环主体10次。
    
    MOV     CL, 10
    L1:
    <LOOP-BODY>
    DEC     CL
    JNZ     L1
    
    但是,处理器指令集包括一组用于实现迭代的循环指令。基本的LOOP指令具有以下语法-
    
    LOOP    label
    
    其中,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 point
       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: