2012-11-03 40 views
0

我有一段C++代碼需要使用直接轉換轉換爲mips。我大部分都完成了,它是一個while while循環。我只是不明白MIPS中的這一行。在MIPS32彙編中複製數組

x[i] = y[i]; 

我不明白如何將其轉換爲mips,並且我一直在不停地在線搜索。我能得到任何幫助嗎?

編輯

這就是我,但被告知這是不正確的:

la $6, y 
Li $7, $1 
Add $7, $7, $7 
Add $7, $7, $7 
Add $8, $6, $7 
Lw $6, 0($8) 
La $7, x 
Li $8, $1 
Add $8, $8, $8 
Add $8, $8, $8 
Add $7, $7, $8 
Sw $6, 0($7) 

我用這個在線網站作爲參考:

http://www.cs.pitt.edu/~xujie/cs447/AccessingArray.htm

第二個編輯

C++編碼

i=0; 
do { 
    x[i]=y[i]; 
    i++; 
} 
while (i!=j); 

MIPS直接翻譯

Addi $1, $1, 0 
Loop: la $6, y 
    Li $7, $1 
    Add $7, $7, $7 
    Add $7, $7, $7 
    Add $8, $6, $7 
    Lw $6, 0($8) 
    La $7, x 
    Li $8, $1 
    Add $8, $8, $8 
    Add $8, $8, $8 
    Add $7, $7, $8 
    Sw $6, 0($7) 
    Addi $1, $1, 1 
    Bne $1, $2, loop 

而且這裏是我所有的寄存器,我可以使用,以避免混淆你:

Variables i j x y 4 (constant) Free 
Registers $1 $2 $3 $4 $5    $6, $7, $8 
+0

這行代碼不會比較數組的兩個元素。這是一項任務。 – sellibitze

+0

您是否正在嘗試編寫MIPS程序集版本的數組相等性測試?如果沒有,我沒有得到這個問題。 – sellibitze

+0

什麼阻止你將數組的第一個元素的地址加載到CPU寄存器中,通過遞增地址遍歷循環中的所有元素,將元素加載到其他CPU寄存器並比較它們? – sellibitze

回答

0

這應該讓你進入正確的方向。由於這是一個家庭作業問題,我不會給你一個完整的解決方案。

快速參考(MIPS指令,調用約定,等):

http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf

,計算一個32位的點積,並在小端的16位矢量的示例組件的功能環境:

http://code.google.com/p/mips32-asm/source/browse/dot32x16.S

在這裏你可以看到數組的元素進行訪問。

請注意,「.set reorder」使彙編器重新排列指令和/或包括NOP來處理所謂的延遲時隙。如果您的教授希望看到您理解延遲插槽問題,您應該自己正確地訂購說明和/或在分支/跳轉後編寫自己的NOP。

+0

你的鏈接非常有幫助!謝謝你不給我答案,因爲這不是我想要的,我很抱歉因爲接受答案這麼晚了 –