c编译mips
‘壹’ mips32指令集有多少条指令 linux下用gcc将.C文件编译成mips32指令格式的.OBJ文件用什么命令 哪个版本linux
mips32 多少指令不知道。
至于编译 mips32 的程序,你可以装一个 mips 虚拟机,虚拟机里装一个 mips 版的 Linux ,之后在这个虚拟机里面编译最简单。
我记得 gentoo 有 mips 版。至于别的,你得找了。
当然还可以用交叉编译器,但我想如果楼主知道交叉编译器,应该不用问第二个问题了……
至于什么是交叉编译器以及如何编译,建议搜索,这是一个庞大的资料。
‘贰’ 写出以下c语言过程对应的MIPS汇编表示
硬件平台是什么?pc上还是51上或者arm,mips?不
同硬件平台汇编不同,编译器对程序的处理也就不同。
用汇编一般都是考虑到可以直接访问寄存器,速度有优势,但最大的缺点是不能跨平台,可移植性很差。
‘叁’ 求助紧急!!将下面c语言编写的程序翻译成MIPS语言! int a,b,c;a=num&ref;b=num-a;c=b;
MIPS汇编吧,只能用MIPS的编译器mips-gcc什么的加-S选项把C代码翻译成汇编吧
‘肆’ C或者C++转mips怎么用编译器实现谢谢!
去查编译器的帮助文档或者数据手册,这里涉及到C语言和汇编语言的相互调用问题,一般编译器都会有相关说明的,但不同编译器的调用约定或许不同
‘伍’ c语言的f=g-A[B[4]]怎么转换成mips指令
首先,A[B][4]的定义不明确,A是int,short还是什么。因为类型决定memory的大小,会影响寻址。
j假如A是int数组。
mips中的寄存器用法你应该知道吧。
zero, at, v0,v1(返回值寄存器) a0-a3(参数寄存器),t0-t7(临时寄存器),s0-s7(方法调用时需要压栈保存的寄存器).t8,t9, gp,sp,fp, ra.等自己查下资料。
ldr t0, A的地址
ldr t1, B的值
sll t1, 4 //第一次乘以4,每个int占4个字节,再乘以4,相当于左移4位。
add t0, t1
ldr t0, [t0]
ldr t1 g的值
sub t1, t0
‘陆’ 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的基础地址加上字节数!
此时应该完成了
‘柒’ 怎么用C语言编程测试计算机的MIPS或MFLOPS值
准确测试cpu的mips或者mflops一般是设计体系结构时候用cpu模拟器或者verilog前仿得到的。对于用C语言比较准确的测试mips或者mflops,你可以用一个程序读取系统时间,然后执行第二个程序,第二个程序执行完成后再记录执行的时间,然后反汇编第二个程序,统计第二个程序中执行的指令条数,通常第二个程序中执行的指令数是确定的,(分支和循环的次数是可确定的)。mips和mflops在risc cpu的评价中比较有价值,感觉cisc稍差一些。
‘捌’ C/C++代码可以转成mips汇编代码吗
可以的
最简单的方式
用Mips的交叉编译工具 mips-gcc
或者g++
编译C/C++文件, 编译选项加上-S
这样-o指定的输出文件 就是汇编代码。
比如
mips-gcc a.c -S -o a.S
生成的a.S 就是a.c对应的汇编代码了。
‘玖’ 怎么把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 无限循环