Этикетки с не встроенной сборкой

Я просто хотел написать код ASM и включить его в код C/C++, но не через встроенный режим, а создать другой модуль ASM. Я обнаружил, что проект CodeBlocks допускает использование источников ASM, поэтому я выполнил следующие шаги, на самом деле с небольшими изменениями, такими как команда building:

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 как новая функция, вырезая весь код после него. Я не могу объяснить, почему он показывает один и тот же код дважды, но это происходит даже без меток, поэтому я не думаю, что это связано с ними (в любом случае, почему это происходит?).

Затем я прочитал это обсуждение и перепробовал все возможные решения, перечисленные там, но безуспешно. Вот что я попробовал:

  • используя суффикс f а также b для вперед и назад соответственно.

  • с помощью %= для местных лейблов

  • пробовал даже без . в декларации ярлыка

Почему ярлыки работают в inline-сборке, а в моем случае - нет?

РЕДАКТИРОВАТЬ Благодаря @fuz, теперь мой код работает. Кстати, внутри окна отладки функция копируется дважды, несмотря на то, что адреса памяти одинаковы.

Скриншот отладки (работает

0 ответов

Другие вопросы по тегам