点击(此处)折叠或打开
; usage of ECX testecx.asm
section .data
output: db “result is %d”, 0ah
extern printf,exit
section .text
global _start
_start:
mov ecx,10 ; 循环10次,每循环一次ECX寄存器的值减1
mov eax, 0 ; 循环求和的结果保存在EAX里,所以初始化为0
jcxz done ; 这句代码的作用是防止ecx初始被设置成0,执行循环时,EXC先减1,然后再判断ECX是否为0。如果一开始ECX就为0,那么减1后,就变成了-1,程序就会出问题。感兴趣的童鞋,可以将这句代码注释掉,并将ECX初始值设置为0看一下程序的执行结果。
sum_label:
add eax,ecx ; 将ECX寄存器里的值依次累加到EAX里
loop sum_label; 循环跳转
push eax ; 以下三行代码完成printf(“%dn”,eax)的调用
push output
call printf
done:
push 0 ; 以下两行代码完成exit(0)的调用
call exit