我只想编写一些ASM代码并将其包含在C / C ++代码中,而不是通过内联模式,而是创建不同的ASM模块。我发现CodeBlocks项目允许ASM源,所以我跟着these steps,实际上有一些细微的变化,比如构建命令:
gcc -c myasmfile.s -o ./obj/Debug/myasmfile.o
一切似乎都有效,但标签。
以下是一个例子:
.text
.intel_syntax noprefix
.globl mytest
mytest:
push rbp
mov rbp, rsp
mov rcx, 0
.mylabel:
inc rcx
cmp rcx, 10
jne .mylabel
mov rax, rcx
leave
ret
当我尝试运行和调试函数时,这就是我得到的:
就像它将mylabel
识别为一个新函数一样,将所有代码都删除。我无法解释自己为什么两次显示相同的代码,但即使没有标签也会发生这种情况,所以我认为它与它们无关(无论如何,它为什么会发生?)。
然后我读了this次讨论,我已经尝试了所有可能的解决方案,但没有成功。这是我尝试过的:
分别使用后缀f
和b
作为前进和后退。
将%=
用于本地标签
在标签声明
.
为什么标签在内联装配中起作用,而在我的情况下却不起作用?
修改 感谢@fuz,现在我的代码正在运行。顺便说一句,在调试窗口内部,函数被复制两次,尽管内存地址是相同的。