2015-03-31 45 views
1

我試圖編寫一個簡單的循環來調用它自己並記錄它循環的次數。當我通過它一步,一旦ECX命中0內部recursive PROC,它跳到RETL1 - I 0之後,認爲這將返回main PROC無法從遞歸循環返回到主PROC - Stack Overflow

我的理解是,當一個程序被調用時推棧上的指令指針然後當RET被調用時,它會彈出並返回到該點。

; Calls a recursive procedure 
; 

INCLUDE Irvine32.inc 

.data 

constant DWORD 5 
count DWORD ? 

.code 
main PROC 
    mov eax, 0 
    mov ecx, constant 
    CALL recursive 
main ENDP 

recursive PROC 
    add eax, 1 
    loop L1 
    ret 
    L1: 
     CALL recursive 
     ret 
recursive ENDP 

END main 

當我把RETL1我得到「沒有源代碼可用」頁面,在可視s 2013年

+0

爲了回到'main',你必須執行和你一樣多的'RET's。如果你繼續邁步,會發生什麼? – Michael 2015-03-31 05:27:00

回答

0

出現如果我打印的maineaxCALL recursive之後,我得到5 ,所以你的代碼確實返回到main。問題是您的main缺少ret。也就是說,它應改爲:

main PROC 
    mov eax, 0 
    mov ecx, constant 
    CALL recursive 
    ret 
main ENDP 

因爲這就是你的程序應該結束了,你也可以使用Win32函數invoke ExitProcess,0而不是ret