DOS中断速查表——DOS常用系统功能调用
文章目录
0. 前言
DOS系统功能调用在中断向量表中的中断号是21h
这也是为什么总是在8086MASM汇编程序中看到int 21h
这样的语句, 这样的语句就是在调用DOS的功能, 下面介绍DOS提供的功能
一个例子: DOS字符串输出(helloworld程序必备)
string db 'hello world!$'
mov ah, 09h
mov dx, offset string
int 21h
这段程序不能直接运行, 想知道怎么写出完整的汇编程序可以看【MASM汇编快速入门】最简单的汇编helloword与汇编程序框架:MASM伪指令速查表——存储模型和段的定义-CSDN博客
1. 功能号
在调用DOS功能前需要告诉DOS我需要什么功能, MASM是通过ax寄存器的高字节ah来告诉DOS应该调用什么功能的
所以常看到在int 21h
前常常有mov ax, xxxx
2. 入口参数, 出口参数
有些DOS功能需要输入或输出, 比如09h字符串输出功能, 需要告诉DOS要输出什么字符串, 输入参数一般放在dx寄存器中, 输出参数一般放在ax寄存器的低子节的al
中
3. 功能号, 功能, 参数的对照表
功能号 | 功能 | 入口参数(输入) | 出口参数(输出) |
---|---|---|---|
ah=01h | 从输入设备(比如键盘)输入一个字符 | al=输入字符的ascii码 | |
ah=02h | 从输出设备(比如显示器)输出一个字符 | dl=字符的ascii码 | |
ah=09h | 从输出设备(比如显示器)输出一个字符串 | ds:dx=字符串地址 | |
ah=0ah | 从输入设备(比如键盘)输入一个字符串 | ds:dx=字符串地址 | |
ah=0bh | 判断键盘是否有键按下 | al=0, 无; al=ffh, 有 | |
ah=4ch | 程序执行终止 | al=返回码 |
4. 示例, hello world程序
运用上面的知识写出hello world程序, 这段程序是可以直接运行的
.model small
.data
string db 'hello world!$'
.code
.startup
mov ah, 09h ; 将功能号写入ah
mov dx, offset string ; 将功能的输入写入dx
int 21h ; 发出中断, 呼叫DOS提供系统功能
.exit 0
end