如何使用汇编语言求最大公约数/共因子/gcd

综述

最大公因子,又称最大公约数(英语:greatest common divisor,gcd),指两个或多个整数共同具有的最大约数。

代码

under the DLX format
PrintfFormat:	.asciiz 	"gcM=%d\n\n"
		.align		2
PrintfPar:      .word		PrintfFormat
PrintfValue:	.space		4


		.text
		.global	main
main:
		;*** Read two positive integer numbers into R1 and R2
		addi	r1,r0,Prompt1
开辟第一个读数空间(回忆R0始终是0的)
		jal     InputUnsigned	;read uns.-integer into R1
jump and link到程序:读取数据程序;数据最后是放在R1中(与Lab1类似)
		add     r2,r1,r0        ;R2 <- R1
将R1放入到R2(回忆R0始终是0的)
		addi	r1,r0,Prompt2
开辟第二个读数空间(回忆R0始终是0的)
		jal     InputUnsigned	;read uns.-integer into R1
jump and link到程序:读取数据程序;数据最后是放在R1中(与Lab1类似)
Loop:                           ;*** Compare R1 and R2
		seq     r3,r1,r2        ;R1 == R2 ?
seq操作:(三个参数,r3 r1 r2)
 
就是比较r1和r2的数值,如果相等那么r3为1否则为0
		bnez	r3,Result
bnez操作:(两个参数,r3 label)
 
如果r3~=0也就是说:R1==R2,那么PC值为Result,即跳转到此处。

		sgt     r3,r1,r2        ;R1 > R2 ?
sgt操作:(三个参数:r3,r1,r2)
如果R1大于R2那么R3=1;
 

		bnez	r3,r1Greater
bnez操作:判断R3是不是为1,如果是1那么就跳去r1Greater;
否则就会继续往下执行到r2Greater
r2Greater:	;*** subtract r1 from r2
		sub		r2,r2,r1 
执行:r2 = r2 – r1
		j		Loop
无条件跳回到Loop

r1Greater:	;*** subtract r2 from r1
		sub		r1,r1,r2
执行:r1 = r1 - r2
		j		Loop
无条件跳回到Loop
Result: 	;*** Write the result (R1)
将结果写入
		sw		PrintfValue,r1
		addi	r14,r0,PrintfPar
		trap	5

		;*** end
		trap	0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值