DOS BIOS中断
微型计算机原理作业第六章 习题与思考题

第六章习题与思考题典型例题解析例6-1 试述PC微机中断系统的分类与特点。
答:PC微机系统中断包括硬件(外部)中断和软件(内部)中断两大类。
硬件中断包括不可屏蔽中断NMI和可屏蔽中断INTR。
它们都由外部硬件产生。
软件中断包括软件中断INT nH和CPU内部特殊中断,它们由内部中断指令或执行程序过程中出现异常产生的。
软件中断又有DOS中断和BIOS中断之分。
硬件中断的特点是:(1)硬中断是外部事件而引起的中断,因此,硬件中断具有随机性和突发性。
(2)在硬件中断响应周期,CPU需要发中断回答信号(非屏蔽硬件中断不发中断回答信号)。
(3)硬件中断的中断号由中断控制器提供(非屏蔽硬件中断的中断号由系统指定为02H)(4)硬件中断一般是可屏蔽的(非屏蔽硬件中断是不可屏蔽的)。
软件中断的特点是:(1)软件中断是执行中断指令而产生的,无需外部施加中断请求信号。
在程序需要调用某个中断服务程序时,只要安排一条相应中断指令,就可转去执行所需要的中断程序,因此,中断的发生不是随机的,而是由程序安排好的。
(2)在软件中断响应周期,CPU不需要发中断回答信号。
(3)软件中断的中断类型号是在指令中直接给出,因此,不需要使用中断控制器。
(4)软件中断是不可屏蔽的。
例6-2 试述可编程控制器8259A的作用。
答:可编程控制器8259A在协助CPU处理中断事务中所起的作用主要是:(1)接受和扩充外部设备的中断请求。
外设的中断请求,并非直接送到CPU,而是通过8259A接受进来,再由它向CPU提出中断请求。
一片8259A可授受8个中断请求,经过级联可扩展到8片8259A,能接受64个中断请求。
(2)进行中断优先级排队。
外设的中断优先级排队,并不是CPU安排,而是由8259A安排的。
即由8259A中断请求输入引脚(IR)的编号决定的。
连到IR0上的外设中断优先级最高,连到IR7上的外设中断优先级最低。
(3)向CPU提供中断类型号。
计算机接口与微机原理-第12周-中断控制器8259A-c

计算机接⼝与微机原理-第12周-中断控制器8259A-c可编程中断控制器8259Ap IBM PC/XT的中断指令p DOS系统功能调⽤p BIOS中断类型p8259A的中断级联p IBM PC/AT的中断级联p8259A的应⽤举例p8259A的编程⽅法中⼭⼤学信息科学与技术学院陈任IBM PC/XT中的中断指令(1) 8086/8088系统中与中断有关的专⽤指令。
1.INT n 软件中断指令(Interrupt)-软件中断指令,也称为软中断指令,其中n为中断类型号,其值必须在0~255的范围内。
-可在编程时安排在程序中的任何位置上,因此也被称为陷阱中断。
-CPU执⾏INT n指令时,先把标志寄存器的内容推⼊堆栈,再把当前断点的段基地址CS和偏移地址IP⼊栈保护,并清除中断标志IF和单步标志TF。
-然后将中断类型号n乘以4,找到中断服务程序的⼊⼝地址表的表头地址,从中断⽮量表中获得中断服务程序的⼊⼝地址,将其置⼊CS和IP寄存器,CPU就⾃动转到相应的中断服务程序去执⾏。
-原则上讲,利⽤INT n指令能以软件的⽅法调⽤所有256个中断的服务程序,尽管其中有些中断实际上是由硬件触发的。
因此可以利⽤这条指令来调试各种中断服务程序。
-例如,可⽤INT 0指令让CPU执⾏除法出错中断服务程序,可⽤INT 2指令执⾏NMI中断服务程序,⽽不必在NMI引脚上加外部信号。
IBM PC/XT中的中断指令(2)1. INT n 软件中断指令(Interrupt)2. INTO 溢出中断指令(Interrupt On Overflow)-当带符号数进⾏算术运算时,如果溢出标志OF置1,则可由溢出中断指令INTO产⽣类型为4的中断,若OF清零,则INTO指令不产⽣中断,CPU继续执⾏后续程序。
-在带符号数进⾏加减法运算之后,必须安排⼀条INTO指令,⼀旦溢出就能及时向CPU提出中断请求,CPU响应后可作出相应的处理,如显⽰出错信息,使运算结果⽆效等。
bios中断列表

