Код TASM выдает ошибку в YASM: ожидается инструкция после метки

У меня есть код, который я сделал для TASM, и, насколько мне известно, YASM совместим с ним, поэтому IDK, почему я получаю эти ошибки:

91.asm:3: error: instruction expected after label
91.asm:4: error: instruction expected after label
91.asm:27: error: instruction expected after label

для этого кода:

IDEAL
MODEL small
STACK 21h
DATASEG
; --------------------------
; Your variables here
; --------------------------
CODESEG
global start
start:
; --------------------------
; Your code here
; --------------------------
    mov cx, 21
    mov ax, 1000h
    cmp cx, 0
    je myExit
addStack:
    push ax
    inc ax
    loop addStack
myExit:
exit:
    mov ax, 4C00h
    int 21h
END start

person sef sf    schedule 09.02.2021    source источник


Ответы (1)


Насколько мне известно, YASM несовместим с TASM. Он совместим с N ASM, в котором используются совершенно другие директивы. (И другое значение для mov reg, label - в NASM / YASM это непосредственное перемещение адреса, в отличие от TASM / MASM, где это загрузка.)

Что-то в строке само по себе без : может быть меткой (и это то, что предполагает YASM, если оно не распознается как мнемоника инструкции).

Но если за ним следует что-то еще, что также не понимается как инструкция (например, small в MODEL small), это синтаксическая ошибка.

Используйте синтаксис NASM / YASM для YASM.

person Peter Cordes    schedule 09.02.2021
comment
вы знаете совместимый ассемблер с TASM, который может работать в Linux или создавать обычные файлы bin? - person sef sf; 09.02.2021
comment
@sefsf: Возможно, JWASM (я думаю, что он, по крайней мере, в основном совместим с MASM), но Linux не может запускать плоско-двоичные исполняемые файлы DOS .com изначально. Или вы можете просто перенести свой код на YASM; плоские двоичные файлы довольно просты, поэтому вам не понадобится много директив. (Синтаксис IMO NASM / YASM для реальных инструкций является лучшим из всех MASM, AT&T или других основных вариантов.) - person Peter Cordes; 09.02.2021