JMP指令可用于实现循环.例如,以下代码片段可用于执行循环体10次.
MOVCL, 10L1:<LOOP-BODY>DECCLJNZL1
然而,处理器指令集包括一组用于实现迭代的循环指令.基本LOOP指令具有以下语法 :
LOOP label
其中, label 是标识目标指令的目标标签,如跳转指令中所示. LOOP指令假定 ECX寄存器包含循环计数.执行循环指令时,ECX寄存器递减,控制跳转到目标标签,直到ECX寄存器值,即计数器达到零值.
上面的代码片段可写为 :
mov ECX,10l1:<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 kernelsection.bssnum resb 1
当上述合作de编译并执行,它产生以下结果 :
123456789:
免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除