У меня проблема с правильным завершением 16-битной программы DOS, написанной на ассемблере. Вот часть кода:
.386P
.model flat
stack_s segment stack 'stack'
db 256 dup(0)
stack_s ends
data segment use16
data ends
code segment 'code' use16
assume cs:code, ds:data
main proc
mov ax, data
mov ds, ax
iretd
main endp
code ends
end main
Проблема в том, что программа завершается некорректно. DOSBox просто зависает. Я пытался понять, что происходит с помощью отладчика, и мне кажется, что программа просто заходит в бесконечный цикл после выполнения iretd
. Почему так происходит? Как правильно завершить работу 16-битного приложения DOS?