汇编——循环



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

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

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

LOOP 	label

其中,标签是目标标签,用于标识目标指令,正如跳转指令中一样。LOOP 指令假设 ECX 寄存器包含循环计数。执行 LOOP 指令时,ECX 寄存器减 1,并且控制跳转到目标标签,直至 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:
广告