2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编求最大公约数

时间:07-29来源:作者:点击数:55

汇编求最大公约数

求x和y的最大公约数gcd(x,y),x和y均为无符号字型整数。

  • 思路:
  • if(x > y && y > 0)
  • {
  • do
  • {
  • z = x % y ;
  • x = y ;
  • y = z ;
  • }While( z != 0 )
  • gcd = x ;
  • }
  • Include io.inc
  • .model small ;定义程序的存储模型(small表示小模型)
  • .stack
  • .data
  • x dw 15
  • y dw 0
  • result dw ?
  • msg db 'input error$'
  • .code
  • .startup
  • call gcd
  • .exit
  • gcd proc ;用于求最大公约数的子程序
  • mov ax,x ;取第一个数据
  • mov bx,y ;取第二个数据
  • cmp ax,bx ;比较验证x>y?
  • jnb L0 ;第一个数高于等于第二个数,转移到L0
  • mov y,ax ;否则,交换两个数,避免除数大于被除数
  • mov x,bx
  • L0: ;继续验证y>0?
  • mov ax,x
  • mov bx,y
  • cmp bx,0 ;比较y和0的大小
  • ja L1 ;y高于0,转移到L1
  • mov dx,offset msg ;y不大于0,则输入错误没有最大公约数
  • mov ah,9 ;9号功能显示
  • int 21h
  • L1:
  • mov ax,x
  • mov bx,y
  • mov dx,0 ;初始化dx为0
  • div bx ;x%y,两个数字相除,余数自动存入dx中
  • cmp dx, 0 ;比较dx与0
  • je L_End ;余数为0时,则找到了最终的最大公约数,跳转到L_End
  • mov ax,y ;若上一步余数不为0,则将除数y放入ax中
  • mov x, ax ;再把原除数y,通过ax传递给x,作为用作下一次操作的被除数,即x=y
  • mov y,dx ;再把dx内的余数,赋给y,作为下一次操作的除数 (从而再次保证了x>y),即y=z
  • jmp L1 ;跳转回L1
  • L_End:
  • mov result,bx ;将最大公约数赋值给result
  • mov ax, result ;结果显示
  • call dispsiw
  • ret
  • gcd endp
  • end

运行结果:

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门