汇编语言 循环
JMP 指令可用于实现循环。例如,以下代码段可用于执行循环体 10 次。
MOVCL, 10L1:<LOOP-BODY>DECCLJNZL1
但是,处理器指令集包括一组用于实现迭代的循环指令。
基本的 LOOP 指令语法如下:
LOOP label
其中,label 是标识目标指令的目标标签,如跳转指令中所述。循环指令假定 ECX 寄存器包含循环计数。当执行循环指令时,ECX 寄存器递减,并且控制跳至目标标签,直到 ECX 寄存器的值(即计数器达到零)为止。
上面的代码可以写为:
mov ECX,10l1:<loop body>loop l1
实例
以下程序在屏幕上打印数字 1 到 9:
section .textglobal _start ;must be declared for using gcc_start: ;tell linker entry pointmov ecx,10mov eax, '1'l1:mov [num], eaxmov eax, 4mov ebx, 1push ecxmov ecx, nummov edx, 1int 0x80mov eax, [num]sub eax, '0'inc eaxadd eax, '0'pop ecxloop l1mov eax,1 ;system call number (sys_exit)int 0x80 ;call kernelsection .bssnum resb 1
结果如下:
123456789: