我是汇编代码的新手,所以任何帮助都会受到赞赏 我正在编写宏来创建函数,如下所示:
.macro CREATE_FUNC ARG1 ARG2
.align 4
.func ARG1
cmpl $0x1, some_var
je skip_exec
call ARG2
skip_exec:
iret
.endfunc
.endm
现在我想创建两个函数 a 和 b ,所以我写了以下代码:
CREATE_FUNC a, aa
CREATE_FUNC b, bb
但是,当我编写代码时,我会得到"符号' skip_exec'已定义"错误,意味着 b 的CREATE_FUNC失败,因为' skip_exec'已经为 a 功能定义了。
我想通过以下方法解决它:
任何人都可以帮助我了解如何做(1)以及为什么(2)对我不起作用?
谢谢!
答案 0 :(得分:1)
您可以使用local labels:
.macro CREATE_FUNC ARG1 ARG2
.align 4
.func ARG1
cmpl $0x1, some_var
je 1f
call ARG2
1:
iret
.endfunc
.endm
答案 1 :(得分:0)
我发现我可以通过放置\ @前缀:
来使用本地标签.macro CREATE_FUNC ARG1 ARG2
.align 4
.func ARG1
cmpl $0x1, some_var
je skip_exec\@
call ARG2
skip_exec\@:
iret
.endfunc
.endm