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 無限循環