综述
最大公因子,又称最大公约数(英语: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