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

标签 assembly mips32

在 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/

相关文章:

mips - 了解 mips 二进制文件的类型

mips - 使用 mars 工具访问 mips 中的文件

assembly - ldr 中相同的源和目标寄存器

C 反汇编为 ARMv6 : Meaning of Dot (. ) 在标签之前

gcc - 使用未对齐的缓冲区进行矢量化 : using VMASKMOVPS: generating a mask from a misalignment count? 或者根本不使用该 insn

arrays - 在mips中初始化数组时显示错误

c++ - 汇编asm x86加解密程序

linux - 汇编文本编辑器

assembly - 在 MIPS 中编写带有全局变量的函数?

c - 如何将 C 代码转换为 MIPS 程序集?