MIPS asm语法 - 如何寻址低16位?

时间:2013-09-20 12:26:00

标签: assembly mips

当使用带有sw指令的offset + reg时,偏移量必须为16位。我如何以可接受的形式表达? GNU as抱怨expression is too complex。请注意,我想要使用宏指令。

实际上,这两条指令是宏指令sw $0, foo扩展为的内容。

lui $1, (foo >> 16)         ; <---- OK
sw $0, (foo & 0xFFFF)($1)   ; <---- error: expr too complex ;)

...

foo:
.word 123

1 个答案:

答案 0 :(得分:2)

用于MIPS目标的GNU汇编程序有两个名为%lo%hi的运算符,用于获取地址的低位和高位半字。

因此,在您的情况下,使用情况将是(未经测试):

lui $1, %hi(foo)         
sw $0, %lo(foo)($1)