就像NASM和C.是否有擴展爲當前源行號的GAS程序集的__LINE__宏?
只需使用cpp
預處理這是行不通的,因爲我要定義諸如宏:
.macro ASSERT_FAIL
mov __LINE__, %eax
call assert_fail
.endmacro
,擴大了__LINE__
每當ASSERT_FAIL
使用,所以我能看到的發生故障。所以__LINE__
必須在ASSERT_FAIL
後展開。
我也想把這個宏放在一個單獨的文件中,並將它包含在.include
中。
我已經能夠做到正是與NASM:
%macro ASSERT_FAIL 0
mov eax, __LINE__
call assert_fail
%endmacro
有沒有除了使用cpp
的#include
和#define
代替.macro
和.include
任何替代?手冊does say that在gas
中幾乎沒有內置的預處理能力。這讓我很想知道,爲什麼.macro
和.include
存在,如果他們是如此有限。
編輯:我檢查了內核和glibc。 glibc沒有單獨的.include
,也沒有幾個.macro
。內核沒有.include
,但是使用了.macro
和#define
的混合,並且傾向於爲多線宏留下.macro
,因爲它更具可讀性。
使用'#define ASSERT_FAIL'類似於C。 –
@RossRidge我還需要使用'cpp'的'#include'而不是'.include'。讓我奇怪爲什麼'.macro'和'.include'完全存在。確實,https://sourceware.org/binutils/docs-2.25/as/Preprocessing.html#Preprocessing基本上說:使用CPP。 –
當然,但是如果你願意,你的#include文件可以包含其餘部分。彙編宏是因爲其他彙編程序擁有它,但它從來沒有被認爲是彙編程序的重要組成部分。 –