2012-08-07 89 views
-4

我試圖實現在MIPS以下與二維數組掙扎在裝配

X是雙精度浮點的二維陣列(矩陣) 號碼和Y是32的二維陣列位整數。 嘗試寫代碼以下

Z= (X[i][j] + Y[i][j]) 

現在我不知道如何在MIPS聲明這些數組:到目前爲止,我已經寫了一些主程序

,但不知道如何實現它們在.data部分

.data 

.text 
.main: 
mtc1 $0, $f0 
cvt.d.w $f0, $f0 
    # $a1 is the address of the first element of x 
    l.a $r1, $a1 
    # $a2 is the address of the first element of y 
    l.a $r2, $a2 
    addi $r4, $0, 30 
    add.d $f8, $f0, $f0 
+1

如何查找和閱讀組裝文檔? – 2012-08-07 12:20:18

+0

[可以在MIPS程序集中聲明這樣的二維數組嗎?]可能的重複?(http://stackoverflow.com/questions/11828209/is-it-possible-to-declare-such-2d-arrays-in-mips -assembly) – 2012-08-07 12:20:46

+0

@AlexeyFrunze - 我做了,但沒有找到任何信息 – 2012-08-07 12:23:14

回答

0

二維數組並沒有那麼差。訣竅是一次處理一個維度。如果你有每個元素的大小和每個維度的大小,那麼數學很簡單。將行索引(從零開始),行大小和元素大小(以字節爲單位)的乘積添加到基地址。這將是你想要的行的基地址。將列索引和元素大小的乘積添加到該元素中,並且具有該元素的地址。

至於數據段,只保留數組的總大小。例如,如果您需要3x4空間,則預留12個元素。如果你使用整數,array:.word 0:12會做你需要的。

+1

二維數組很糟糕。他們吃你的寶寶。它們會在Thor遇到它時造成全球變暖,颶風,腳癬,耳朵瘙癢和雷暴。他們是C/C++編程的憎惡,每個真正的彙編程序員都應該避開它們。編譯器輸出不包含二維數組。大會尋址模式對二維數組一無所知。如果圖靈希望我們使用二維數組,他就發明了軟盤而不是磁帶。從'(x,y)'轉換爲'x + width * y'有多難?... – 2012-08-07 15:30:45