;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=00H │;│设定屏幕影相模式│;│? (AL) <= 模式码(正常为03h) │;│模式码: 分辨率颜色数目页数地址│;│文00H: 40*25 16 色8 页B8000H~B87CFH │;│字01H: 80*25 16 色8 页B8000H~B87CFH │;│模02H: 80*25 16 色8 页B8000H~B8F9FH │;│式03H: 80*25 16 色8 页B8000H~B8F9FH │;│07H: 80*25 2 色8 页B8000H~B8F9FH │;│分辨率颜色数目页数地址│;│绘04H: 320*200 4 色1 页B8000H~BBF3FH │;│图05H: 320*200 4 色1 页B8000H~BBF3FH │;│模06H: 640*200 2 色1 页B8000H~BBF3FH │;│式0DH: 320*200 16 色8 页A0000H~A1F3FH │;│0EH: 640*200 16 色4 页A0000H~A3E7FH │;│0FH: 640*350 2 色2 页A0000H~A6D5FH │;│10H: 640*350 16 色2 页A0000H~A6D5FH │;│11H: 640*480 2 色1 页A0000H~A95FFH │;│12H: 640*480 16 色1 页A0000H~A95FFH │;│13H: 320*200 256 色1 页A0000H~AF9FFH │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=01H │;│设定光标形状┌──┐│;│? (CH) <= 游标的启始线(0~15) ││<---- 启始线│;│? (CL) <= 游标的终止线(0~15) │││;│注:正常: CH=0DH,CL=0EH ││<---- 终止线│;│消失: CH=0FFH,CL=0FFH └──┘│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=02H │;│设定光标位置│;│? (DH) <= 游标的列数(0~24) │;│? (DL) <= 游标的行数(0~79) │;│? (BH) <= 页码│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=03H │;│取得光标位置│;│? (BH) <= 页码┌──┐│;│游标的列数=> (DH) ││<---- 启始线│;│游标的行数=> (DL) │││;│游标的启始线=> (CH) ││<---- 终止线│;│游标的终止线=> (CL) └──┘│;│注:正常: CH=0DH,CL=0EH │;│消失: CH=0FFH,CL=0FFH │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=05H │;│画面页区的号择│;│? (AL) <= 页码│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│INT 10h,AH=06H │;│把指定的窗口范围上卷│;│? (AL) <= 卷动的列数,若为0 则清除屏幕│;│? (BH) <= 卷动后空出位置放入的属性│;│? (CH) <= 卷动范围的左上坐标列│;│? (CL) <= 卷动范围的左上坐标行│;│? (DH) <= 卷动范围的右下坐标列│;│? (DL) <= 卷动范围的右下坐标行│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│颜色属性: bh =│b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│bit0~2 :字体颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit3 :字体亮度(0:字体正常,1:字体高亮度) │;│bit4~6 :背景颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit7 :字体闪烁(0:不闪烁,1:字体闪烁) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│INT 10h,AH=07H │;│把指定的窗口范围下卷│;│? (AL) <= 卷动的列数,若为0 则清除屏幕│;│? (BH) <= 卷动后空出位置放入的属性│;│? (CH) <= 卷动范围的左上坐标列│;│? (CL) <= 卷动范围的左上坐标行│;│? (DH) <= 卷动范围的右下坐标列│;│? (DL) <= 卷动范围的右下坐标行│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│颜色属性: bh =│b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│bit0~2 :字体颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit3 :字体亮度(0:字体正常,1:字体高亮度) │;│bit4~6 :背景颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit7 :字体闪烁(0:不闪烁,1:字体闪烁) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=08H │;│读取光标所在位置的字符及属性│;│? (BH) <= 页码│;│字符ascii => (AL) │;│字符的属性=> (AH) │;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│颜色属性: ah =│b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│bit0~2 :字体颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit3 :字体亮度(0:字体正常,1:字体高亮度) │;│bit4~6 :背景颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit7 :字体闪烁(0:不闪烁,1:字体闪烁) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=09H │;│写入字符及属性在光标所在位置,光标不动(绘图模式亦能使用) │;│? (AL) <= 欲写入的字符ascii │;│? (BL) <= 欲写入之字符的属性│;│? (CX word) <= 欲显示的次数│;│? (BH) <= 页码│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│颜色属性: bl =│b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│bit0~2 :字体颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit3 :字体亮度(0:字体正常,1:字体高亮度) │;│bit4~6 :背景颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit7 :字体闪烁(0:不闪烁,1:字体闪烁) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0AH │;│写入字符在光标所在位置,光标不动,属性不变(绘图模式亦能使用) │;│? (AL) <= 欲写入的字符ascii │;│? (CX word) <= 欲显示的次数│;│? (BH) <= 页码│;│? (BL) <= 前景颜色(绘图模式时) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0BH │;│设定文本模式(0~3)的边框颜色或绘图模式(4、5)的背景颜色│;│? (BL) <= 颜色属性│;│(1)文本模式(0~3):边框颜色,只用到低4bit,共16色│;│(2)绘图模式(4、5、6):背景颜色,只用到低4bit,共16色│;│bit0~2 :颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白)│;│bit3 :为亮度(1:高亮度,0:正常) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0BH │;│设定绘图模式(4、5)的调色盘│;│? (BL) <= 调色盘(以0 bit 决定) │;│bit0 = 0 (黑、绿、红、黄) │;│= 1 (黑、青、紫、白) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0CH │;│在绘图模式下画一点│;│? (AL) <= 像点的颜色值│;│? (CX word) <= 坐标X 轴│;│? (DX word) <= 坐标Y 轴│;│? (BH) <= 页码│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0DH │;│在绘图模式下读点像值│;│? (CX word) <= 坐标X 轴│;│? (DX word) <= 坐标Y 轴│;│像点的颜色值=> (AL) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0EH │;│在文本模式或绘图模式下显示一字符,光标则右移一格│;│? (AL) <= 字符ascii │;│? (BH) <= 页码│;│? (BL) <= 前景颜色码(绘图模式时) │;│注:所谓TTY 就是类似打字机输出方式,每显示一字符,光标则右移一格,│;│当移到最后一行时,光标则至跳下一列的最左边开始,当移到最后一列│;│时,屏幕则上卷一列│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=0FH │;│取得屏幕影相模式│;│每行字数=> (AH) │;│模式号码=> (AL) │;│使用页码=> (BH) │;│模式码: 分辨率颜色数目页数地址│;│文00H: 40*25 16 色8 页B8000H~B87CFH │;│字01H: 80*25 16 色8 页B8000H~B87CFH │;│模02H: 80*25 16 色8 页B8000H~B8F9FH │;│式03H: 80*25 16 色8 页B8000H~B8F9FH │;│07H: 80*25 2 色8 页B8000H~B8F9FH │;│分辨率颜色数目页数地址│;│绘04H: 320*200 4 色1 页B8000H~BBF3FH │;│图05H: 320*200 4 色1 页B8000H~BBF3FH │;│模06H: 640*200 2 色1 页B8000H~BBF3FH │;│式0DH: 320*200 16 色8 页A0000H~A1F3FH │;│0EH: 640*200 16 色4 页A0000H~A3E7FH │;│0FH: 640*350 2 色2 页A0000H~A6D5FH │;│10H: 640*350 16 色2 页A0000H~A6D5FH │;│11H: 640*480 2 色1 页A0000H~A95FFH │;│12H: 640*480 16 色1 页A0000H~A95FFH │;│13H: 320*200 256 色1 页A0000H~AF9FFH │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AX=1130H │;│读取VGA BIOS 中有关字形的信息│;│? (BH) <= 所要取的地址模式│;│取出的地址=> (ES:BP) │;│目前字形的高度=> (CX) │;│目前字形下屏幕列数-1 => (DL) │;│地址模式:00H:中断1FH 的地址│;│01H:中断43H 的地址│;│02H:8*14 字形表的地址│;│03H:8*8 字形表的地址│;│04H:8*8 ascii 值大于127 的字形表地址│;│05H:9*14 字形表的地址│;│06H:8*16 字形表的地址│;│07H:9*16 字形表的地址│;│注:中断向量1fh 的值亦是指向ascii 值大于127 的字形表地址│;│中断向量43h 的值则是指向目前屏幕模式所使用的字形表地址│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=13H │;│显示一列字符串│;│? (AL) <= 写入模式│;│? (BL) <= 字符之属性│;│? (CX word) <= 字符串的长度│;│? (DH) <= 游标的坐标列数│;│? (DL) <= 游标的坐标行数│;│? (ES:BP) <= 存字符串内容的内存变量│;│? (BH) <= 页码│;│写入AL=00H:字符串的属性由BL 决定,所以CX 所指的长度以byte 为单位│;│模式AL=01H:同AL=00H,但光标会移到字符串尾端,未显示字符的位置│;│AL=02H:字符串属性由每字符的后面一个byte指定,故CX 单位为word │;│AL=03H:同AL=02H,但光标会移到字符串尾端,未显示字符的位置│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│颜色属性: bl =│b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│bit0~2 :字体颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit3 :字体亮度(0:字体正常,1:字体高亮度) │;│bit4~6 :背景颜色(0:黑,1:蓝,2:绿,3:青,4:红,5:紫,6:综,7:白) │;│bit7 :字体闪烁(0:不闪烁,1:字体闪烁) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=80H │;│倚天中文的控制│;│? (AL) <= 句柄,限输入数值,如下│;│控51H:释放中文30H:内码输入法74H:透通模式切换│;│制71H:释放中文31H:仓颉输入法4CH:条列模式(L) │;│码41H:切换为英文模式32H:简易输入法6CH:条列模式切换│;│61H:中英文模式切换33H:注音输入法48H:显示内码(H) │;│6EH:切换为中文模式34H:三角输入法68H:显示内码切换│;│43H:切换为中文输入35H:简捷输入法47H:图形卷动(G) │;│63H:中英文输入切换37H:行列输入法67H:图形卷动切换│;│46H:全角输入39H:电信输入法4DH:隐藏状态栏│;│66H:全角、半角切换54H:透通模式(T) 6DH:状态栏切换│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 10H,AH=91H │;│检查是否有加载倚天中文│;│加载状态=> (AH != 91H 表有载入,AH = 91H 表未载入) │;│目前模式=> (DH),(bit7=0 表中文模式,bit7=1 表英文模式) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=00H │;│重设磁盘驱动器,准备下一次I/O │;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=80H:floppy disk drive 未备妥│;│AH=05H:硬盘重置错误AH=AAH:hard disk drive 未备妥│;│AH=20H:磁盘控制器失误AH=BBH:所指定的磁盘驱动器找不到│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=01H │;│读取磁盘驱动器状态│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08HMA 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09HMA搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=02H │;│读取扇区数据│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│? (AL) <= 欲读取的扇区数│;│? (CH) <= 磁道号码,从0 开始,高2 bit 可存于cl 的b6、b7 │;│? (CL) <= 起始扇区编号,从1 开始│;│? (DH) <= 磁头号码,从0 开始│;│? (ES:BX) <= 欲储存数据的缓冲区内存变量│;│成功=> (C=0),(AL=真正读到的扇区数) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08H 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09H 搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=03H │;│写数据到扇区内│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│? (AL) <= 欲写入的扇区数│;│? (CH) <= 磁道号码,从0 开始,高2 bit 可存于cl 的b6、b7 │;│? (CL) <= 起始扇区编号,从1 开始│;│? (DH) <= 磁头号码,从0 开始│;│? (ES:BX) <= 已储存数据的缓冲区内存变量│;│成功=> (C=0),(AL=真正写入的扇区数) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08H 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09H 搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=04H │;│检查扇区结构是否完好│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│? (AL) <= 欲检查的扇区数│;│? (CH) <= 磁道号码,从0 开始,高2 bit 可存于cl 的b6、b7 │;│? (CL) <= 起始扇区编号,从1 开始│;│? (DH) <= 磁头号码,从0 开始│;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08HMA 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09HMA搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=05H │;│将指定的扇区格式化,以轨为单位│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│? (CH) <= 磁道号码,从0 开始,高2 bit 可存于cl 的b6、b7 │;│? (DH) <= 磁头号码,从0 开始│;│? (ES:BX) <= 指向扇区参数表的内存变量,共四byte,即CHRN │;│扇区参数表:C:磁柱编号(cylinder) R:扇区编号(Record) │;│H:磁头编号(head) N:每扇区的byte数(0:128,1:256 │;│2:512,3:1024) │;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08HMA 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09HMA搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=06H │;│将指定的磁道格式化,并设定损坏磁盘│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│? (CH) <= 磁道号码,从0 开始,高2 bit 可存于cl 的b6、b7 │;│? (CL) <= 起始扇区编号,从1 开始│;│? (DH) <= 磁头号码,从0 开始│;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08HMA 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09HMA搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=07H │;│从指定的磁道位置,格式化磁盘│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│? (CH) <= 磁道号码,从0 开始,高2 bit 可存于cl 的b6、b7 │;│? (CL) <= 起始扇区编号,从1 开始│;│? (DH) <= 磁头号码,从0 开始│;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08HMA 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09HMA搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=08H │;│取得磁盘驱动器的磁道参数│;│? (DL) <= 驱动器号(A:00H,B:01H,C:80H,D:81H) │;│磁面的磁道数减1 => (CH) 及(CL 的bit6、bit7) │;│磁道的扇区数=> (CL 的bit0 ~ bit5) │;│磁面数减1 => (DH) │;│磁盘驱动器数量=> (DL) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 13H,AH=17H │;│设定磁盘驱动器型式│;│? (DL) <= 驱动器号(A:00H,B:01H) │;│? (AL) <= 磁盘驱动器型式│;│磁盘驱动器型式:AL=01H:使用360K 磁盘驱动器,工作360K 的磁盘│;│AL=02H:使用1.2M 磁盘驱动器,工作360K 的磁盘│;│AL=03H:使用1.2M 磁盘驱动器,工作1.2M 的磁盘│;│AL=04H:使用720K 磁盘驱动器,工作720K 的磁盘│;│AL=05H:使用1.44M 磁盘驱动器,工作1.44M 的磁盘│;│成功=> (C=0),(失败C=1,示误码如下) │;│AH=00H:成功AH=0AH:硬盘的扇区损坏│;│AH=01H:不合法的磁盘驱动器命令AH=0BH:硬盘的磁道损坏│;│AH=02H:扇区损坏或地址栏有误AH=0CH:存取不存在的磁道│;│AH=03H:写保护贴纸未撕AH=10H:CRC/ECC错误│;│AH=04H:找不到指定的扇区AH=11H:数据读取错误,使用ECC校正│;│AH=05H:硬盘重置错误AH=20H:磁盘控制器失误│;│AH=06H:不是原来的磁盘AH=40H:寻找磁道错误│;│AH=07H:硬盘参数错误AH=80H:floppy disk drive 未备妥│;│AH=08HMA 忙碌中AH=AAH:hard disk drive 未备妥│;│AH=09HMA搬动记忆区越过64K AH=BBH:所指定的磁盘驱动器找不到│;│注:CRC为循环重复检查检,用来侦测磁盘上数据是否有误│;│ECC为错误校正码,是用来侦测并校正磁盘上的数据是否有误,ECC具有│;│自动更正错误功能,而且只有硬盘才有ECC │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 16H,AH=00H │;│由键盘读取按键,即由键盘缓冲区读取按键,会等待│;│按键的ascii 码=> (AL) │;│按键的scan 码=> (AH),(AH bit7=0 表按键中) 46h Scroll │;│01h Esc 19h P 28h ' " 37h Print 47h 7 Home │;│2~Bh 1~9,0 1Ah [ { 29h ` ~ 38h R Ctrl 48h 8 Up │;│0Ch - _ 1Bh ] } 2Ah L Shift 39h Space 49h 9 PgUp │;│0Dh = + 1Ch Enter 2Bh \ | 3Ah Caps 4Ah - │;│0Eh 1Dh Ctrl 2Ch Z 3Bh F1 4Bh 4 Left │;│0Fh Tab 1Eh A 2Dh X 3Ch F2 4Ch 5 │;│10h Q 1Fh S 2Eh C 3Dh F3 4Dh 6 Right │;│11h W 20h D 2Fh V 3Eh F4 4Eh + │;│12h E 21h F 30h B 3Fh F5 4Fh 1 End │;│13h R 22h G 31h N 40h F6 50h 2 Down │;│14h T 23h H 32h M 41h F7 51h 3 PgDn │;│15h Y 24h J 33h , < 42h F8 52h 0 Ins │;│16h U 25h K 34h . > 43h F9 53h . Del │;│17h I 26h L 35h / ? 44h F10 57h F11 │;│18h O 27h : 36h R Shift 45h Num 58h F12 │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 16H,AH=01H │;│检查键盘缓冲区是否有字符可读│;│读取状况=> (Z=0,有字符可读),(Z=1,缓冲区是空的) │;│按键的ascii 码=> (AL) │;│按键的scan 码=> (AH),(AL bit7=0 表按键中) 46h Scroll │;│01h Esc 19h P 28h ' " 37h Print 47h 7 Home │;│2~Bh 1~9,0 1Ah [ { 29h ` ~ 38h R Ctrl 48h 8 Up │;│0Ch - _ 1Bh ] } 2Ah L Shift 39h Space 49h 9 PgUp │;│0Dh = + 1Ch Enter 2Bh \ | 3Ah Caps 4Ah - │;│0Eh 1Dh Ctrl 2Ch Z 3Bh F1 4Bh 4 Left │;│0Fh Tab 1Eh A 2Dh X 3Ch F2 4Ch 5 │;│10h Q 1Fh S 2Eh C 3Dh F3 4Dh 6 Right │;│11h W 20h D 2Fh V 3Eh F4 4Eh + │;│12h E 21h F 30h B 3Fh F5 4Fh 1 End │;│13h R 22h G 31h N 40h F6 50h 2 Down │;│14h T 23h H 32h M 41h F7 51h 3 PgDn │;│15h Y 24h J 33h , < 42h F8 52h 0 Ins │;│16h U 25h K 34h . > 43h F9 53h . Del │;│17h I 26h L 35h / ? 44h F10 57h F11 │;│18h O 27h : 36h R Shift 45h Num 58h F12 │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 16H,AH=02H │;│取得键盘设定状态│;│键盘状态值=> (AL),如下│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│al = │b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│insert ─┘││││││└─right shift │;│caps lock ───┘││││└───left shift │;│num lock ─────┘││└─────ctrl │;│scroll lock ───────┘└───────alt │;│bit = 0 表off │;│bit = 1 表on │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 16H,AH=0DAH │;│设定大易输入法的切换摸式,或取得载入状况│;│? (AL) <= 0:退出大易输入模式,1:切换为大易输入模式,2:为内部使用│;│加载状态=> (AL=55AAH 表有加载) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 17H,AH=00H │;│显示一个字符至打印机│;│? (AL) <= 字符ascii │;│? (DX word) <= 打印机编号│;│打印机状态值=> (AH),如下│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│ah = │b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│打印机忙碌? ─┘││││││└─久候不应? │;│取得回应? ───┘││││└───保留│;│纸用尽? ─────┘││└─────保留│;│所选打印机编号───────┘└───────I/O error? │;│(0:LPT1,1:LPT2) bit = 0 表否│;│bit = 1 表是│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 17H,AH=01H │;│打印机初始化│;│? (DX word) <= 打印机编号│;│打印机状态值=> (AH),如下│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│ah = │b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│打印机忙碌? ─┘││││││└─久候不应? │;│取得回应? ───┘││││└───保留│;│纸用尽? ─────┘││└─────保留│;│所选打印机编号───────┘└───────I/O error? │;│(0:LPT1,1:LPT2) bit = 0 表否│;│bit = 1 表是│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 17H,AH=02H │;│读取打印机状态│;│? (DX word) <= 打印机编号│;│打印机状态值=> (AH),如下│;│┌─┬─┬─┬─┬─┬─┬─┬─┐│;│ah = │b7│b6│b5│b4│b3│b2│b1│b0││;│└─┴─┴─┴─┴─┴─┴─┴─┘│;│打印机忙碌? ─┘││││││└─久候不应? │;│取得回应? ───┘││││└───保留│;│纸用尽? ─────┘││└─────保留│;│所选打印机编号───────┘└───────I/O error? │;│(0:LPT1,1:LPT2) bit = 0 表否│;│bit = 1 表是│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=00H │;│取得目前频率计数│;│频率的高word => (CX) │;│频率的低word => (DX) │;│注:将取得的单位除以18.2065 即可换算成秒│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=01H │;│设定目前频率计数│;│? (CX word) <= 频率高word │;│? (DX word) <= 频率低word │;│注:将计算出的秒数乘以18.2065 即可换算成频率计数单位│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=02H │;│取得系统时间,以packed BCD 表示│;│时=> (CH) │;│分=> (CL) │;│秒=> (DH) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=03H │;│设定系统时间,以packed BCD 表示│;│? (CH) <= 时│;│? (CL) <= 分│;│? (DH) <= 秒│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=04H │;│取得系统日期,以packed BCD 表示│;│年=> (CX) │;│月=> (DH) │;│日=> (DL) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=05H │;│设定系统日期,以packed BCD 表示│;│? (CX word) <= 年│;│? (DH) <= 月│;│? (DL) <= 日│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=06H │;│设定系统闹钟,以packed BCD 表示│;│? (CH) <= 时│;│? (CL) <= 分│;│? (DH) <= 秒│;│注:闹钟(设定:过了多久后),便会执行(INT 4AH) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=07H │;│关掉系统闹钟(disable) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=08H │;│取出系统闹钟,以packed BCD 表示│;│时=> (CH) │;│分=> (CL);│秒=> (DH) │;│开关=> (DL),(0:disable,1:enable、power off,2:enable、power on)│;│注:闹钟(设定:过了多久后),便会执行(INT 4AH) │;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=0AH │;│取得日期数量│;│天数=> (CX) │;│注:自1980/01/01,到现在到底经过多少天│;└─────────────────────────────────┘;┌─────────────────────────────────┐;│BIOS 呼叫INT 1AH,AH=0BH │;│设定日期数量│;│? (CX word) <= 天数│;│注:自1980/01/01,到现在到底经过多少天。
第九章 BIOS 和 DOS 中断

