2012-08-07 39 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