Этикетки с не встроенной сборкой
Я просто хотел написать код 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, теперь мой код работает. Кстати, внутри окна отладки функция копируется дважды, несмотря на то, что адреса памяти одинаковы.