簡體   English   中英

在MIPS32程序集中復制陣列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM