80x86 汇编:用辗转相除法求两个数的最大公约数

本文详细介绍了如何通过程序实现辗转相除法求解两个无符号字变量的最大公约数,并提供了具体代码示例。通过实际操作演示,包括初始化变量、调用函数以及最终结果的保存过程,清晰地展示了该算法的应用。同时,文章还通过人工操作步骤解释了算法原理,便于理解最大公约数的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


;用辗转相除法求两个数的最大公约数

;对两个无符号字变量进行初始化,用辗转相除法求他们的最大公约数,
;将结果保存到字变量result中。


;做而论道编程如下:

DATA   SEGMENT
      A     DW  15750    ;0~65535
      B     DW  27216    ;0~65535
    RESULT  DW  ?
    CRLF    DB  0AH, 0DH, '$'
DATA   ENDS

CODE   SEGMENT
    ASSUME  CS:CODE, DS:DATA
START:
    MOV   AX, DATA
    MOV   DS, AX

    MOV   AX, A
    CALL  DISP

    LEA   DX, CRLF
    MOV   AH, 9
    INT   21H

    MOV   AX, B
    CALL  DISP

    LEA   DX, CRLF
    MOV   AH, 9
    INT   21H

    CALL  ZHANZHAUN

    MOV   AX, RESULT
    CALL  DISP
EXIT:
    MOV   AH, 4CH
    INT   21H   
;---------------------------
ZHANZHAUN   PROC  NEAR ;辗转相除
    MOV   AX, A
    MOV   BX, B
    CMP   AX, BX
    JNB   Z_1
    MOV   B, AX
    MOV   A, BX
Z_1:MOV   AX, A
    MOV   BX, B
    MOV   DX, 0
    DIV   BX
    CMP   DX, 0
    JE    Z_E
    MOV   AX, B
    MOV   A, AX
    MOV   B, DX
    JMP   Z_1
Z_E:MOV   RESULT, BX
    RET
ZHANZHAUN   ENDP
;---------------------------
DISP   PROC   NEAR
    MOV   BX, 10
    MOV   CX, 0   
DI1:MOV   DX, 0
    DIV   BX
    PUSH  DX
    INC   CX
    CMP   AX, 0
    JNZ   DI1
    MOV   AH, 2    
DI2:POP   DX
    ADD   DL, '0'
    INT   21H
    LOOP  DI2
    RET
DISP   ENDP
;---------------------------
CODE   ENDS
    END   START

;========================================

题目,虽然没有要求显示,但是做而论道也编写了显示的功能部分。

程序执行后,可以显示出来:

15750
27216
126

其中的 126,就是 15750、27216 的最大公约数。

;========================================

用辗转相除法来求两个数最大公约数,人工操作的步骤是:

有两个数字,一般来说,一个大,一个小。

用大数除以小数,然后,首先要看余数。

余数如果为零,那么,商,就是原来两个数的最大公约数。

余数如果不为零,就用余数当作小数,原来的小数当作大数,
再重复做除法的操作。


本操作方法正确性的证明,请参考其它资料。


例如,求 5750 与 27216 的最大公约数。 

辗转相除的步骤如下:

27216 / 15750 = 1 ... 11466
15750 / 11466 = 1 ... 4284
11466 / 4284  = 2 ... 2898
 4284 / 2898  = 1 ... 1386
 2898 / 1386  = 2 ... 126
 1386 / 126   = 11... 0

所以,15750 和 27216 的最大公约数就是 126。

;========================================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值