汇编语言实现斐波那契数列

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

猜你喜欢

转载自blog.csdn.net/danieldingshengli/article/details/81096598
今日推荐