了解 INT 21H 系统中断的作用,解释不同功能号对应的服务内容,如显示字符串、输入字符串和退出程序。
MOV AH, 09H ; 设置功能号 09H,显示字符串
MOV DX, OFFSET MSG ; MSG 为以 $ 结束的字符串
INT 21H ; 调用中断 21H,显示字符串
MSG DB 'Hello, DOS!', '$'
。为什么使用 **<font style="color:#DF2A3F;background-color:#FBF5CB;">DX</font>**
寄存器?
21H
的功能号 09H
,它要求: AX
寄存器存储功能号(这里是 09H
)。DX
寄存器存储字符串的偏移地址(即字符串的内存地址)。DX
是专门用来传递字符串地址的。MOV AH, 0AH ; 设置功能号 0AH,输入字符串
MOV DX, OFFSET BUF ; BUF 为输入缓冲区的首地址
INT 21H ; 调用中断 21H,等待用户输入字符串
BUF DB 20, ?, 20 DUP(0)
其中 20 表示允许输入最多 20 个字符,“?” 表示实际输入字符数(初始时未知),后面预留 20 个字节用于存储输入字符。
- 输入结束后,缓冲区中会自动保存用户输入的数据。
MOV AH, 4CH ; 设置功能号 4CH,退出程序
INT 21H ; 调用中断 21H,结束程序
DATA SEGMENT
MSG DB '请输入一段文字:$' ; 提示信息,$为结束标志
BUF DB 20, ?, 20 DUP(0) ; 输入缓冲区:最大输入20个字符,?用于存储实际输入字符数
CRLF DB 13,10,'$' ; 回车换行字符串
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
; 初始化数据段
MOV AX, DATA
MOV DS, AX
; 显示提示信息
MOV AH, 09H
MOV DX, OFFSET MSG
INT 21H
; 调用输入字符串服务
MOV AH, 0AH
MOV DX, OFFSET BUF
INT 21H
; 显示回车换行(可选)
MOV AH, 09H
MOV DX, OFFSET CRLF
INT 21H
; 程序退出
MOV AH, 4CH
INT 21H
CODE ENDS
END START