在检查MIPSx32 Assembly的过程中,我找到了以下说明:
Lw $8, -2($4)
我的问题是该指令是否正确。如果正确的话,谁能告诉我为什么?
答案 0 :(得分:1)
我的问题是该指令是否正确。如果正确的话,谁能告诉我为什么?
我只是查看了R4400 CPU(真正的MIPS CPU)的手册:
指令0x8C88FFFE的意思是:lw $8,-2($4)
(而不是lw $8,-8($4)
,因为其他CPU类型将在字操作中解释常量-2
)。
所以至少该指令存在。
手册接下来要说的是不允许访问未对齐的内存。这意味着($x)+a
在指令lw $y,a($x)
中必须是4的倍数。
换句话说:如果使用($4)=0x1002
,那么lw $8,-2($4)
将访问地址0x1000,它是4的倍数。没问题。
但是,在这种情况下,lw $8,4($4)
将访问地址0x1006。而且0x1006不是4的倍数。这是个问题,尽管偏移量是4的倍数。