代码功能
随机输入两个整数,然后计算这两个数的最小公倍数和最大公约数,并作为计算结果输出。
#include "stdio.h"
#include "conio.h"
int main()
{
int a;
int b;
int num1;
int num2;
printf(“please input two numbers:\n”);
scanf("%d",num1);//随机输入两个数
scanf("%d",num2);
int temp=0;
if(num2>num1)//如果后面num2大于num1则交换位置
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;
b=num2;
while(b!=0)//一直重复赋值和计算,直到找到正确结果
{
temp=a%b;
a=b;
b=temp;
}
printf(“gongyueshu:%d\n”,a);//输出结果
printf(“gongbeishu:%d\n”,num1*num2/a);
}
.data
#输出字符串,需要提前定义,
msg_prf1: .ascii "please input twe numbers\0"
msg_prf2: .ascii "gongyueshu\0"
msg_prf3: .ascii "gongbeishu\0"
.text
.globl main
main:
#printf(“please input two numbers:\n”) $v0等于4输出字符串
la $a0, msg_prf1
li $v0, 4
syscall
#scanf("%d",num1); $v0等于5输入整数,给寄存器$t0
li $v0, 5
syscall
move $t0, $v0
#scanf("%d",num2); $v0等于5输入整数,给寄存器$t1
li $v0, 5
syscall
move $t1,$v0
#int temp=0;定义变量temp给$t2,并赋初始值等于0
li $t2, 0
#if成功temp=num1;num1=num2;num2=temp;如果$t0<$t1,则交换两
#者位置
bgt $t1,$t0, sub1
sub1:#交换$t0,$t1 ,$t2当作一个中间变量
move $t2, $t0
move $t0, $t1
move $t1, $t2
#int a=0;把$t3的值赋0
li $t3, 0
#int b=0;把$t4的值赋0
li $t4, 0
#a=num1; b=num2;
move $t3, $t0 #把$t0的值赋给$t3,
move $t4, $t1 #把$t1的值赋给$t4,
#while循环部分,一直计算,其中的值一直在变化
loop:
rem $t2, $t3, $t4 #计算 $t3,$t4的模运算,结果存$t2
move $t3, $t4 #把$t4的值赋给$t3
move $t4, $t2 #把$t2的值赋给$t4
bgt $t4, 0, loop #while里面的条件$t4>0
#printf(printf(“gongyueshu:%d\n”,a);
la $a0, msg_prf2 #把$a0的值赋变成要输出的字符串
li $v0, 4 #$v0值为4输出字符串
syscall
#输出公约数a
move $a0, $t3 #把$t3值赋给$a0,$a0的值用来输出
li $v0,1 #$v0值为1输出整数
syscall
#printf(“gongbeishu:%d\n”,num1*num2/a”)
la $a0, msg_prf3 #把$a0的值赋变成要输出的字符串
li $v0, 4 #$v0值为4输出字符串
syscall
#计算最小公倍数
mul $t0, $t0, $t1 #计算最小公倍数$t0,$t1的乘,放在$t0
div $t0, $t0, $t3 #$t0,$t3相除,结果 放$t0
#输出最小公倍数
move $a0, $t0 #输出$t0
li $v0,1 #$v0值为1输出整数
syscall
1、输出字符串时$v0=4
输出结果:
2、输入数据时$v0=5
输入结果,输入6和9
3、$t0的值变为输入的值6
4、运行过程是寄存器的变化如下:
5、运行结果为3和18