我正在尝试使用INT 21h在屏幕上显示字符串,但该程序似乎立即崩溃...
我正在使用MASM
这是我的代码:
.stack 200h
.data?
value dd ?
.data
item dd 0
str1 db 'Hello world!$'
.code
start:
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
mov edx, offset str1
mov al, 09h
int 21h
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end start
答案 0 :(得分:2)
一些问题:
int 21h
后CPU执行内存中的垃圾。使用function 4ch
终止您的计划。200h
字节,他们将覆盖任何代码或数据,他们认为仍然有一些堆栈空间。这也可能导致崩溃或挂起。将大小改为1000h
。mov edx, offset str1
),这在i8086 / 8088,i80186和i80286以及它们的克隆上根本不可用。顺便说一下,DOS不支持32位地址或偏移量。它应该是mov dx, offset str1
。可能还有别的东西,但我们先解决这些问题。
答案 1 :(得分:0)
如果你真的使用8086,请使用: .model小 组织100h 。数据 消息db“Hello World $” 。码 主要过程 mov啊,09h mov dx,偏移消息 int 21h mov啊,4ch int 21h ENDP 结束主要
更简单,更清洁的imo。