2

最終的な計算まで機能する階乗計算プログラムを作成しました。で階乗値を計算しているとき_multiply_fact、ベース ポインタはランダムな値を指すことになります。私は何を間違っていますか?

通話中

push n
call _factorial
add esp, 4

手順

_factorial:
    push ebp            ;save base pointer
    mov ebp, esp        ;set up new base pointer
    mov ebx, 8[ebp]

    cmp ebx, 1          ;while n > 0
    jg _multiply_fact   ;decrement n
    mov eax, 1          ;if n == 0 ret 1
    pop ebp
    ret                 ;return to multipy_fact for calculation

_multiply_fact:
    pop ebp     
    push ebp
    mov ebp, esp
    mov ebx, 8[ebp]

    dec ebx                 ;decrements n-1 times
    push ebx
    call _factorial 

    inc ebx                 
    mul ebx                 ;recursively multiplies eax * (n+1)
    pop ebp
    ret
4

2 に答える 2

0

もう少しトラブルシューティングを行った後、含めるのを忘れたためにエラーが発生したことがわかりました

add esp, 4

_multiply_fact プロシージャで _factorial を呼び出した後

于 2016-04-06T06:12:48.447 に答える