我尝试编写一个输入数量为4的汇编程序。它将循环并将%eax当前值与原始输入数相乘,直到%ecx值为0时跳转到完成。
但程序运行后它返回0。我不确定为什么(?),%ecx寄存器值是否返回而不是%eax?
当有多个寄存器在其中使用值时,返回的内容有哪些规则?
.globl funk
.globl _funk
funk:
_funk:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl $1, %eax
movl $4, %ecx
jmp check
check:
cmpl $0, %ecx
jz done
jmp multiply
done:
popl %ebp
ret
multiply:
mull %edx
dec %ecx
jmp check