Assembly 循环
JMP指令可用于实现循环。例如,下面的代码片段可用于执行循环体10次。
MOV CL, 10 L1: <LOOP-BODY> DEC CL JNZ L1
然而,该处理器的指令集包括一组用于执行迭代循环指令。基本循环指令的语法如下:
LOOP label
其中,标签是对象标注,标识中的跳转指令的目标指令。LOOP指令假定ECX寄存器包含循环计数值。当循环指令被执行时,ECX寄存器递减,控制跳转到目标标签直到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 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
上面的代码编译和执行时,它会产生以下结果:
123456789:
本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 循环
本文地址:http://www.codeinn.net/assembly/1006.html
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 循环
本文地址:http://www.codeinn.net/assembly/1006.html

