У меня проблема с правильной завершением 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 правильно?
Попробуйте изменить 'iretd' на' ret' –
Я уже пытался это сделать. Это не работает. – Roman
Как насчет 'mov ax, 4c00h', за которым следует' int 21h' (это рекомендуемый способ прекращения приложения DOS) –