数据传送方式
程序控制方式
中断方式
DMA方式
中断传送方式
避免因反复查询外部设备的状态而浪费时间,从而提高CPU的效率。
非屏蔽中断
非屏蔽中断不受中断允许标志IF
的屏蔽,系统中只能有一个非屏蔽中断,其中断类型号为2。
中断过程
PUSH (FLAGS)
IF<-0
TF<-0
AC<-0
PUSH (CS)
PUSH (IP)
(IP)<-(N*4)
(CS)<-(N*4+2)
中断指令
INT
,不给中断号的话,默认是3号中断
STI
,设置中断允许位(IF=1
)
CLI
,清除中断允许位(IF=0
)
中断向量表
各类型中断处理程序的入口地址表,其存放在内存低位处,每项占用4个字节,低位是(IP)
,高位是(CS)
。
每类中断向量的偏移地址可由中断类型号N乘以4计算出来。
子程序与中断的区别
两者实现机制不同
中断程序是固定的(如果操作系统允许,程序员可以修改);
而子程序是程序员动态编写的。
call func
,根据func
直接找到子程序入口,根据需求修改(IP)
和(CS)
;而
int 21h
需要计算地址,通过中断向量表找到中断处理程序入口地址。
BIOS、DOS中断
BIOS中断和DOS中断是两种特殊的中断。
BIOS比DOS更靠近硬件。
在某些情况下,既可选择DOS中断又可选择BIOS中断实现相应功能;某些情况下,必须使用BIOS才能实现相应的功能。
基本步骤
- 将调用参数装入指定寄存器中
- 如需功能号,将其装入
AH
- 如需子功能号,将其装入
AL
- 按中断号调用DOS或BIOS中断,
INT 21H
DOS常用功能
1号功能
功能号
(AH)=1
功能
从键盘输入一个字符并回显在屏幕上
返回参数
(AL)=字符
2号功能
功能号
(AH)=2
功能
显示一个字符(检验Ctrl_Break),光标随字符移动
调用参数
(DL)=字符
9号功能
功能号
(AH)=9
功能
显示字符串,光标跟随字符移动
调用参数
(DS):(DX)
为串地址,串必须以$
结束
0A号功能
功能号
(AH)=0AH
功能
输入字符到缓冲区,缓冲区第一个字节保存最大字符数,第二个字节保存实际输入的字符数
返回参数
(DS):(DX)为缓冲区首址
常用ASCII码
字符 | 十六进制ASCII码 |
---|---|
空格 | 20H |
0 |
30H |
A |
41H |
a |
61H |
换行 | 0AH |
回车(归位) | 0DH |
作者:@臭咸鱼
转载请注明出处:https://chouxianyu.github.io
欢迎讨论和交流!