鍍金池/ 教程/ Java/ Assembly 循環(huán)
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly 循環(huán)

JMP指令可用于實現(xiàn)循環(huán)。例如,下面的代碼片段可用于執(zhí)行循環(huán)體10次。

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

然而,該處理器的指令集包括一組用于執(zhí)行迭代循環(huán)指令?;狙h(huán)指令的語法如下:

LOOP 	label

其中,標(biāo)簽是對象標(biāo)注,標(biāo)識中的跳轉(zhuǎn)指令的目標(biāo)指令。LOOP指令假定ECX寄存器包含循環(huán)計數(shù)值。當(dāng)循環(huán)指令被執(zhí)行時,ECX寄存器遞減,控制跳轉(zhuǎn)到目標(biāo)標(biāo)簽直到ECX寄存器的值,即計數(shù)器達到零值。

上面的代碼可以寫成:

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í)行時,它會產(chǎn)生以下結(jié)果:

123456789: