[英]Copying arrays in MIPS32 assembly
我有一段C ++代碼,我需要使用直接翻譯將其轉換為mips。 我已經完成了大部分工作,這是一個do while循環。 我只是不了解MIPS中的這一行。
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
這應該讓你進入正確的方向。 由於這是一個家庭作業問題,因此我不會為您提供完整的解決方案。
快速參考(MIPS指令,調用約定等):
http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf
一個示例匯編函數,用於在little-Endian環境中計算32位和16位向量的點積:
http://code.google.com/p/mips32-asm/source/browse/dot32x16.S
在這里,您可以了解如何訪問數組的元素。
注意,“。set reorder”使匯編器對指令重新排序和/或包括NOP以處理所謂的延遲槽。 如果您的教授希望您了解延遲插槽的問題,則應該自己正確訂購說明和/或在分支/跳轉之后編寫自己的NOP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.