DOS 打印功能 ( AH=5 )
(打印一个字符)
DOS 串行通讯口功能 ( AH=3, 4 )
(从串口读一个字符/向串口写一个字符)
2. BIOS 中断调用
BIOS 键盘中断 ( INT 16H
AH = 0, 1, 2 ) (从键盘读一字符/读键盘缓冲区字符/取键盘状态字节) 例:从键盘读一字符 ( AH=0 ) mov int mov call ah, 0 16h bx, ax binihex
DOS 显示功能调用 ( AH=2, 6, 9 )
(显示一个字符/显示字符串)
例:显示一个字符 ( AH=2 )
mov ah, 2 mov dl, ‘A’ int 21h 例:显示字符串 ( AH=9 ) string mov mov int db ‘HELLO’, 0dh, 0ah, ‘$’ dx, offset string ah, 9 21h
用户在程序中调用 DOS 提供的一些子功能:
(1) 一般设备的输入输出
(2) 磁盘的输入输出及磁盘文件的管理 (= 1, 6, 7, 8, A, B, C )
(单字符输入/输入字符串/清除键盘缓冲区/检验键盘状态)
例:单字符输入 ( AH=1 )
get_key: mov int cmp je cmp je jne yes: …… no: …… ah, 1 21h al, ‘Y’ yes al, ‘N’ no get_key
(1) 将调用参数装入指定寄存器 (2) 如需功能号,将它装入 AH (3) 如需子功能号,将它装入 AL (4) 按中断类型号调用 DOS 或 BIOS 中断 (5) 检查返回参数是否正确
DOS 功能与 BIOS 功能都通过 软件中断 调用。
第9章 BIOS和DOS中断

