📜  汇编-循环

📅  最后修改于: 2020-11-05 05:07:43             🧑  作者: Mango


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

MOV    CL, 10
L1:

DEC    CL
JNZ    L1

但是,处理器指令集包括一组用于实现迭代的循环指令。基本的LOOP指令具有以下语法-

LOOP     label

其中, label是标识目标指令的目标标签,如跳转指令中所述。 LOOP指令假定ECX寄存器包含循环计数。当执行循环指令时,ECX寄存器递减,并且控制跳至目标标签,直到ECX寄存器的值(即计数器达到零)为止。

上面的代码片段可以写成-

mov ECX,10
l1:

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: