JMP指令可用于實(shí)現(xiàn)循環(huán)。例如,下面的代碼片段可用于執(zhí)行循環(huán)體10次。
MOV CL, 10 L1: <LOOP-BODY> DEC CL JNZ L1
然而,該處理器的指令集包括一組用于執(zhí)行迭代循環(huán)指令。基本循環(huán)指令的語法如下:
LOOP label
其中,標(biāo)簽是對象標(biāo)注,標(biāo)識中的跳轉(zhuǎn)指令的目標(biāo)指令。LOOP指令假定ECX寄存器包含循環(huán)計(jì)數(shù)值。當(dāng)循環(huán)指令被執(zhí)行時(shí),ECX寄存器遞減,控制跳轉(zhuǎn)到目標(biāo)標(biāo)簽直到ECX寄存器的值,即計(jì)數(shù)器達(dá)到零值。
上面的代碼可以寫成:
mov ECX,10 l1: <loop body> loop l1
下面的程序?qū)⒋蛴≡谄聊簧蠑?shù)字1?9:
section .text global _start ;must be declared for using gcc _start: ;tell linker entry yiibai 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
上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:
123456789: