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

    技术2022-07-10  154

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

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

    题目要求

    根据欧几里德辗转相除法,求两个已定义好的字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

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

    Processed: 0.015, SQL: 9