汇编语言:欧几里德辗转相除法求两个正整数字的最大公约数

汇编语言:欧几里德辗转相除法求两个正整数字的最大公约数

题目要求

根据欧几里德辗转相除法,求两个已定义好的字M、N(均为正整数)的最大公约数,步骤为:
①求M/N的余数R;
②如果R=0,则N为最大公约数,退出循环;
③用N更新M的值,用R更新N的值;
④重复①~③步。
将M、N和最大公约数展示出来。

运行截图

编程平台

Masm for Windows 集成实验环境 2012.5

代码实现

DATAS SEGMENT
    M DW 120
    N DW 25
    hintM DB 'M: $'
    hintN DB 'N: $'
    result DB 'The maximum number of conventions is: $'
    break DB 13,10,'$';换行
    scale DW 10;以十进制形式输出数据
DATAS ENDS

STACKS SEGMENT STACK
    DB 200H DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC
    MOV AX,DATAS
    MOV DS,AX
    
    LEA DX,hintM;输出M前的提示
    MOV AH,9H
    INT 21H
    MOV AX,M
    CALL OUTPUTDATA;输出M
    LEA DX,break;换行
    MOV AH,9H
    INT 21H
    
    LEA DX,hintN;输出N前的提示
    MOV AH,9H
    INT 21H
    MOV AX,N
    CALL OUTPUTDATA;输出N
    LEA DX,break;换行
    MOV AH,9H
    INT 21H
    
    LEA DX,result;输出结果提示
    MOV AH,9H
    INT 21H
    
    ;实现欧几里德辗转相除法
    MOV AX,M;AX存放被除数
    MOV BX,N;BX存放除数
lop:
    MOV DX,0
    DIV BX
    CMP DX,0;余数是否为0
    JE finish
    MOV AX,BX;除数变成被除数
    MOV BX,DX;余数变成除数
    JMP lop

finish:
    MOV AX,BX
    CALL OUTPUTDATA;输出最大公约数
    
    MOV AH,4CH
    INT 21H
MAIN ENDP
;子程序
;功能:以scale进制形式输出正整数。
;入口参数:AX存放要输出的正整数,scale存放进制数。
OUTPUTDATA PROC
	MOV BX,scale
    MOV SI,0;记录输出的位数

lop1:
	MOV DX,0
	DIV BX
	PUSH DX;余数入栈
	INC SI
	CMP AX,0
	JNE lop1
	
lop2:
	POP DX
	ADD DL,30H;转换成ASCII码
	MOV AH,2H
	INT 21H
	DEC SI
	CMP SI,0
	JNE lop2
	
	RET
OUTPUTDATA ENDP
CODES ENDS
    END MAIN

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值