Неожиданный вывод в консоль

Начал изучать ассемблер (TASM,64x,Windows). В регистр dx положили переменную Mess2, а в консоль выводиться "Hello, World!". Почему?

CSEG segment
org 100h

Begin:

    mov ah, 9
    mov dx, offset Mess2
    int 21h
    int 20h

Message db 'Hello, World!$'
Mess2 db 'Hi$!'
CSEG ends
end Begin

вывод


Ответы (1 шт):

Автор решения: insolor

У вас код для COM файла, а собираете вы EXE. Для EXE файла нужно обязательно инициализировать регистр DS (как именно - смотрите в примерах кода для EXE), иначе там будет мусор, и при выполнении данные будут браться не оттуда, откуда вам нужно, а из какого-то другого места.

Либо собирайте в COM файл - для этого при запуске линкера (TLINK) нужно добавить опцию /t:

tlink /t T.obj
→ Ссылка