Intel汇编-LOOP循环检查ECX含零值
# An example of the loop instruction
# loop 循环直到ECX为零
# loope/loopz 循环直到ECX为零,或者没有设置ZF标志
# loopne/loopnz 循环直到ECX为零,或者设置了ZF标志
# 为纠正07-loop.s改写成把0传给ECX带来的灾难问题,需要检查ECX包含零值时的特殊条件。
# 就是使用JCXZ执行条件分支。
.section .data
output:
.asciz "The value is:%d\n"
.section .text
.globl main
main:
movl $0, %ecx
movl $0, %eax
jcxz done # 检查ECX含零值时的特殊条件
loop1:
add %ecx, %eax
loop loop1 # loop指令首先把EXC中的值递减
done:
push %eax
push $output
call printf
add $8, %esp
movl $1, %eax
movl $0, %ebx
int $0x80
# gcc -o 08-better-loop 08-better-loop.s -m32
# The value is:0