在 MIPSx32 Assembly 考试期间,我发现了这条指令:
Lw $8, -2($4)
我的问题是该指令是否正确。如果这是正确的,谁能告诉我为什么?
最佳答案
My question is if that instruction is correct or not. If it is correct, can anyone tell me why?
我刚刚查了一个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的倍数,但这仍然会出现问题。
关于assembly - 加载/存储指令中的偏移量是否可能为负数,而不是 4 的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373476/