c语言写成如下形式:
int fibo(int n) {
if(n == 1 || n == 2) return 1;
return fibo(n - 1) + fibo(n - 2);//递归调用
}
改写:
int fibo(int eax) {
int ebx, ecx;
if(eax == 1) {
return eax;
}
if(eax == 2) {
eax = 1;
return eax;
}
int edx = eax;
eax = edx - 1;
eax = fibo(eax);
ebx = eax;
eax = edx - 2;
eax = fibo(eax);
ecx = eax;
eax = ebx + ecx;
return eax;
}
汇编语言如下:
fibo:
global main
fibo:
push ebx
push ecx
push edx//入栈,保存寄存器状态
cmp eax, 1
je _get_out
cmp eax, 2
je _get_out//相当于if(n == 1 || n == 2) return 1;
mov edx, eax
sub eax, 1
call fibo
mov ebx, eax
mov eax, edx
sub eax, 2
call fibo
mov ecx, eax
mov eax, ebx
add eax, ecx
pop edx
pop ecx
pop ebx
ret
_get_out:
mov eax, 1
ret
main:
mov eax, 7 //求数列中第七个数
call fibo
ret