Ваша первая версия в формате COM.Это 16-битная модель FLAT реального режима.Ваша вторая версия в формате DOS MZ.Это 16-битная модель SEGMENTED реального режима.
Сегментированная модель использует «сегменты» для описания вашего DS (сегмент) и DX (смещение).Итак, во-первых, вам нужно определить сегменты для ваших данных и кода, а во-вторых, вам нужно правильно указать, где находится ваш сегмент данных и каково ваше смещение, прежде чем вы сможете использовать int 21h, функция 9.
В течение 21 часа для функции 9 требуется правильно настроить DS: DX в сегментированной модели, чтобы вывести строку с нулевым символом в конце
format MZ
entry .code:start
segment .code
start:
mov ax, .data ; put data segment into ax
mov ds, ax ; there, I setup the DS for you
mov dx, msg ; now I give you the offset in DX. DS:DX now completed.
mov ah, 9h
int 21h
mov ah, 4ch
int 21h
segment .data
msg db 'Hello World', '$'
Надеюсь, это поможет некоторым новичкам из FASM.