A little Help with what I am doing wrong here

Discussion in 'Assembly Language Programming (ALP) Forum' started by LordGus, Oct 25, 2011.

  1. LordGus

    LordGus New Member

    Joined:
    Oct 25, 2011
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Hello, I have got program running and its doing ok, but it keeps giving the wrong answer and I dont know where\what I did wrong. It looks all right to me but I know I am missing something simple I just cant put my finger on it to save my life.
    What it should do is find the GCD of two numbers and print that off. Am I not pushing the val1 and val2 right for the GCD function? should I use offset of val1 and val2? Or si there a better way?
    Thanks for any help

    Code:
    TITLE MASM GCD                      (GCD.asm)
    
    
    ; Description:GCD recursive
    ; 
    ; Revision date:
    
    INCLUDE Irvine32.inc
    .data
    myMessage BYTE "GCD Recursive",0dh,0ah,0
    myMess2   BYTE "The GCD is = " ,0dh,0ah,0
    
    
    ;first set of nums
    val1 DWORD  5
    val2 DWORD  20
    
    .code
    main PROC
        call Clrscr  
    
        mov     edx,offset myMessage
        call WriteString        ;write message
        call Crlf                ;new line
        push val1
        push val2
        call GCD
        
        exit
    main ENDP
    
    ;------------------------------------------------
    GCD PROC,
    ; This finds GCD
    ; Gets values from stored values
    ;returns NA
    
    ;------------------------------------------------
    
            xor edx,edx
            mov eax,dword ptr[esp+8] ;dividend
            mov ebx,dword ptr[esp+4] ;divisor
            div ebx              ;eax/ebx
            cmp  edx,0           ;remainder in edx
            je   L1                 ;yes: quit
            call GCD             ;no: call GCD agian
        L1:
            mov eax,ebx             ;move the divisor into eax for printing i.e GCD    
            mov     edx,offset myMess2
            call WriteString
            call WriteInt        ;Display GCD WriteInt uses EAX = qutent
            call crlf
            ret 8                ;clean up the stack
    GCD ENDP
    
    END main
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice