当使用带有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
答案 0 :(得分:2)
用于MIPS目标的GNU汇编程序有两个名为%lo
和%hi
的运算符,用于获取地址的低位和高位半字。
因此,在您的情况下,使用情况将是(未经测试):
lui $1, %hi(foo)
sw $0, %lo(foo)($1)