Я пишу программу на ассемблере, используя TASM 4.1, и я наткнулся на проблему, которую я не смог исправить в течение 2 дней. Проблема заключается в том, что TASM просто не распознает метки в макросе как локальные метки и даст мне ошибку при сборке (символ уже определен в другом месте). До сих пор я попытался следующие вещи:TASM; LOCAL и LOCALS директивы
- Ввод LOCALS в самом начале .asm файла и используя @@ для локальных меток (как это было предложено в одном из ответов на аналогичной проблемы). Произведен нулевой эффект вообще.
- Использование LOCAL внутри макроса для отображения всех моих локальных меток, начинающихся с @@ (опять же, как было предложено в Интернете). Однако при сборке возникли еще больше ошибок: «Символ уже другого вида» и «Ожидающий тип указателя»
- Ввод LOCALS @@ в начале макроса. Как и в первом случае, нулевой эффект.
- Ввод локалей в начале файла .asm и включение меток с использованием LOCAL. Тот же эффект, что и в случае с # 2.
- Ввод локалей в начале файла .asm и использование LOCALS @@ внутри макроса. Нет эффекта.
- Ввод LOCALS @@ в начале файла .asm. Нет эффекта.
Это мой первый раз, когда я пытаюсь запрограммировать, поэтому прошу прощения, если я пропустил какую-то тривиальную вещь, которая вызывает эту проблему. Вот макрос, который у меня есть проблемы с использованием более одного раза:
dot_connect_oct1 macro dot1_x, dot1_y, dot2_x, dot2_y, colour
;;code
@@check_1:
;;code
jz @@exit_1
;;code
jg @@draw_1_2
@@draw_1_1:
;;code
jmp @@check_1
@@draw_1_2:
;;code
jmp @@check_1
@@exit_1:
endm
Update:
Хорошо, я, кажется, нашел решение. То, что сработало для меня было объявить ЭТИКЕТКИ в начале .asm файла и с помощью LOCAL в самом макросе для каждой метки, как это:
LOCAL @@label1
LOCAL @@label2
LOCAL @@label3
...
перечислив их в одной строке (LOCAL @@ label1, @@ label2, @ @ label3, ...) не работает.
Возможно, кому-то это окажется полезным.