汇编——循环
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:
广告