汇编语言:欧几里德辗转相除法求两个正整数字的最大公约数
题目要求运行截图
编程平台代码实现
题目要求
根据欧几里德辗转相除法,求两个已定义好的字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
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!