想象一下,我有一个C中有5个参数的函数。MIPS从寄存器获取内存地址
sum(n1,n2,n3,n4,n5);
正在装配中。我从寄存器4的前四个参数7,最后一个参数是加入这样的:
lw $8, 16($29)
第一个问题
如果lw $8, 16($29)
却将N5在寄存器$ 8,为什么没有这个
lw $9, 0($29)
lw $10, 4($29)
lw $11, 8($29)
lw $12, 12($29)
将n1到n4放入寄存器$ 9到$ 12?
第二个问题
由于sum(n1,n2,n3,n4,n5);
的参数某处存储在内存中,并在组装时,第一个参数是$4
我怎么能得到的$4
到$7
的内存地址?
如果我这样做:
.data
array: .word 3,4,2,6,12,7,18,26,2,14,19,7,8,12,13
.text
main:
li $8,1
la $9,array
的最后一条指令放入$9
我数组的地址位置。如果我做
main:
li $4,1
la $9,0($4)
上$9
值仍为1和$4
有关MIPS调用约定的更多信息,请参阅http://stackoverflow.com/q/10214334/583570。 – markgz 2012-04-23 18:15:44