Windows汇编语言程序设计同步练习(1)

;<<Windows汇编语言程序设计>>习题17:参见下面给出的C程序,编程求a,b的最大公约数。
;unsigned int gcd (unsigned int a, unsigned int b)
;{
;   if(a == 0 && b == 0)
;       b = 1;
;   else if(b == 0)
;       b = a;
;   else if(a != 0)
;       while(a != b)
;       {
;           if(a < b)
;               b -= a;
;           else
;               a -= b;
;        }
;   return b;
;}
;2006-12-12 高玉涵
;程序中不考虑处理<0的数。
.386
.model flat,stdcall
option casemap:none
includelib  /masm32/lib/msvcrt.lib
printf  PROTO C :dword, :vararg

.data
dtemp1      dword   91       ;临时变量,用来存放输入的值a。
dtemp2      dword   49       ;临时变量,用来存放输入的值b。
szFmt       byte    '最大公约数是:%d', 0ah, 0

.code
start: 
            cmp dtemp1, 0
            jle b10         ;dtemp1 <= 0
            cmp dtemp2, 0              
            jle b10         ;dtemp2 <= 0                      
            cmp dtemp1, 0
            jg  b30         ;dtemp1 > 0
            jmp b60         ;结束。
b10:
            mov dtemp2, 1
            jmp b60           
b30:
            mov eax, dtemp1
            cmp eax, dtemp2
            je  b60         ;dtemp1 != dtemp2
            jg  b50         ;dtemp1 > dtemp2
            sub dtemp2, eax ;b-=a
            jmp b30
b50:
            sub eax, dtemp2 ;a-=b
            mov dtemp1, eax
            jmp b30                       
b60:
            invoke printf, offset szFmt, dtemp2
            ret
           
end         start 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值