第9章 BIOS和DOS中断1.教学目的:掌握BIOS和DOS中断程序设计的方法2.教学要求:①熟悉BIOS中断调用概念和调用方法②熟悉DOS中断调用概念和调用方法3.教学重点:①BIOS和DOS中断调用的概念和方法4.掌握难点:①BIOS和DOS中断程序设计方法5.教学进程安排:P315~P3486.教学方法:课堂讲授7.教学内容摘要9.1 BIOS和DOS概述9.1.1 基本输入输出系统(basic input / output system,BIOS)例行程序:位置:ROM(0FE000H~0FEFFF);功能:系统加电自检、引导装入、主要I/O设备的处理、接口控制方面的系统中断等;利用BIOS功能编写的程序特点:简洁,可读性好,易于移植。
9.1.2 磁盘操作系统(disk operating system,DOS)位置:软盘或硬盘;,:使BIOS用起来更方便;特点:比BIOS操作更简易,对硬件的依赖更少些。
9.1.3 DOS模块和ROM BIOS的关系图9.1 DOS模块和ROM BIOS的关系DOS 模块和ROM BIOS 的关系如图9.1所示:调用DOS 或BIOS 功能时,一般有以下几个基本步骤:①将调用参数装入指定的寄存器中;②如需功能号,把它装入AH ;③如需子功能号,把它装入AL ;④按中断号调用DOS 或BIOS 中断;⑤检查返回参数是否正确。
9.2 BIOS 中断调用9.2.1 BIOS 中断调用概述图9.2是用户程序和操作系统关系示意图,图9.2 用户程序和操作系统关系示意图9.2.2 BIOS 中断调用方法1、BIOS 调用的基本操作⑴设置分功能号 ⑵置入口参数⑶使用中断语句INT n ⑷分析出口参数2、BIOS 键盘输入功能调用扫描码:键盘上的每一个键都对应一个扫描码(01~83,或01H~53H),根据扫描码能唯一地确定哪一个键改变了状态。
字符码:①大部分键的字符码是一个标准的ASCII 码;②Alt 和功能键(F1~F10)等没有相应ASCII 码的键的字符码为0; ③能产生一个具体操作的一些非ASCII 码键。
第十三章 INT指令-内中断

