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

本文介绍了一个使用Windows汇编语言实现的程序,该程序能够计算两个非负整数的最大公约数。通过循环和条件判断,程序有效地实现了欧几里得算法。文章提供了完整的源代码,展示了汇编语言中如何进行数值运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;<<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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值