带有非内联装配的标签

时间:2017-09-04 12:33:32

标签: assembly x86-64 gnu intel-syntax

我只想编写一些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

当我尝试运行和调试函数时,这就是我得到的:

Debug screenshot

就像它将mylabel识别为一个新函数一样,将所有代码都删除。我无法解释自己为什么两次显示相同的代码,但即使没有标签也会发生这种情况,所以我认为它与它们无关(无论如何,它为什么会发生?)。

然后我读了this次讨论,我已经尝试了所有可能的解决方案,但没有成功。这是我尝试过的:

  • 分别使用后缀fb作为前进和后退。

  • %=用于本地标签

  • 在标签声明

  • 中尝试了.

为什么标签在内联装配中起作用,而在我的情况下却不起作用?

修改 感谢@fuz,现在我的代码正在运行。顺便说一句,在调试窗口内部,函数被复制两次,尽管内存地址是相同的。

Debug screenshot (working)

0 个答案:

没有答案
相关问题