第8章 输入输出和中断
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
功能调用号:02H 功能调用号: 入口参数: 待输出字符的ASCII码 入口参数: (DL)=待输出字符的 待输出字符的 码 出口参数:无 出口参数: 举例:输出显示变量 举例:输出显示变量CHAR所存放的字母 所存放的字母 指令序列: 指令序列: MOV AH , 02H MOV DL , CHAR INT 21H
4
1、单字符输入(01号功能调用) 、单字符输入( 号功能调用 号功能调用)
功能调用号: 功能调用号:01H 入口参数:无 入口参数: 出口参数: 输入字符的ASCII码 出口参数: (AL)=输入字符的 输入字符的 码 举例:从键盘上获取一位十进制数据。 举例:从键盘上获取一位十进制数据。 指令序列: 指令序列: 执行时状态: 执行时状态: 光标等待键盘输入,输入一个字符“ 后返回 后返回; 光标等待键盘输入,输入一个字符“1”后返回;
2011年11月30日星期三
MOV AH , 2 MOV DL , 10 INT 21H MOV DL , 13 INT 21H LEA DX , buf+2 MOV AH , 09H INT 21H MOV AX , 4C00H INT 21H CODE1 ENDS END START
11
DX , buf 21H
在屏幕上可看到输入的字符; 在屏幕上可看到输入的字符;
MOV AH , 01H INT 21H
出口参数: 出口参数: (AL)=31H 结果处理: 结果处理: 所需的十进制数据 = (AL) - 30H
2011年11月30日星期三 5
2、单字符输出(02号功能调用) 、单字符输出( 号功能调用) 号功能调用
功能调用号: 功能调用号:0AH 入口参数: 入口参数: (DS:DX)=存放输入字符串的起始地址 存放输入字符串的起始地址 注意:存放输入字符串的缓冲区必须事先按格式定义; 注意:存放输入字符串的缓冲区必须事先按格式定义; 必须事先按格式定义 缓冲区定义格式如: 缓冲区定义格式如:BUF DB n,?,n DUP(?) ,
第8章 输入输出和中断 章
DOS功Hale Waihona Puke Baidu调用 功能调用
P161 8.3 中断功能的分类
2011年11月30日星期三
1
8.3 中断功能的分类
BIOS功能调用 功能调用 BIOS例行程序 是 系统加电自检 时 , 所用到的 主要 例行程序是 系统加电自检时 所用到的主要 主要I/O设备程 例行程序 设备程 序以及接口控制等功能模块; 序以及接口控制等功能模块 直接调用这些模块,使程序员不必了解硬件接口的特性; 直接调用这些模块,使程序员不必了解硬件接口的特性; 调用这些模块 DOS功能调用 功能调用 DOS磁盘操作系统 , 有 IBMBIO.COM和 IBMDOS.COM两个 磁盘操作系统, 磁盘操作系统 和 两个 模块; 模块; DOS模块提供了更多更必要的测试, 使用 模块提供了更多更必要的测试,使用DOS调用比使用相 调用比使用相 模块提供了更多更必要的测试 调用 应功能的BIOS操作更简易,而且对硬件的依赖性更少些。 操作更简易, 应功能的 操作更简易 而且对硬件的依赖性更少些。
2011年11月30日星期三 10
输入字符串,并换行回显。 例. 输入字符串,并换行回显。
DATA1 SEGMENT buf DB 10 , ? , 10 DUP("$") DATA1 ENDS CODE1 SEGMENT ASSUME CS:CODE1,DS:DATA1 START: MOV AX , DATA1 MOV DS , AX LEA INT
MOV AH , 0AH
中存放的是61H,则以上指令序列执行完 若CHAR中存放的是 中存放的是 , 毕会在屏幕上显示字符“ 。 毕会在屏幕上显示字符“a”。
2011年11月30日星期三 6
3、字符串输出(09号功能调用) 、字符串输出( 号功能调用 号功能调用)
功能调用号: 功能调用号:09H 入口参数: 入口参数: (DS:DX)=待输出字符串的起始地址 待输出字符串的起始地址 欲输出字符串必须以“ 为结束事先存放于存储器中。 为结束事先存放于存储器中 欲输出字符串必须以“$”为结束事先存放于存储器中。 必须以 出口参数: 出口参数:无 试将变量String保存的字符串显示出来。 保存的字符串显示出来。 试将变量 保存的字符串显示出来 变量定义: 变量定义: 指令序列: 指令序列: String DB “ABCD$”
2011年11月30日星期三 3
常用的DOS功能调用 常用的 功能调用
单字符输入 单字符输出 字符串输出 字符串输入 程序结束返回 01号功能调用 号功能调用 02号功能调用 号功能调用 09号功能调用 号功能调用 0A号功能调用 号功能调用 4C号功能调用 号功能调用
2011年11月30日星期三
缓冲区可接收 的最大字符数
实际接收的 字符个数
接收的 字符串
出口参数:在缓冲区中保存输入字符串及其长度。 出口参数:在缓冲区中保存输入字符串及其长度。
2011年11月30日星期三 8
从键盘上接收一个字符串举例
数据段定义: 数据段定义: DATA1 SEGMENT buf buf DB 5 , ? , 5 DUP(0) DATA1 ENDS 输入字符串的指令序列: 输入字符串的指令序列: MOV AX , SEG buf MOV DS , AX LEA DX , buf MOV AH , 0AH INT 21H 以上指令序列执行,光标等待键盘输入, 以上指令序列执行,光标等待键盘输入,输 入字符串“ 入字符串“abcd”,以回车结束,即返回,存 ,以回车结束,即返回, 储单元的状态如右图。 储单元的状态如右图。
2011年11月30日星期三
…… 05 04 -00 61 62 00 63 00 64 00 0D 00 ……
9
0A号DOS功能调用使用注意事项 号 功能调用使用注意事项
缓冲区设置: 缓冲区设置: 由于字符串输入的回车结束符也会保存于缓冲区中, 由于字符串输入的回车结束符也会保存于缓冲区中,所 回车结束符也会保存于缓冲区中 以一般设置缓冲区的大小应比实际需接收的字符长度多 一个单元。 一个单元。 缓冲区初始化: 缓冲区初始化: 若输入的字符串最终需要输出,则可在缓冲区定义时, 若输入的字符串最终需要输出,则可在缓冲区定义时, 将其初始化为“ ,以使输出的字符串能够正常结束。 将其初始化为“$”,以使输出的字符串能够正常结束。 注意,最后输入的回车符的处理。 注意,最后输入的回车符的处理。
MOV AX , SEG String MOV DS , AX LEA DX , String MOV AH , 09H INT 21H
“$”是作为显示终 $ 是作为显示终 止符使用的! 止符使用的!
2011年11月30日星期三
7
4、字符串输入(0A号功能调用) 、字符串输入( 号功能调用) 号功能调用
2011年11月30日星期三 2
DOS功能调用的使用方法 功能调用的使用方法
1. 设置入口参数 ① (AH)=功能调用号 功能调用号 其他参数根据功能需要而不同,也可没有; ② 其他参数根据功能需要而不同,也可没有; 2. 执行指令INT 21H,调用相应的DOS模块 执行指令 ,调用相应的 模块 3. 获得输出参数 根据不同的功能从不同的位置获取,也可没有。 ① 根据不同的功能从不同的位置获取,也可没有。
4
1、单字符输入(01号功能调用) 、单字符输入( 号功能调用 号功能调用)
功能调用号: 功能调用号:01H 入口参数:无 入口参数: 出口参数: 输入字符的ASCII码 出口参数: (AL)=输入字符的 输入字符的 码 举例:从键盘上获取一位十进制数据。 举例:从键盘上获取一位十进制数据。 指令序列: 指令序列: 执行时状态: 执行时状态: 光标等待键盘输入,输入一个字符“ 后返回 后返回; 光标等待键盘输入,输入一个字符“1”后返回;
2011年11月30日星期三
MOV AH , 2 MOV DL , 10 INT 21H MOV DL , 13 INT 21H LEA DX , buf+2 MOV AH , 09H INT 21H MOV AX , 4C00H INT 21H CODE1 ENDS END START
11
DX , buf 21H
在屏幕上可看到输入的字符; 在屏幕上可看到输入的字符;
MOV AH , 01H INT 21H
出口参数: 出口参数: (AL)=31H 结果处理: 结果处理: 所需的十进制数据 = (AL) - 30H
2011年11月30日星期三 5
2、单字符输出(02号功能调用) 、单字符输出( 号功能调用) 号功能调用
功能调用号: 功能调用号:0AH 入口参数: 入口参数: (DS:DX)=存放输入字符串的起始地址 存放输入字符串的起始地址 注意:存放输入字符串的缓冲区必须事先按格式定义; 注意:存放输入字符串的缓冲区必须事先按格式定义; 必须事先按格式定义 缓冲区定义格式如: 缓冲区定义格式如:BUF DB n,?,n DUP(?) ,
第8章 输入输出和中断 章
DOS功Hale Waihona Puke Baidu调用 功能调用
P161 8.3 中断功能的分类
2011年11月30日星期三
1
8.3 中断功能的分类
BIOS功能调用 功能调用 BIOS例行程序 是 系统加电自检 时 , 所用到的 主要 例行程序是 系统加电自检时 所用到的主要 主要I/O设备程 例行程序 设备程 序以及接口控制等功能模块; 序以及接口控制等功能模块 直接调用这些模块,使程序员不必了解硬件接口的特性; 直接调用这些模块,使程序员不必了解硬件接口的特性; 调用这些模块 DOS功能调用 功能调用 DOS磁盘操作系统 , 有 IBMBIO.COM和 IBMDOS.COM两个 磁盘操作系统, 磁盘操作系统 和 两个 模块; 模块; DOS模块提供了更多更必要的测试, 使用 模块提供了更多更必要的测试,使用DOS调用比使用相 调用比使用相 模块提供了更多更必要的测试 调用 应功能的BIOS操作更简易,而且对硬件的依赖性更少些。 操作更简易, 应功能的 操作更简易 而且对硬件的依赖性更少些。
2011年11月30日星期三 10
输入字符串,并换行回显。 例. 输入字符串,并换行回显。
DATA1 SEGMENT buf DB 10 , ? , 10 DUP("$") DATA1 ENDS CODE1 SEGMENT ASSUME CS:CODE1,DS:DATA1 START: MOV AX , DATA1 MOV DS , AX LEA INT
MOV AH , 0AH
中存放的是61H,则以上指令序列执行完 若CHAR中存放的是 中存放的是 , 毕会在屏幕上显示字符“ 。 毕会在屏幕上显示字符“a”。
2011年11月30日星期三 6
3、字符串输出(09号功能调用) 、字符串输出( 号功能调用 号功能调用)
功能调用号: 功能调用号:09H 入口参数: 入口参数: (DS:DX)=待输出字符串的起始地址 待输出字符串的起始地址 欲输出字符串必须以“ 为结束事先存放于存储器中。 为结束事先存放于存储器中 欲输出字符串必须以“$”为结束事先存放于存储器中。 必须以 出口参数: 出口参数:无 试将变量String保存的字符串显示出来。 保存的字符串显示出来。 试将变量 保存的字符串显示出来 变量定义: 变量定义: 指令序列: 指令序列: String DB “ABCD$”
2011年11月30日星期三 3
常用的DOS功能调用 常用的 功能调用
单字符输入 单字符输出 字符串输出 字符串输入 程序结束返回 01号功能调用 号功能调用 02号功能调用 号功能调用 09号功能调用 号功能调用 0A号功能调用 号功能调用 4C号功能调用 号功能调用
2011年11月30日星期三
缓冲区可接收 的最大字符数
实际接收的 字符个数
接收的 字符串
出口参数:在缓冲区中保存输入字符串及其长度。 出口参数:在缓冲区中保存输入字符串及其长度。
2011年11月30日星期三 8
从键盘上接收一个字符串举例
数据段定义: 数据段定义: DATA1 SEGMENT buf buf DB 5 , ? , 5 DUP(0) DATA1 ENDS 输入字符串的指令序列: 输入字符串的指令序列: MOV AX , SEG buf MOV DS , AX LEA DX , buf MOV AH , 0AH INT 21H 以上指令序列执行,光标等待键盘输入, 以上指令序列执行,光标等待键盘输入,输 入字符串“ 入字符串“abcd”,以回车结束,即返回,存 ,以回车结束,即返回, 储单元的状态如右图。 储单元的状态如右图。
2011年11月30日星期三
…… 05 04 -00 61 62 00 63 00 64 00 0D 00 ……
9
0A号DOS功能调用使用注意事项 号 功能调用使用注意事项
缓冲区设置: 缓冲区设置: 由于字符串输入的回车结束符也会保存于缓冲区中, 由于字符串输入的回车结束符也会保存于缓冲区中,所 回车结束符也会保存于缓冲区中 以一般设置缓冲区的大小应比实际需接收的字符长度多 一个单元。 一个单元。 缓冲区初始化: 缓冲区初始化: 若输入的字符串最终需要输出,则可在缓冲区定义时, 若输入的字符串最终需要输出,则可在缓冲区定义时, 将其初始化为“ ,以使输出的字符串能够正常结束。 将其初始化为“$”,以使输出的字符串能够正常结束。 注意,最后输入的回车符的处理。 注意,最后输入的回车符的处理。
MOV AX , SEG String MOV DS , AX LEA DX , String MOV AH , 09H INT 21H
“$”是作为显示终 $ 是作为显示终 止符使用的! 止符使用的!
2011年11月30日星期三
7
4、字符串输入(0A号功能调用) 、字符串输入( 号功能调用) 号功能调用
2011年11月30日星期三 2
DOS功能调用的使用方法 功能调用的使用方法
1. 设置入口参数 ① (AH)=功能调用号 功能调用号 其他参数根据功能需要而不同,也可没有; ② 其他参数根据功能需要而不同,也可没有; 2. 执行指令INT 21H,调用相应的DOS模块 执行指令 ,调用相应的 模块 3. 获得输出参数 根据不同的功能从不同的位置获取,也可没有。 ① 根据不同的功能从不同的位置获取,也可没有。