就像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文件可以包含其余部分。汇编宏是因为其他汇编程序拥有它,但它从来没有被认为是汇编程序的重要组成部分。 –