即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

汇编语言: 根据欧几里德辗转相除法求两个正整数M、N的最大公约数R。

编程语言 Shuphen 33℃ 0评论

根据欧几里德辗转相除法求两个正整数M、N的最大公约数R。


2017年6月7日20:37:32

辗转相除法


1 求A/B的余数R


2 如果R=0 则B为最大公约数 退出循环


3 用B更新A的值,R更新B的值


重复1-3

data segment
B dw 600
A dw 1515
gys dw ?

data ends

stacks segment stack
dw 60h dup(?)
top label word
stacks ends

code segment 
    assume ds:data,cs:code,ss:stacks
main proc far

    mov ax,data
    mov ds,ax

    mov ax,stacks
    mov ss,ax
    lea sp,top



    ;A>B
    mov ax,A
    mov bx,B    
    ;GO
l1:
    ;reset
    xor dx,dx
    ; AX/BX=AX...DX
    div bx
    ; next div
    mov ax,bx   
    mov bx,dx   
    ; check
    cmp dx,0
    jne l1


    mov gys,ax

l2: mov cx,16
    mov bx,gys

l3: rol bx,1
    mov dl,bl
    and dl,1
    add dl,30h
    mov ah,02
    int 21h
    loop l3


exit:   
    mov ah,4ch
    int 21h

main endp
code ends
end main




转载请注明:CodingBlog » 汇编语言: 根据欧几里德辗转相除法求两个正整数M、N的最大公约数R。

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情