80x86汇编代码未从函数返回并显示输出

时间:2017-11-27 23:50:07

标签: visual-studio assembly x86 masm

该程序的目标是使用此伪代码定义的递归函数计算两个数字的GCD

unsigned int gcd ( unsigned int a, unsigned int b ) {
if ( a > b )
        return gcd ( a - b, b ) ;

if ( a < b )
        return gcd ( a, b - a ) ;

    return a ;
}

这是我遇到问题的(无疑是差的)汇编代码。

.586
.MODEL FLAT
INCLUDE io.h
.STACK 4096

.DATA
a DWORD   ?
b DWORD   ?
prompt1 BYTE    "a: ", 0
prompt2 BYTE    "b:", 0
string  BYTE    20 DUP (?)
resultLbl BYTE  "gcd:", 0
result  BYTE    11 DUP (?), 0


.CODE
_MainProc PROC
        input   prompt1, string, 20      
        atod    string          
        mov     a, eax    

        input   prompt2, string, 20      
        atod    string
        mov     b, eax

        push    b         
        push    a         
        call    _gcd           
        add     esp, 8          

        dtoa    result, eax     
        output  resultLbl, result  

        mov     eax, 0  
        ret
_MainProc ENDP


_gcd   PROC
        push    ebp             
        mov     ebp, esp       
        push    ebx           
        push eax

        mov     eax, [ebp+8]   
        mov     ebx, [ebp+12]  

        cmp     eax, ebx
        jg      loop1
        cmp     eax, ebx
        jl      loop2

        pop     ebx             
        pop     ebp             
        ret   

loop1:
        push    ebx
        sub     eax, ebx
        push    eax
        call    _gcd

loop2:             
        sub     ebx, eax
        push    ebx
        push    eax
        output  did2, result
        call    _gcd




_gcd   ENDP

END

通过在循环中创建一些输出以在消息出现时显示消息,我可以告诉程序正在正确计算GCD,但是只要两个值相等并且&#34; ret&#34;在_gcd内部命中程序终止。我需要更改什么才能返回并正确显示GCD值?

0 个答案:

没有答案