Android NDKとNexus9を使って64bit ARMのアセンブラのHello worldを書いてみた その2 

先週の続き

64bit ARMアセンブラのHello worldのソースコードをマクロを使って少し書き直してみた。

	.global main
	.text
	.align 4

	.macro adrl reg,label
	adrp \reg,\label
	add \reg,\reg,:lo12:\label
	.endm

main:
	sub sp,sp,16
	str x30,[sp]
	
	adrl x0,message
	bl puts
	
	ldr x30,[sp]
	add sp,sp,16
	mov w0,0

	ret

message:
	.string "Hello world.\n"

文字列”Hello world”のアドレスmessageをx0レジスタに入れるのに

    adrp x0,message
    add x0,x0,#:lo12:message

と書いていたが、これをadrl疑似命令で記述したかった。
しかし、adrl疑似命令はNDKのアセンブラではサポートされていないので、アセンブラのマクロ機能を使って記述してみた。

	.macro adrl reg,label
	adrp \reg,\label
	add \reg,\reg,:lo12:\label
	.endm

と、adrl疑似命令をマクロで定義して、

	adrl x0,message

このように書くことで、adrp命令とadd命令で2行書いていた部分を簡潔に1行で記述することができる。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

+ 57 = 60