1

在指令中使用 offset+reg 时sw,偏移量必须是 16 位有符号的。我如何以可接受的形式表达它?GNUas抱怨expression is too complex. 请注意,我不想使用宏指令。

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

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

...

foo:
.word 123
4

1 回答 1

2

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

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

lui $1, %hi(foo)         
sw $0, %lo(foo)($1)   
于 2013-09-20T13:01:07.633 回答