我刚刚开始学习汇编语言,我正在关注tutorial。
我写了以下程序:
.MODEL SMALL
.STACK 100H
.DATA
msg db "123123.$"
.CODE
MAIN PROC
MOV AH,02 ; Function to output a char
MOV DL,"!" ; Character to output
INT 21h ; Call the interrupt to output "!"
MOV AH, 09
MOV DX, OFFSET msg
INT 21h
MOV AH,04Ch ; Select exit function
MOV AL,00 ; Return 0
INT 21h ; Call
MAIN ENDP ; Terminate program
END MAIN
我期待以下输出:
! 123123
但我得到以下内容:
AH
用于存储子功能。DL
用于存储使用INT 21h
DX
用于存储要使用INT 21h
1。)以上几点是对的吗?如果没有,我不能做对的是什么?
2。)如果以上几点是正确的,为什么我会得到意想不到的输出?
3。)将来如何避免这种行为?
感谢。
答案 0 :(得分:1)
您的教程处理.MODEL TINY
以生成.com
- 可执行文件。您使用.MODEL SMALL
并生成.exe
- 可执行文件。对于.MODEL SMALL
,您必须明确设置DS
- 注册表,默认指向PSP(而不是.DATA
):
.MODEL SMALL
.STACK 1000H ; Mor stack, less trouble
.DATA
msg db "123123.$"
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
... (no change) ...