BIOS中断例程应用(续)
int 10h中断例程:在光标位置显示字符
mov mov mov mov mov int ah,9 ;置光标 al,’a’ bl,7 bh,0 ;第0页 cx,3 10h
BIOS中断例程应用(续)
编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的’a’ assume cs:code code segment mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,5 mov dl,12 int 10h mov ah,9 mov al,'a' mov bl,0cah mov bh,0 mov cx,3 int 10h mov ax,4c00h int 21h code ends end
程序如下:
assume cs:code code segment start:mov ax,cs mov ds,ax mov si,offset capital mov ax,0 mov es,ax mov di,200h mov cx,offset capitalend - offset capital cld rep movsb ;安装中断程序sqr mov ax,0 mov es,ax mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 ;设置中断向量 mov ax,4c00h int 21h capital: push cx push si change:mov cl,[si] mov ch,0 jcxz ok and byte ptr [si],11011111b inc si jmp short change ok: pop si pop cx iret capitalend: nop code ends end start
《BIOS和DOS中断》课件

02
DOS中断
定义
DOS中断是操作系统提供的一组程序接口,用于实现系统调用和设备驱动 程序。
中断是一种特殊的程序控制转移,当某个事件发生时,计算机中断当前正 在执行的程序,转而执行相应的中断处理程序。
DOS中断是DOS操作系统提供的系统调用接口,通过中断号来标识不同的 中断服务程序。
DOS中断的种类
访问方式
BIOS通常通过特定的硬件访问方 式进行访问,例如通过特定的输 入输出端口或直接内存访问。而 DOS中断是通过DOS的API(应 用程序接口)进行访问的。
联系
依赖关系
BIOS需要在计算机启动时运行, 以初始化硬件并准备操作系统加 载。DOS中断需要在操作系统运 行时使用,以便执行各种DOS命 令和程序。因此,DOS中断依赖 于BIOS来确保硬件的正常运行。
DOS中断的应用场景
系统调用
DOS中断用于实现系统调用,允许输出控制
DOS中断用于控制输入输出设备,如键盘、鼠 标、显示器等。
文件操作
DOS中断提供了一些用于文件操作的函数,如打开、读取、写入文件等。
BIOS和DOS中断的共同应用场景
启动过程
BIOS中断和DOS中断都参与计算机的 启动过程,BIOS中断在启动时进行硬 件检测和初始化,而DOS中断则提供 了一些用于启动和系统设置的函数。
BIOS中断的作用
硬件初始化
BIOS中断可以用于初始化计算机硬件,如内存、硬盘、显卡等。
系统监控
BIOS中断可以用于监控计算机系统的状态,如CPU温度、风扇转速等。
输入输出控制
BIOS中断可以用于控制输入输出设备,如键盘、鼠标、显示器等。
系统安全
BIOS中断可以用于实现系统安全功能,如密码验证、启动项控制等。
打字测试练习

