我正在解析RISC-V汇编,并正在解析立即数。以LUI指令为例,我看到一些例子将其写成lui t0, 0,还有一些例子将其写成lui t0,%hi(string1)。第二个例子是一个伪指令吗?是否有任何关于每个符号如何工作的文档?
LUI
lui t0, 0
lui t0,%hi(string1)
yx2lnoni1#
您可以在GNU assembler manual中找到%hi等修改器的文档。%hi(sym)评估为符号sym的地址的高20位。对于机器来说,它和lui t0, 0xabcde没有什么不同,只是汇编程序为您计算了立即数的值。lui编码20位立即数,因此lui t0, %hi(sym)是一条指令,而不是伪指令。
%hi
%hi(sym)
sym
lui t0, 0xabcde
lui
lui t0, %hi(sym)
1条答案
按热度按时间yx2lnoni1#
您可以在GNU assembler manual中找到
%hi
等修改器的文档。%hi(sym)
评估为符号sym
的地址的高20位。对于机器来说,它和lui t0, 0xabcde
没有什么不同,只是汇编程序为您计算了立即数的值。lui
编码20位立即数,因此lui t0, %hi(sym)
是一条指令,而不是伪指令。