在宏定义中分解64位参数

时间:2016-03-07 17:12:35

标签: assembly parameters macros arm 64-bit

我是初学者,试图编写一些ARM汇编代码。

我有一个像这样的宏调用:

STORE_VALUE 0x123456789ABCDEF0

我希望在这种情况下STORE_VALUE的宏扩展为:

MOV  x0, #0x1234000000000000
MOVK x0, #0x5678, LSL #32
MOVK x0, #0x9ABC, LSL #16
MOVK x0, #0xDEF0

我不知道如何从0x123456789ABCDEF0获取0x1234000000000000,0x5678,0x9ABC,0xDEF0。有人可以帮我搞定义吗?

1 个答案:

答案 0 :(得分:0)

我不确定它在其他工具链中的支持程度如何,但GNU汇编程序支持<div id="linked-article-container"> <iframe id="linked-article" frameborder='0' src="http://example.com" /> </div>形式的specific relocations for movz and movk - 例如:

:abs_g*:

,在通过机器代码往返之后,看起来就像要求的那样:

.equ STORE_VALUE, 0x123456789ABCDEF0

movz  x0, #:abs_g3:STORE_VALUE
movk  x0, #:abs_g2_nc:STORE_VALUE
movk  x0, #:abs_g1_nc:STORE_VALUE
movk  x0, #:abs_g0_nc:STORE_VALUE