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

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

  • 题目要求
      • 运行截图
  • 编程平台
  • 代码实现

题目要求

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

运行截图

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

编程平台

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

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

你可能感兴趣的:(汇编语言,汇编)