实 验 报 告 课程名称 计算机体系结构 实验项目 MIPS与C语言的互换 实验仪器 个人计算机 系 别 _ 计算机学院__ 专 业 ___ 网络工程 班级/学号 网工0903/2009011422 学生姓名 _______张昭_______ 实验日期 ______________________ 成 绩 ______________________ 指导教师 _____ _侯凌燕_________ 课程作业三—---MIPS与C语言的互换 (学号尾数除4取余) 将下面c语言转换为mips 2. The following C code has been converted to MIPS assembly code while (candidate_gcd <= min) { if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) == 0)) { current_gcd = candidate_gcd; } candidate_gcd = candidate_gcd + 1; } 以下为我转换后的代码: 首先设置变量: candidate_gcd = $t0 min = $t1 a mod candidate_gcd = $t2 b mod candidate_gcd = $t3 current_gcd = $t4 $t6 = 0 $t5 代码如下:(绿色为注释) Label3: //设置标签Label3 ble $t0,$t1,Label //当$t0小于等于$t1时,跳到标签Label Label: //设置标签Label Add $t5,$t2,$t3 //将$t2和$t3相加赋值给$t5 Li $t6,0 //给$t6赋值为0 Leq $t5, $t6,Label1 //判断如果$t6=$t5=0,跳到标签Label1 Label1: //设置标签Label1 Move $t4, $t0 //$t4=$t0 Addi $t0, $t0,1 //$t0=$t0+1(自加加) J Label3 //跳到标签Label3,这里其实就是实现c语言中的while无限循环 实验代码的设计思想: 实验中的while循环的实现是靠跳转标签来实现的,当所有代码执行到最后时,自动跳转标签到Label3,这样就形成了while的无限循环,在Label3标签下的代码是判断当candidate_gcd <= min时,执行下面标签Label的代码,当a和b对candidate_gcd求余后都为0,这样通过对两个值的相加并赋值给$t5来看出两个求余后是否为零,因为求余后都为正数,所以不必考虑出现正负相加为0.这样再定义一个变量$t6并设置初值为0,当$t5=$t6=0时,跳转标签到Label1,执行标签Label1下的代码,将candidate_gcd中的值赋给current_gcd,然后让candidate_gcd中的数值进行自加加,然后跳转标签到Label3,于是形成了while的无限循环。 本文来源:https://www.wddqw.com/doc/604ef839856fb84ae45c3b3567ec102de2bddf38.html