Сборка (синтаксис Intel + NASM) Ошибка: попытка определить локальную метку перед любыми нелокальными метками
Я новичок в сборке и пытаюсь работать с программой. Поэтому всякий раз, когда я пытаюсь скомпилировать его, я получаю ошибку для строки, как указано в комментариях к коду.
Мне интересно, есть ли у кого-нибудь идеи, почему NASM обнаруживает эти ошибки, когда я определяю некоторые вещи для остального кода сборки?
Может быть, это связано с тем, как определяется основной?
PS Я перечислил только первую часть кода, так как программа довольно длинная.
Спасибо вам за помощь
.xlist ;attempt to define a local label before any non-local labels
include stdlib.a ; parser: instruction expected
includelib stdlib.lib ; parser: instruction expected
.list
.286
dseg segment para public 'data'
; Unknown section attribute 'public' ignored on declaration of section `para'
h word ?
i word ?
cseg segment para public 'code'
assume cs:cseg, ds:dseg
Main
2 ответа
В NASM метка, начинающаяся с точки, называется локальной меткой. Он добавляется к последнему глобальному ярлыку, например,
L:
.l2: ; it is really L.l2
Таким образом, вы не можете иметь локальный лейбл до каких-либо глобальных
Это вовсе не код NASM. Как говорит @Jester, это, вероятно, TASM или MASM.
NASM неASSUME
, так что вы можете быть на 100% уверены, что это не код NASM.
Это определенно не код Linux, либо. Обратите внимание .286
директивы. Это означает, что это будет 16-битный код. Даже если вы преобразуете синтаксис в NASM, полученный бинарный файл не принесет ничего полезного в вашей системе Linux.
(В этом вопросе не упоминается о Linux, но продолжение упоминается).