GCD程序x86汇编语言

先验
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章