加载/存储指令中的偏移量是否可能为负数而不是4的倍数?

时间:2019-05-30 07:14:54

标签: assembly mips32

在检查MIPSx32 Assembly的过程中,我找到了以下说明:

Lw $8, -2($4)

我的问题是该指令是否正确。如果正确的话,谁能告诉我为什么?

1 个答案:

答案 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的倍数。