‘壹’ 求助紧急!!将下面c语言编写的程序翻译成MIPS语言! int a,b,c;a=num&ref;b=num-a;c=b;
MIPS汇编吧,只能用MIPS的编译器mips-gcc什么的加-S选项把C代码翻译成汇编吧
‘贰’ C语言编写好代码后,怎么编译,最后生成可执行文件
材料/工具:vc6.0
1、打开c语言编辑工具,在工具中写入程序的源代码。
‘叁’ 怎样用c语言编译
C编译的整个过程很复杂,大致可以分为以下四个阶段:
预处理阶段在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。
编译、优化阶段编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。
汇编阶段将汇编语言翻译成机器指令。
链接阶段链接阶段的主要工作是将有关的目标文件连接起来,即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的目标文件成为一个能够被操作系统装入执行的统一整体。
‘肆’ 怎么用C语言编程测试计算机的MIPS或MFLOPS值
准确测试cpu的mips或者mflops一般是设计体系结构时候用cpu模拟器或者verilog前仿得到的。对于用C语言比较准确的测试mips或者mflops,你可以用一个程序读取系统时间,然后执行第二个程序,第二个程序执行完成后再记录执行的时间,然后反汇编第二个程序,统计第二个程序中执行的指令条数,通常第二个程序中执行的指令数是确定的,(分支和循环的次数是可确定的)。mips和mflops在risc cpu的评价中比较有价值,感觉cisc稍差一些。
‘伍’ 写出以下C语言过程对应的MIPS汇编表示
硬件平台是什么?pc上还是51上或者arm,mips?不
同硬件平台汇编不同,编译器对程序的处理也就不同。
用汇编一般都是考虑到可以直接访问寄存器,速度有优势,但最大的缺点是不能跨平台,可移植性很差。
‘陆’ 怎么把C语言代码转换为MIPS
把C语言代码转换为MIPS:
以下是c语言代码:
while (candidate_gcd <= min)
{
if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) ==
0))
{
current_gcd = candidate_gcd;
}
candidate_gcd = candidate_gcd + 1;
}
以下为转换为mips后的代码:
首先设置变量:
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 无限循环
‘柒’ C语言切换成MIPS汇编语言,B[8] = A[i-j];
sub $t0, $s3, $s4 #i-j
sll $t0, $t0, 2 #$t0=4(i-j),因为一个字占四个字节,所以i-j个字要4倍,mips中是字节地址
add $t0, $t0, $s6 #¥t0=A的地址加上$t0,即是A[i-j]的地址
lw $t1, 0($t0) # 按相应地址从存储器复制值,赋给$t1
sw $t1,32($s7) #8个字,32个字节,所以加上32,这一步为将$t1中的值存储到存储器相应地址,这个地址就是&B[8]了,即B的基础地址加上字节数!
此时应该完成了