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