INCLUDE Irvine32.inc
.data
heading BYTE "This is a program for GCD.........", 0
inputX BYTE "Enter an integer X: ", 0
inputY BYTE "Enter an integer Y: ", 0
ansGCD BYTE "The value of GCD is: ", 0
valX DWORD ?
valY DWORD ?
.code
main PROC
mov edx, OFFSET heading ;print header
call WriteString
call Crlf
mov edx, OFFSET inputX ;input X
call WriteString
call ReadDec
mov valX, eax
call Crlf
mov edx, OFFSET inputY ;inputY
call WriteString
call ReadDec
mov valY, eax
call Crlf
mov eax,DWORD ptr[valX] ;dividend
mov ebx,DWORD ptr[valY] ;divisor
push valY ;pushing values into stack
push valX
call CalcGdcI
call Dumpregs
exit
main ENDP
CalcGdcI PROC
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 CalcGdcI ;no: call CalcGdcI again
L1:
mov eax, ebx ;move the divisor into eax to print
mov edx, OFFSET ansGCD
call WriteString
call WriteDec ;Display GCD WriteInt
call Crlf
ret 8 ;clean up the stack
CalcGdcI ENDP
END main
如果数字不是可整除的,我得到错误的答案,例如(54,24)但与(10,100)一样可以正常工作...谢谢
我认为您应该写一些类似的东西(我已经编写汇编多年了):
CalcGdcI PROC
xor edx, edx
mov eax, DWORD ptr[esp+8] ;dividend
mov ebx, DWORD ptr[esp+4] ;divisor
loop:
div ebx ;eax/ebx
cmp edx, 0 ;remainder in edx
je L1 ;yes: quit
mov eax, ebx ;restart with eax = ebx
mov ebx, edx ;and ebx = edx
jmp loop
l1:
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句