【汇编语言实战】最小公倍数和最大公约数

C语言描述:

#include <stdio.h>

// 求最大公约数函数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// 求最小公倍数函数
int lcm(int a, int b) {
    return (a * b) / gcd(a, b);
}

int main() {
    int num1, num2;
    scanf("%d %d", &num1, &num2);

    // 计算最大公约数
    int greatestCommonDivisor = gcd(num1, num2);
    printf("最大公约数为:%d\n", greatestCommonDivisor);

    // 计算最小公倍数
    int leastCommonMultiple = lcm(num1, num2);
    printf("最小公倍数为:%d\n", leastCommonMultiple);

    return 0;
}

汇编语言:

;九章算术法求最大公约数和最小公倍数
 include irvine32.inc
.data
	dat1 dword 98
	dat2 dword 63
	cnt  dword 1
	gcd  dword ?
.code
	main proc
	mov eax,0
	mov ebx,0
	mov eax,dat1
	mov ebx,dat2
eventest:
	test eax,1
	jnz even1	;eax为偶数,跳转到even1
	jmp again
even1:
	test ebx,1
	jnz even2	;ebx为偶数,跳转到even2
	jmp again
even2:
	shr eax,1	;eax/=2
	shr ebx,1	;ebx/=2
	shl cnt,1	;cnt*=2
	jmp eventest
again:
	cmp eax,ebx	;比较两个数据大小,保证大数减去小数
	jg big
	jl small
	je next
big:
	sub eax,ebx
	jmp again
small:
	sub ebx,eax
	jmp again
next:
	mul cnt
	mov gcd,eax	;算出最大公约数
	call writeint	;输出最大公约数
	call crlf
	mov eax,dat1
	mul dat2
	div gcd		;最小公倍数=dat1*dat2/gcd
	call writeint
	exit
	main endp
	end main

运行结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏,祝你平安喜乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值