我有一個問題正確地終止了用Assembly編寫的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' – 2012-01-11 15:19:00
我試過這樣做了。它不起作用。 – Roman 2012-01-11 15:28:06
'mov ax,4c00h'後面跟着'int 21h'(這是推薦的終止DOS應用程序的方法) – 2012-01-11 15:35:45