어셈블리에서 작성된 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
문제는 프로그램이 올바른 방법으로 종료되지 않는다는 것입니다. 도스 박스는 단지 얼어 붙는다. 나는 디버거를 사용하여 무슨 일이 일어 났는지 이해하려고 시도했다. 그리고 프로그램은 단지 iretd
이 수행 된 후에 무한 루프로 끝난다. 왜 이런 일이 생길까요? 어떻게하면 16 비트 DOS 응용 프로그램을 올바르게 종료 할 수 있습니까?
'iretd'를'ret'로 변경해보십시오. –
나는 이것을 이미 시도했습니다. 작동하지 않습니다. – Roman
'mov ax, 4c00h' 다음에'int 21h'가 붙은 것은 어떨까요 (DOS 응용 프로그램을 종료 할 때 권장되는 방법입니다) –