目录

汇编 - 循环

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

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

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

LOOP 	label

其中, label是标识目标指令的目标标签,如跳转指令中所示。 LOOP指令假定ECX register contains the loop count 。 执行循环指令时,ECX寄存器递减,控制跳转到目标标签,直到ECX寄存器值,即计数器达到零值。

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

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

例子 (Example)

以下程序在屏幕上打印数字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:
↑回到顶部↑
WIKI教程 @2018