《微机原理及接口》课程设计报告课题名称打字测试练习学院自动控制与机械工程学院专业通信技术班级姓名学号时间2012年1月13日目录任务书第一章设计概述1.1设计课题1.2设计任务1.3设计目的1.4设备环境第二章设计的相关知识2.1汇编语言的程序设计2.2B I O S中断介绍2.3D O S中断介绍2.4子程序设计第三章设计方案3.1设计思想分析3.2设计方案实现3.3程序流程图3.4源程序第四章调试及运行结果第五章课程设计心得体会5.1心得体会及系统改进5.2课程设计遇到的问题和解决方案参考文献附录微机原理课程设计任务书一课题题目:打字测试练习二课题要求:在DOS环境中设计一个打字测试练习的程序:具体要求:1.屏幕上显示出提示信息和练习例句;2.按照例句在从键盘上输入字母;3.每输入完一行后回车,显示练习输入的时间、输入的正确数和错误数和下一行例句;4.按Esc键可退出程序。
5.参考设计基本思路编程实现上述功能;6.设计说明书:包括设计思想、程序流程图和源程序。
三设计基本思路见课程设计指导书六补充说明1.设计题目必须调试成功(生成的可执行文件必须能运行并且能够实现题目实现的功能),考核是独立完成考核内容,若未完成没有成绩。
2.设计说明书必须独立完成,若果出现70%相同视为雷同,取消其成绩。
七主要参考资料1.《微机原理与接口技术》李兰友编清华大学出版社 20092.《微机原理与应用》潘名莲编电子科技大学出版社 19953.《新编深入DOS编程》求伯君主编学苑出版社 1994第一章设计概述1.1 设计课题打字测试练习1.2 设计任务在DOS环境中编程完成以下任务:(1) 屏幕上显示出提示信息和练习例句;(2) 按照例句在从键盘上输入字母;(3) 每输入完一行后回车,显示练习输入的时间、输入的正确数和错误数和下一行例句;(4) 按Esc键可退出程序。
(5) 参考设计基本思路编程实现上述功能;(6) 设计说明书:包括设计思想、程序流程图和源程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BIOS和DOS建立的中断向量表绝对地址16进制 10进制有关内容
00H 0H 0 0做除数时处理器发出的中断溢出条件是:
除法类型结果
---------------------------------
有符号字 +127
有符号双字 +32767
无符号字 | >255
无符号双字 | >65535
---------------------------------
DOS设有INT 00H处理程序,系统将显示"Divide Overflo",结束当前程序的执行。
04H 1H 1 单步调试时处理器发出的中断
08H 2H 2 非屏蔽中断
0CH 3H 3 调试程序设置断点时处理器发出的中断10H 4H 4 发生算术溢出时处理器发出的中断
14H 5H 5 调用BIOS的屏幕拷贝操作
18-1FH 6-7H 6-7 保留单元
20H 8H 8 每1/18.2秒定时器发出的中断
24H 9H 9 按压或释放键时产生的中断
28H 0AH 10 保留单元
2CH 0BH 11 通讯设备使用的硬件中断
30H 0CH 12 通讯设备使用的硬件中断
34H 0DH 13 交替打印时硬件产生的中断
38H 0EH 14 软驱操作结束时产生的硬件中断
3CH 0FH 15 打印机发出警告信号时产生的硬件中断40H 10H 16 BIOS的显示I/O功能调用
44H 11H 17 BIOS设备确认调用
48H 12H 18 BIOS确认内存空间大小的功能调用
4CH 13H 19 BOIS的磁盘I/O功能调用
50H 14H 20 BIOS的RS-232串行I/O功能调用
54H 15H 21 在PC和XT机上是BIOS磁带I/O功能调用。
在AT机上是AT扩充服务功能调用。
58H 16H 22 BIOS的键盘I/O功能调用
5CH 17H 23 BIOS的打印机I/O功能调用
60H 18H 24 ROM的BASIC解释和程序功能调用64H 19H 25 BIOS的装载引导服务调用
68H 1AH 26 BIOS的日期时钟功能调用
6CH 1BH 27 Ctrl+Break处理程序功能调用。
当键入Ctrl+Break 键时指向可执行的程序入口初始化BIOS使该向量指向一条TRET指令。
用户可修改该向量,使它指向自己的程序。
70H 1CH 28 指向每1/18.2秒时可执行的服务程序的入口。
初始化时该向量指向一条IRET指令。
用户可修改该向量,使它指向自己的Ctrl+Break 处理程序。
74H 1DH 29 指向显示控制器初始化参数。
BIOS使这个向量指向ROM驻留表。
78H 1EH 30 指向软盘参数表。
BIOS使这个向量指向ROM 驻留表,但是DOS把它改为指向DOS的RAM 驻留表。
7CH 1FH 31 指向一点阵表。
在这个表中,BIOS可以找到字符集后128个字符的点阵
80H 20H 32 终止程序的DOS功能调用
84H 21H 33 任何种DOS功能调用
88H 22H 34 指向DOS的结束地址
8CH 23H 35 指向DOS的Ctrl+Break处理程序
90H 24H 36 指向DOS的严重错误处理程序
94H 25H 37 DOS绝对磁盘读调用
98H 26H 38 DOS绝对磁盘写调用
9CH 27H 39 程序终止,但仍驻留内存的DOS功能调用9DH 28H 40 DOS空闲
9EH 29H 41 支持驱动器程序输出
9FH-A1H 2AH-2CH 42-44 保留单元
A2H 2DH 45 DOS构件接口
A3H 2EH 46 退回入口A4H 2FH 47 多路中断(空闲信号)A5-FFH 30-3FH 48-63 为DOS保留的单元
100H 40H 64 保留单元
104H 41H 65 指向硬盘0的参数表,BOIS使这个向量指向ROM驻留的表。
108-10FH 42-43H 66-67 保留单元
110H 44H 68 PC机使用,用于指向低分辩率图形字符参数表114H 45H 69 保留单元
118H 46H 70 指向硬盘1的参数表,BIOS使这个向量指向 ROM驻留的表。
11CH 47H 71 保留单元
120H 48H 72 PC机使用,用于把PC机的键盘代码变换为标准的键盘代码。
124H 49H 73 指向键盘增强服务变换表128-17FH 4A-5FH 74-95 保留单元
180-19FH 60-67H 96-103 为用户程序保留的单元1A0-1BFH 68-6FH 104-111 未使用
1C0H 70H 112 硬件中断(IRQ--interrupt request) 8--实时时钟中断
1C4H 71H 113 硬件中断9 1C8H 72H 114 硬件中断10 1CCH 73H 115 硬件中断11 1D0H 74H 116 硬件中断12
1D4H 75H 117 硬件中断13--BIOS把这个中断向量重定向为非屏蔽中断(NMI)
1D8H 76H 118 硬件中断14 1DCH 77H 119 硬件中断15 1E0-1FFH 78-7FH 120-127 未使用
200-217H 80-85H 128-133 为BASIC保留
218-3C3H 86-F0H 134-240 BASIC程序运行时提供给BASIC解释程序作用3C4-#FFH F1-FFH 241-255 未作用。