Вывод строки заканчивается неудачей - Assembler

Узнай цену своей работы

Формулировка задачи:

.model tiny
.code
org 100h
main:
    mov dx, offset string
    mov ah, 09h
    int 21h
    int 20h
    string db 'lol kek chebureck$'
end main
Запускаю на emu8086 - все нормально, но как запускаю на GUI Turbo Assembler, так оно сразу зависает, а если убрать int 20h, то показывает какой-то мусор и только потом уже нужную мне строку. Почему так происходит?

Решение задачи: «Вывод строки заканчивается неудачей»

textual
Листинг программы
.MODEL SMALL
.STACK 100h
.DATA
    HelloMessage DB 'lol kek chebureck$',13,10,'$'
.CODE
START:
    mov ax,@data
    mov ds,ax
    mov ah,9
    mov dx,OFFSET HelloMessage
    int 21h
    mov ah,4ch
    int 21h
END START

Объяснение кода листинга программы

  1. Установка модели памяти на малую (SMALL).
  2. Установка стека на 100 байт.
  3. Объявление строки «HelloMessage» в сегменте данных (D) с начальным адресом в 1000000h (1000 байт).
  4. Код программы начинается с метки «START».
  5. Перемещение регистровой пары ax в сегмент данных (D) с помощью команды mov ax,@data.
  6. Перемещение сегмента данных (D) в регистровую пару ds с помощью команды mov ds,ax.
  7. Установка регистра ah на 9 для выполнения функции вывода в консоль с помощью команды mov ah,9.
  8. Перемещение смещения строки «HelloMessage» в регистровую пару dx с помощью команды mov dx,OFFSET HelloMessage.
  9. Выполнение функции вывода в консоль с помощью команды int 21h.
  10. Установка регистра ah на 4ch для завершения работы программы с помощью команды mov ah,4ch.
  11. Выполнение функции окончания работы программы с помощью команды int 21h.

Оцени полезность:

14   голосов , оценка 4.071 из 5