微型计算机系统原理与应用&中断大全
教学录像 地址: http://web.gdut.edu.cn/~dj/video/bao.rm
第一章 微型计算机的基础知识
第二章 8086/8088微处理器及其体系结构
第三章 8086/8088指令系统
第四章 汇编语言及汇编程序设计
第五章 存储器
第六章 输入输出及DMA控制器
第七章 中断系统和中断控制器8259A
第八章 接口技术
第九章 总线技术
第一章 微型计算机的基础知识
1、计算机中常用的数制及其转换
基数取值不同便可得到不同位制的表达式,设待表示的数为N,则
式中,
为基数,在计算机中常用的数制有二、八、十六和十进制,相应的
可取为2、8、16和10。
为系数,可在
共
个数值中取。n, m为幂指数,均为正整数,分别表示整数位数和小数位数。
在进行数制转换时,一位八进制相当于三位二进制,一位十六进制相当于四位二进制数。十进制转换为二进制数时,须将整数部分和小数部分分开。整数常采用“除2取余”法,而小数则采用“乘2取整”法。十进制小数并不是都能用有限的二进制小数精确地表示,要根据精度的要求来确定被转换的二进制位数。二进制向十进制的转换常用“按权展开”法。
2、计算机中常用的码制
已经码化了的带符号数称为机器数。计算机中常用的码制有原码、补码和反码,它们均是用来表示负数的。重点掌握原码和补码。设
为
位带符号二进制数,则
0的原码表示有+0和-0之分,补码表示仅有一个0。
其补码仍为
。对于一个 位二进制数,原码的表示范围为
,而补码的表示范围为
。
求负数的补码有三种方法:
①按定义求;
②由原码变反码再加1;
③从最低位起(自右向左)到出现第一个1以前(包括第一个别),原码中的数不变,以后逐位取反,但符号不变。
3、定点数与浮点数
定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。
浮点数中小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均为带符号数。尾数的符号表示数的正负;阶码的符号则表明小数点的实际位置。
定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。浮点表示法运算时可以不考虑溢出,但浮点运算,编程较难。
要掌握定、浮点数的转换方法及浮点数规格化方法。
4、补码的运算及溢出的判别
补码的运算规则是
(模
)
注意:
由于位数的限制,计算机进行运算时,会产生溢出。对于带符号数,判断溢出的方法有:
(1)采用一个符号位
两数进行补码加法运算时:当
时产生正溢
当
时产生负溢
上式中,
、
及
分别为被操作数、操作数及和的符号位。
(2)采用进位位判断
两数运算时,产生的进位为
,其中:
为符号位产生的进位,
为最高数值位产生的进位。
溢出条件为:溢出=
对于不带符号数,仅在进行加法时才会产生溢出,故以最高位是否产生进位来判别溢出。
5、二进制编码
1)BCD码
BCD码是以二进制数编码表示十进制数,有压缩BCD码和非压缩BCD码二种形式。只要熟悉了BCD的十个编码,就可以快速地实现十进制与BCD码之间的转换。
2)ASCII码
计算机中字母和字符必须按特定的规则用二进制编码表示。常用的ASCII码用七位二进制编码表示128个字符,包括十进制数码、英文字母等可打印的字符。第二章 8086/8088微处理器及其体系结构
1、 8086/8088CPU的结构
(1)总线接口部件BIU
总线接口部件由4个16位段寄存器、一个16位指令指针寄存器、20位物理地址加法器、6字节指令队列(8088为4字节)及总线控制电路组成,负责与存储器及I/O端口的数据传送。即BIU根据执行部件EU计算出的16位偏移地址及16位段寄存器提供的16位段地址,通过地址加法器产生20位物理地址,根据EU单元的请求,用20位物理地址对存储器进行读/写操作,也可对I/O接口进行读/写操作。
无论8086还是8088都会在执行指令的同时,从内存中取下面一条或几条指令放在指令队列中。
(2)执行部件EU
执行部件由ALU、寄存器阵列、标志寄存器等几个部分组成,其任务就是从指令队列流中取出指令,然后分析和执行指令,还负责计算操作数的16位偏移地址。
(3)BIU和EU的管理
BIU和EU非同步工作。其管理原则为:
1)指令队列中有2个字节空(8086)时,BIU会自动把下一条指令取到指令队列中。
2)EU在执行指令过程中,如果必须访问存储器或I/O设备,则EU会自动请求BIU进入总线周期去完成访问存储器或I/O操作。此时若BIU空闲,就会立即完成EU请求。否则EU将首先完成自己将指令取至指令队列中的任务,再响应EU的请求。
3)当指令队列已满,而EU又无请求时,BIU进入空闲状态。
4)当EU执行转移类、调用及返回类指令时,EU将不再用指令队列中顺序装入的指令。此时指令队列中原有的内容被自动清除,而BIU会接着将另一程序段的指令装入指令队列。
EU和BIU这种并行的工作方式极大地提高了CPU的工作效率。
(4)寄存器的结构
1)数据寄存器AX、BX、CX、DX均为16位的寄存器,它们中的每一个又可分为高字节H和低字节L。即AH、BH、CH、DH及AL、BL、CL、DL可作为单独的8位寄存器使用。
不论16位寄存器还是8位寄存器,它们均可寄存操作数及运算的中间结果。有少数指令指定某个寄存器专用,例如,串操作指令指定CX专门用作记录串中元素个数的计数器,不可用其它寄存器代用。
2)指针寄存器和变址寄存器SP、BP、SI、DI。这组寄存器在功能上的共同点是在对寄存器的操作数寻址时,用以形成20位物理地址中的偏移地址。在任何情况下,它们都不能独立地形成访问内存的地址码。
SP称作堆栈指针,当进行堆栈操作时,SP用于存放操作地址的段内偏移地址,其段地址用SS提供。
BP称作基址指针。常在间接寻址方式中出现,一般,其段地址由SS提供。
SI和DI分别用来存放字符串处理时,源操作数段内偏移地址和目标操作数段内偏移地址。故分别称作源变址寄存器和目标变址寄存器。在非字符串处理时,两者功能相似。这两个寄存器主要用来存放地址,但也可存放数据。
3)段寄存器组:CS、DS、SS、ES。8086/8088的20位物理地址在CPU内部要由两部分相加形成的。SP、BP、SI、DI是用以指明其偏移地址,即20位物理地址的低16位;而CS、DS、SS、ES是用以指明20位物理地址的高16位的,故称作段寄存器。
4个存储器使用专一,不能互换,CS识别当前代码段,DS识别当前数据段,SS识别当前堆栈段;ES识别当前附加段。一般情况下,DS和ES都须用户在程序中设置初值。
4)控制寄存器组:IP和FLAG。指令指针IP相当于一般微机中的程序记数器PC,用以指明当前要执行指令的偏移地址(段地址由CS提供),用户不可随意改变其值,某些指令如转移,过程调用及返回指令等将改变IP的内容。在用DEBUG调试程序时,可通过调试命令改变其值。
标志寄存器FLAG有16位,用了其中的九位,分两组:状态标志和控制标志。前者用以记录状态信息,由6位组成,后者用以记录控制信息由3位组成。6位状态标志,包括CF、AF、OF、SF、PF和ZF,它反映前一次涉及ALU操作的结果,对用户它“只读不写”。控制标志包括方向标志DF,中断允许标志IF及陷阱标志TF,中断允许标志IF及陷阱标志TF,可通过指令设置。
2 、存储器组织和I/O组织
1)8086/8088有20根地址线,可寻址的存储器空间为1MB,而其指令系统中大部分指令仅涉及16位地址,这就减少了指令长度,提高了执行程序的速度。为了能找到20位物理地址,CPU内部提供了段地址和偏移地址寄存器。物理地址=段地址×16+偏移地址。
2)由于物理地址的计算方法是固定不变的,因此,同一个物理地址可以由不同的段地址和偏移地址组成。
3)实际应用中,段间可以允许相互覆盖。
4)8086/8088中,1MB存储空间是按字节编址的。字节型数据可置于偶数或奇数地址内,字型或双字型数据则规定低位字节放在低地址,高位字节放在高地址。允许字或双字从任何地址开始存放。若起始地址为偶数,称为规则字,否则为非规则字。非规则数存放将增加访问时间。因此,对于8086在存放数据时,尽量从偶地址开始。
5)I/O端口的寻址用地址总线的低16位,因此,可访问的8位I/O端口有65536个,若两个I/O地址相邻,则可组成一个16位的I/O口。
IBM PC机只使用了A0~A9共10条地址线作为I/O端口编址。故最多可有1024个8位端口地址。
3、CPU外总线
总线是一组能为多个部件分时共享的公共信息传送线路,共享是指总线上可以挂接多个部件,各部件之间相互交换的信息都可以通过这组公共线路传送。分时是指同一时刻总线上只能传送一个部件的信息。8086/8088CPU也采用了总线方式与存储器,I/O接口等沟通。
8086/8088 CPU外总线包括地址总线(AB),数据总线(DB)及控制总线(CB),其中,AB、DB及部分CB均采用三态缓冲器式总线电路,总线电路的这种三态性,既保证了在任何时候只允许此刻进行信息交换的设备占用总线电路,其他设备与总线“完全隔离”,不会影响正常的信息传送,又为其他快速信息传送方式(如DMA)提供了必要的条件,总线的三态性是所有的微处理器的共性。
4、8086/8088 CPU引脚的特点
1)地址/数据线的分时多用特性
8086的数据总线和低16位地址总线是采用分时复用的(8088分时复用的地址数据线仅有8位)。当执行存储器读写或I/O读写,在CPU总线周期的T1状态时,作地址总线输出(A15~A0),在其他状态均作为双向数据总线使用。地址总线的高4位A19~A16也是复用线,但他们是地址/状态复用线。为了使地址信息在整个总线周期中均保持有效地址,必须设置地址锁存器把T1状态上输出的20条地址信息进行锁存。
2) ——BHE/S7引脚与8086存储器结构
8086的存储体由奇地址和偶地址两个存储体组合而成。每个存储体各占512KB, ——BHE作为奇地址存储体片选信号,A0作为偶地址存储体片选信号。
偶地址存储体数据线和低8位数据总线相连,奇地址存储体和高8位数据总线相连,这样就决定了:若A0=0, ——BHE=0(两体都选中),则可在一个总线周期内读/写一个规则字;若 ——BHE=1、A0=0(只选中一体),则只能从存储器中读/写一个字节数据,且只能通过D7~D0进行传递,反之 ——BHE=1、A0=1,则只从奇存储体读出一个字节,故必须通过D15~D8传递。因此,一个非规则字必须先用一个总线周期读/写奇地址存储体,然后再用一个总线周期读/写偶地址存储体。这主要是因为 ——BHE与A0的有效时间与操作指令有关。
8088中,由于数据总线8位,每个总线周期只能完成一个字节的操作,不存在上述问题,CPU也没有 ——BHE引脚。
3)复位引脚RESET
RESET是外部作用于CPU的信号,高电平有效,脉宽不低于4个时钟周期,上电脉宽应大于50us.
第三章 8086/8088指令系统
1 8086/8088的寻址方式
指令中用以说明操作数所在地址的方法为寻址方式
直接由指令给出的操作数称为立即数。相对寻址方式成为立即寻址
操作数在CPU的内部寄存器中,相应的寻址方式称为寄存器寻址。
操作数在寄存器中,相应的寻址方式称为存储7寻址,包括直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。
寻址方式中找reat321到的地址的是指令所需的偏移地址(或称为有效地址EA)。
下面仅说明几种寻址方式
(1) 寄存器间接寻址:有效地址是BX、BP、SI和DI中的内容,寄存器由指令给出。

(2) 寄存器相对寻址:有效地址是一个8位或16位的位移量与一个基址或变址寄存器的内容之和,位移量和寄存器均由指令给出。

(3) 基址变址寻址:有效地址是一个基址寄存器的内容之和。

(4) 相对基址变址寻址:有效地址是一个8位或6位的位移量,一个基址寄存器和一个变址寄存器三部分之和。

上述四种寻址方式,段地址依使用寄存器不同而不同,用BX、SI、DI间接寻址时,默认的段寄存器为DS,用BP间接寻址时,默认的段寄存器为SS。
2 数据传送类指令
(1)通用传送指令,包括基本传送指令MOV,堆栈指令PUSH和POP以及数据交换指令XCHG,使用MOV指令应注意源操作数和目的操作数的位数要保持一致,使用堆栈指令时,要注意这是一种字操作,每压栈一次,SP的内容就减2,每弹栈一次,SP的内容就加2,另外以上指令不能改变CS和IP寄存器的值。
(2)累加器专用传送指令:包括输入,输出指令IN、OUT和换码指令XAT,这类指令由于对累加器采用了固定的寻址方式(隐含寻址),如IN、AX、DX指令中的DX就表示的是
寄存器间址的外设地址而不是一个寄存器寻址。
(3)地址传送指令:包括LEA、LDS、LES。这组指令完成把存储单元的地址或内容送入特定的寄存器。
(5) 标志传送指令:包括:LAHF、SAHF、PUSHF、POPF。该组指令主要用来获取标志寄存器的值或改变标志寄存器的值,是通过AH或堆栈实现。
3 算术运算指令
(1) 这类指令用以完成加,减,乘除等算术运算,执行后影响状态标志。
(2) 这类指令可处理4种类型的数据:无符号二进制,带符号的二进制数
无符号的压缩BCD码和无符号的非压缩的BCD码。不同类型的数据完成相同操作时所用懂得指令基本相同(乘/除法除外)只是在这些指令执行后所进行的判断或调整指令不同而已,例如实现不同类型数据的加法运算,使用ADD指令,对无符号数的结果是否溢出的判断检测的是CF位,对于有符号数检测的则是OF位,对于非压缩BCD码相加后还要使用AAA,而对于压缩的BCD码使用的是DAA,在编程中,应严格区分数据类型。
(3) ADC和SBB指令是专为实现多字节数加减而提供的指令
(4) 执行CMP指令后

4 逻辑运算指令
包括AND、OR、NOT、XOR和TEST指令,所有指令都是各位独立操作,操作数可以是字节或字,这些指令一般用于,通过选用不同的源操作数的各位代码(或称逻辑尺),使目的操作数的某些位置1,清0或测试目的操作数的某些位,一般对某些位置1用OR指令对某些位清0用AND指令,对某些位取反则用XOR指令。
5 移位指令和循环指令
包括算术移位,逻辑移位和循环移位指令。逻辑移N位相当于把无符号二进制目的操作数乘以或除以2n,算术右移n位相当于把带符号二进制目的操作数除以2n。循环移位在移位时移出的位并不丢失。而循环送回目的操作数的另一端。移位指令结合带进位循环移位指令可实现多字节或多字的移位,当移位数大于1时,要应用CL设置移位次数,注意执行移位指令后,CL的内容不变。
6串操作指令
串操作指令就是对一个字符串进行传送,比较,查找,插入,删除等处理,它可以对字节或字进行操作,最大可处理64KB长度字符串,若在这些指令前加一个专用的单字节的重复前级指令,可使硬件自动重复执行该指令,这样使处理较长字符串时比用循环程序处理快得多。
所有字符串指令前,要先给SI、DI以及DF赋值。SI用于源操作数的间址,DI用于目的操作数的间址,DF规定字符串处理方向,DF=0表示向地址递增方向,DF=1表示向地址递减方向。 每次处理字符串中的一个元素,SI、DI内容自动+1或+2。当进行串重复操作时还必须把重复操作次数预置到CX中
7 控制转移指令
(1) 对于CALL、JMP指令,寻找的目的不是操作数地址而是程序存储器的地址,因此这类指令可以改变CS和IP中的值,即改变程序走向。
1)直接程序存储器寻址
这种寻址方式,指令中含有转移地址,例如:如果程序转移到10000H,转移地址100000H以逻辑地址的形式跟在操作码后面存储到存储器中,显然需要拥个字节来存放逻辑地址1000:0000H。转移指令将0000H装入IP,将段地址1000H装入CS。直接转移通常叫做远转移,因为它能够转移到存储器的任何位置。
2)相对存储器寻址
相对意味着相对于指令指针IP。这种寻址方式中,指令直接给出一个到符号的8位或者16位位移量,指令转向的有效地址为当前IP内容于位移量之和。8位的位移量(短转移)具有相对于下条指令+127到+128字节的转移范围,而16位的位移量(近转移)具有+32K字节的范围。
3)间接程序存储器寻址
对于CALL和JMP指令,微处理器允许几种间接程序存储器寻址形式,下表列出了一些可接受的间接程序转移指令,它们能够用16位寄存器(AX、BX、CX、DX、SP、BP、DI、SI)中的一个。任何带有位移量的相对寄存器([BX]、[BP]、[DI]、[SI])。

(2) 条件转移指令
条件转移指令比无条件转移指令多了一个条件判断功能,条件转移指令的条件主要是根据标志位来判别的。条件转移指令采用短转移,即采用8位的相对寻址方式。
可分为:但标志位的条件转移,由5个状态标志位ZF、SF、CF、OF、PO、PF的0和1状态作条件,用于无符号数比较的条件转移;用于带符号数的条件转移。
(3) 循环控制指令
循环控制指令用来管理程序循环的次数,它用CX的内容是否为0作为转移条件,或CX的内容是否为0与ZF标志给合作为转移条件,这些指令也采用8位相对寻址方式。
(4) CALL指令
调用指令CALL的功能是先将断点地址(当前IP 或IP与 CS)压入堆栈,再把子程序入口地址装入IP或IP与CS中。RET指令应为子程序的最后一条指令。CPU执行RET指令时,会从堆栈中弹出断点地址,重新装入IP或IP与CS中,从而达到返回主程序的目的。带偏移量的返回指令RETn(n为偶数)的功能除完成相应的RET功能外,再使SP的值加上不带符号的n值。
8处理器控制类指令
第四章 汇编语言及汇编程序设计
1 汇编语言的语句格式
汇编语句分指令语句和汇编命令语句.
指令语句格式:
(标号:) 助记符 (操作数) (;注释)
其中()中的内容表示是可以省略的,多个操作数间以逗号隔开.
汇编命令语句(伪指令)不汇编成机器代码,它仅在汇编过程中告诉汇编程序应如何编译.
2 伪指令
伪指令共有20条,常用有以下几条:
(1) 赋值伪指令EQU、=使用EQU、=指令可用标号来代表数据,数据地址或程序地址。
(2) 定义变量(分配存储单元)伪指令DB,DW,DD,DQ,DT 注意当以多字节方式定义数据时,应注意数据是按低位在前,高位在后存放的。
(3) 定义存储单元指定数据类型PTR 不能单独使用。而是和指令结合起来使用,对存储单元指定数据类型。
(4) 段定义伪指令SEGMENT/ENDS 主要用来定义段的名称和范围,还可以指明段的定位类型、连接方式和分类名。格式为:
段名 SEGMENT [定位类型][连接方式][分类名]
…
…
段名 ENDS
当定义数据段、附加数据段、堆栈段时,在段中只能包括伪指令语句,不能包括指令语句。
(5)起始定位伪指令ORG 用来规定目标程序或数据存放单元的偏移量。该指令面前不能带标识符。
(6)段寄存器说明伪指令ASSUME 用来告诉汇编程序在指令执行期间内存的哪一段是数据段、哪一段是代码段、哪一段是堆栈段。ASSUME伪指令只能安排在代码段内的开始。
(7)定义过程的伪指令PROC/ENDS 其格式:
结构名 STRUC
<数据定义>
…
结构名 ENDS
结构定义并不保留任何存储空间,也不为任何存储单元赋值,即必须使用结构分配伪指令。起格式:
[变量名] 结构名 <字段值表>
(9)源程序结束的伪指令END 该指令表明了源程序的终结。
3、标号、变量及表达式
标号是用符号表示的地址。它有段属性、偏移地址属性的距离属性。
段属性表示指令代码所在的逻辑段;偏移量属性表示指令首字节在段内的偏移地址;距离属性包括近距离属性NEAR和远距离属性FAR。在转移和调用指令中常将标号作为转移目的地址使用。
4、宏指令
格式为:
宏指令名 MCRO <形式参数>
…
…
…
其调用格式为:宏指令名 <实际参数>。
当具有宏调用的源程序被汇编时,每个宏调用将被MASM进行宏展开。宏展开实际上是用宏定义是设计的宏体去代替相应的宏指令名,并且用实际参数——取代形式参数。
5、分支程序设计
程序的分支主要是靠条件转移指令来实现。
![]()
![]()
|
|
条件满足? |

|
条件满足? |

|
|
编程是先确定那个分支是顺序执行,另一分支就是转移,它由条件转移指令去实现。
6、循环程序设计
循环程序用于某些需要重复进行的操作,主要使用循环控制指令LOOP、LOOPNZ或条件转移指令。循环程序主要由循环初始化、循环体和循环控制三部分组成。
循环初始化主要指设置循环次数初值以及其他为能使循环体正常工作而设置的初始状态。
循环体是循环操作部分,包括循环的工作部分及修改部分。循环的工作部分是实现程序功能的主要程序段;循环的修改部分是指当程序循环执行是,对一些参数如地址变量的有规律修正。
循环控制部分是循环程序设计的关键。每个循环程序必须选择一个控制循环程序运行和结束的条件。若循环次数已知,利用循环控制计数器控制循环的结束,若循环次数未知,应有另一条件作为控制结束的标志。
7、子程序设计
(1) 过程的定义格式为:
过程名 PROC[属性]
…
RET
过程名 ENOP
调用过程时只要在CALL指令后写上该过程名即可.属性字段用来指明过程的类型属性为NEAR或FAR。RET指令总是放在过程体的末尾,用来返回主程序。
(2) 主程序调用过程时,必须先把过程所需的初始数据(入口参数)设置好,过程执行完毕返回主程序时也必须将过程运行所得结果(出口参数)送给主程序。过程入口参数的传入和出口参数的送出称为主程序和过程间的参数传送。
第五章 存储器

今年来,FLASH ROM 也得到广泛应用
2、半导体存储器的主要性能指标
存储容量
存储容量是指每个存储芯片所能存储的二位制位数。即存储芯片=芯片地址单元数×数据线位数。微型计算机中的存储器多以字节编制,故微型计算机容量通常以字节(8位)为单位。
3、随机存取存储器RAM
对使用者来说,主要是关心RAM芯片的引线及其使用。RAM的引线可用右图表示。
(1) 地址线A0~An:其位数决定了芯片的可寻址范围为2n。
(2) 数据线DB:有1,4,8条结构,若1条称为位片。
(3) 控制线:一般有芯片选择信号、读/写控制信号。对动态RAM还有行、列地址选通信号。读/写控制信号:分别表示读、写操作,但不少芯片只有一条,由高、低电平分别表示读/写。
芯片控制信号:一般由CPU的高位地址线经过译码产生。它与芯片容量及组成的存储器容量密切相关。
动态存储器(DRAM)集成高度,在存储容量较大的计算机中得到广泛应用。DRAM由于它是靠电荷存储信息,因此须对其不断刷新。对DRAM的刷新实质是进行一次“写入”操作,但它是按行进行的,不管存储容量有多大,每次刷新对所有芯片的同一行。组成DRAM存储器时,除了必须提供刷新工作的时序控制外,其他的与SRAM类同。
4、只读存储器ROM(EFROM)
EPROM常用来固化程序,常熟或作为函数库,字符等。
EPROM外部引线如右图所示。
(1) 地址线A0~An:与RAM一样,其位数决定了芯片的可寻址范围。
(2) 数据线DB:通常为8位。
(3) 正常读出操作的电源Vcc和地线。
(4) 控制信号:片选(常用CS或CE表示),无论芯片正常读出或编程均应使其有效:允许读出信号(常用OE表示),正常读出或编程后校验时使用;编程脉冲(常用PGM表示),是编程时的脉冲输入端,脉冲宽度为45~55ms;编程电源(Vpp),正常读书与Vcc同。编程时则根据厂家和型号正确选择电压(一般21,12.5V等)。
EPROM芯片在紫外线照射下,将会写入内容全部擦除,这时全部二进制位为“1”状态。
5、存储器与CPU的连接
1)主存储器容量的扩展
根据存储器所要求的容量和选定的存储芯片的容量,可以计算出总的芯片数:
总片数=总容量/(容量/片)
当单个存储器芯片的容量不能满足系统要求时,需要多片组合起来以扩展字长或字数。
l 位扩展:指仅在位数方向扩展,而芯片的字数和存储器的字数是一致的。位扩展的连接方式是将各芯片的地址线,片选和读/写线并联起来,而将各芯片的数据线单独列出。
l 字扩展:指仅在字数方向扩展,而位数不变。字扩展将芯片的地址线,数据线,读/写线并联,由片选信号来区分各个芯片。
l 位和字同时扩展:这是两种扩展的组合。
在选择芯片,一般应尽可能使用集成度高的芯片来满足总的存储容量要求。
2)存储芯片的地址分配和片选
CPU要实现对存储单元的访问,首要选择存储芯片,即进行片选,然后再从选中的芯片中依地址而选中存储单元,称字选。片内的字选由CPU送出的n条低位地址线完成,而片选则通过高位地址得到的,实现片选的方法有:
(1) 线选法:用除片内寻址外的高位地址直接(或经反响器)分别接至各个存储芯片的片选端。当然,这些片选地址每次寻址时只能有一位有效,才能保证每次只选中一个芯片。
(2) 全译码法:将片内寻址外的全部高位地址线作为地址译码器的输入,把译码器后的输出作为各芯片的片选信号,将它们分别接到存储芯片的片选端,以实现对存储芯片的选择。
全译码法的优点是每片(组)芯片的地址范围是唯一的,而且是连续的,不会产生重叠的存储区,但线路较复杂。
(3) 部分译码:即将片内寻址的高位地址线的一部分译码产生片选信号,而高位地址的其它部分往往为允许译码的条件。如果系统不要求CPU可直接寻址全部存储单元,可使用这种方法。
3)主存和CPU之间的硬件连接
(1)主存与CPU之间的硬连接
主存与CPU硬连接有三组连线,即AB,DB和CB。存储器地址寄存器(MAR)和存储器数据寄存器(MDR)是主存与CPU之间的接口。MAR和MDR从功能上看属主存,但在微型机中常放在CPU内。
(2)CPU总线的负载能力
当CPU总线上挂接的器件均为MOS器件且数量不多时,一般不会超载,当总线上挂接的器件过多可能使CPU超载时,必须在总线上增加缓冲器和驱动器。
(3)CPU对主存的基本操作
第六章 输入输出及DMA控制器
1、 基本概念
1) I/O 接口电路是介于主机和外设之间的一种缓冲电路,接口电路使外设与总线隔离,起缓冲,暂存数据的作用,并协调主机和外设间数据传送速度不匹配的矛盾。
2) 一个接口一般含有几个端口,CPU通过指令向端口存或取信息,端口主要有三类,状态口,命令口和数据口,每个端口对应一个地址,CPU通过不同的地址的访问来区别状态信息,数据信息和命令信息。
3) CPU对I/O端口的编址方式分统一编址和独立编址两大类,统一编址的优点是无须专门的I/O指令,访问I/O和访问内存一样,具有丰富的寻址方式,丹这种寻址方式使I/O端口占用一部分存储空间,独立编址要求CPU有专用的I/O指令,8086/8088CPU组成的系统采用独立编址方式,地址线16根,即A15-A0可寻址65536个8位I/O端口。
2、 CPU与外设之间数据传送方式
一般可分为:程序控制方式、中断控制方式、直接存储器存取方式。
程序控制方式是指在程序的编制中利用I/O指令来执行输入/输出的一种方式(CPU处主动地位)。这种方式还可以分为无条件传送方式与条件传送方式(程序查询)。
中断控制方式利用输入输出,每传送一次数据就需中断一次CPU(外设于主动地位)。因此,较适合少量数据的场合。
直接存储存取方式(DMA)是在存储器与I/O设备间直接传送数据,是一种完全由硬件完成I/O操作的方式。
3、 DMA控制器8237
1) DMA控制原理(工作过程)
(1) 外设向DMA控制器发出DMA请求;
(2) DMA控制器向CPU发出总线请求信号;
(3) CPU执行完现行的总线周期后,向DMA控制器发出响应请求的回答信号;
(4) CPU将控制总线,地址总线及数据总线让出,由DMA控制器进行控制;
(5) DMA控制器向外部设备发出DMA请求回答信号;
(6) 进行DMA传送;
(7) 数据传送完毕,CPU重新控制总线。
2) 可编程DMA控制器8237A
(1) 8237A内部的基本结构
DMAC8237A主要由命令寄存器、状态寄存器、读/写逻辑、控制逻辑和4个结构完全相同的DMA通道组成。
l 命令寄存器和状态寄存器,都是8问,四通道共用。
l 当8237A在系统总线中处于从属状态时,读写逻辑用来接收由CPU输入的读写控制信号和端口地址等信息;当8237A处于主控状态时,则通过它发出读写控制信号和地址信息。
l 控制逻辑主要用来向CPU发出总线请求(HRQ),得到CPU认可(HLDA)进入主控状态后,由它发出各种控制信号。
l 四个通道的结构完全一样,通道内基本地址寄存器和当前地址寄存器合用一个端口,基本字节计数器合当前字节计数器合用一个端口地址,当CPU写入操作时,上述两组寄存器可同时得到相应的数值,但基本地址寄存器合基本字节计数器是不能被读出的。由于他们均为16位寄存器,因此高低字节的读写由先后触发器的状态决定。通道中的方式寄存器由编程写入,由方式控制字最低两位(D1、D2)状态决定所选通道。
(2) 8237A的四种数据传送方式;
l 字节传送方式:每申请一次总线请求仅传送一个字节
l 块传送方式:8237A由DREQ启动后连续传送数据(内部进行地址修改及字节技术),直至全部数据传送结束或由EOP终止DMA。
l 请求传送方式:连续传送过程中有以下情况之一即终止传送:a)字节计数器为零;b)外界EOP信号产生;c)外设数据已传送完。
l 级连方式:多片8237A组成主从式DMA时使用
(3) 8237A的编程控制字
8237A所有工作均可通过编程完成,它共有6中控制和状态字,包括命令字、方式字、请求字、屏蔽字、综合屏蔽字和状态字。请看教材。
第七章 中断系统和中断控制器8259A
1、 中断概念
1) 中断的过程:中断请求、中断排队、中断响应、中断处理、中断返回。
2) 在中断的响应周期中,CPU自动完成的操作有:
(1) 发出中断响应信号
。
(2) 关中断,即是使IF=TF=0。
(3) 将断点地址、状态字PSW压入栈。
(4) 将程序传至中断处理程序首址。
3) 中断处理程序一般包括保护现场、中断服务、恢复现场、中断返回指令IRET完成断点地址和状态字PSW的恢复。
4) CPU对中断优先处理的原则为:
(1) 不同级的中断同时发生,安优先级高低依次处理。
(2) CPU在中断过程中,若有更高优先级中断请求,则暂停低级中断处理,转向处理高级中断,待高级中断处理完毕,返回继续处理低级中断,直至中断全部处理完返回原程序。
(3) 若在CPU中断处理过程中,有同级或低级中断请求,则等当前中断处理完后,再响应。
(4) 若同等优先级的中断同时请求,则按预先规定的次序逐一处理。
2、 8086/8088的中断系统
1) 中断类型
(1) 外部中断
由两条外部中断申请线,NMI和INTR引起的中断叫外中断。NMI是边缘触发方式,要求高电平的有效时间宽度大于2个时钟周期。NMI一般用在灾难性事件中,请求信号不受IF影响,优先权较高,其类型码为2。
INTR来自中断控制器8259A,要求高电平保持时间应维持到当前指令结束,外设产生的中断的优先级别由8259A管理产生,CPU根据IF的状态决定响应INTR与否。
(2) 内部中断
内部中断是CPU根据软件中某条件指令或软件对标志寄存器中某标志的设置而产生的,与硬件电路无关,分两类:一是内部已设置好的有类型0、1、2、3;另一类是双字节中断指令INT N。N即为类型码,是用户根据需要设置的。(CPU根据中断类型码N即可找到中断服务程序的入口。)
内部中断的特点:
(1) 中断类型码包括在指令中或是预定的;
(2) 不执行中断的响应周期;
(3) 除单步中断外,内部中断均不屏蔽;
(4) 除单步中断优先权最底外,所有内部中断优先权均高于外部。
2) 中断向量表
中断向量即中断服务程序入口地址。中断向量表设置在RAM最底端的1024单元内。中断类型码共有256种。每个中断向量占用4个字节,其中底位2个字节为中断服务程序入口地址的偏移量,高位2个字节位中断服务程序的段基址。中断类型码乘以4,即可得到中断服务程序人口地址第一个字节的地址。
3) 各类中断的响应过程
CPU对各类中断的响应不完全相同,主要区别在于如何获得中断类型码。
(1) 可屏蔽中断的响应过程
a) 外设向8259A发中断请求信号,经8259A处理;形成相应中断类型码,并向CPU申请中断(INTR=1)。
b) CPU在当前指令结束后,当IF=1,且没有内部中断,NMI=0,HOLD=0时,发生中断响应信号
c) 8259A连续两个总线周期接收到两个
的负脉冲的中断响应信号,则通过数据总线将中断类型码送CPU,CPU把其乘以4作为中断向量表的地址指针。
d) CPU保护断点,将PSW及当前CS和IP压栈。
e) 清IF和TF标志。
f) 查中断向量表,取出中断向量(中断处理程序首址),将其分别置入IP和CS中,程序转入中断处理程序。
(2) 非屏蔽中断的响应过程。
中断请求在NMI端加入,等待当前指令结束后,CPU优先响应NMI,其类型码2由硬件决定,其他预INTR相同。
其特点是:
a) 中断类型码由指令给定或由硬件决定。
b) 没有
响应周期。
c) 不受IF影响。
d) 除单步中断外,其他内部中断优先于外部中断,响应过程与非屏蔽中断类似。
3、 中断控制器8259A
8259A是一种可编程的中断控制器,用于实现中断优先管理,中断屏蔽。单片可处理8级优先级中断,级联最多可处理64级中断。编程时有4个初始化命令字ICW1~ICW4和三个操作命令字OCW1~OCW3.在使用8259A时,首先要对其编程。一般情况下,初始化命令字一旦设定,工作过程中就不再改变,操作命令字则是由应用程序设定的,用于对中断处理过程动态控制。
8259A的工作方式:
1) 设置优先级方式
按优先级设置方法可有如下四种方式:
(1) 全嵌套方式
这是8259A的默认方式。在此方式下,中断请求按0~7优先级进行处理。当一个中断被响应,即把相应的中断类型码置于DB上,同时ISR对应位置1,并保持至CPU发出EOI命令。
(2) 特殊全嵌套方式
此种方式多用于多片级联且必须将响应的中断优先级保存在各从片的大系统中。此时特殊全嵌套方式仅设置在主片中。它和全嵌套方式基本相同,所不同的是在特殊全嵌套方式下,当处理某一级中断时,可响应同级的中断请求,从而实现对同级中断请求的特殊嵌套。
(3) 优先级自动循环方式
这种方式一般用在系统中多个中断源优先级相等的场合。这种方式下,优先级队列不是固定不变的,一个设备得到中断服务后,其优先级自动译为最低。而初始优先级从高到底队列规定为IR0、IR1、…IR7。
(4) 优先级特殊循环方式
这种方式与(3)的区别是初始优先级可通过编程指定最低优先级。
2) 屏蔽中断源的方式
1) 普通屏蔽方式:通过OCW1使IMR中的一位或若干位置1来相应地屏蔽掉对应为的中断级。
2) 特殊屏蔽方式:提供OCW2的D6D5=11来设定,此时除OCW1中置1为对应的中断级被屏蔽外,置0的这些的中断级,无论其中断级别如何都可被响应。由此可见,这种方式总是在中断服务程序中使用,此时尽管CPU仍在处理一个高优先级中断,但底优先级的中断请求仍可以得到响应。
3) 结束中断的处理方式
在8259A中,当一个中断得到响应时,会使其相应的ISR位置1,而当中断服务结束时,应使相应复位,这称为中断结束处理。
8259A有两种中断结束方式:
(1) 自动中断结束方式,仅用在多个中断不会嵌套的单片系统,只要使ICW4的D1=1,即处于这种方式下,当CPU进入中断过程,8259A就自动将ISR中相应位清0。
(2) 当ICW4的D1=0,8259A即处于非自动中断方式,此时必须在中断服务程序之前发EOI命令以便把ISR中相应位清0。EOI命令由操作命令字OCW2发送。EOI命令有两种方式:
A) 若为全嵌套方式,发普通EOI命令(OCW2=20H)。
B) 若为特殊全嵌套方式或优先级循环方式,由于ISR无法确定响应的是哪一级中断,必须发特殊的EOI命令指定其复位ISR中的对应位。若8359A工作在级联方式,有可能需要送两个EOI命令,一个送从片,一个送主片。
4) 连接系统总线方式
在多片级联的系统中,要求数据总线有总线缓冲器。此时用
=0启动缓冲器工作,由ICW2中D3来对主片及从片同时设定。若系统中只有单片8259A,一般不需要总线缓冲器,此时
=1。
5) 中断请求方式
(1)边沿触发方式:以正跳转沿向8259A请求中断,上跳沿后可一直维持电平平。
(2)电平触发方式:以高电平申请中断。注意在响应中断后必须及时把申请中断线变为低电平,以防止上次中断。
(3)中断查询方式:这是一种用软件查询中断请求位状态,从而确定中断源的方式。这种方式的特点是外设仍通过8259A申请中断,但8259A却不使用INT信号向CPU申请中断。CPU中IF=0,CPU执行IN指令得到查询字,查询字说明当前有否中断请求,若有可得到申请申请中断优先级最高的中断源。
中断列表
中断INT 21H :
1、字符功能调用类(Character-Oriented Function)
01H、07H和08H — 从标准输入设备输入字符
02H — 字符输出
03H — 辅助设备的输入
04H — 辅助设备的输出
05H — 打印输出
06H — 控制台输入/输出
09H — 显示字符串
0AH — 键盘缓冲输入
0BH — 检测输入状态
0CH — 清输入缓冲区的输入功能
(1)、功能01H、07H和08H 功能描述: 从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾
入口参数: AH=01H,过滤掉控制字符,并回显
=07H,不过滤掉控制字符,不回显
=08H,过滤掉控制字符,不回显
出口参数: AL=输入字符的ASCII码
(2)、功能02H
功能描述: 向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满
入口参数: AH=02H
DL=待输出字符的ASCII码
出口参数: 无
(3)、功能03H
功能描述: 从辅助设备读入一个字符,该辅助设备的缺省值为COM1
入口参数: AH=03H
出口参数: AL=读入字符的ASCII码
(4)、功能04H
功能描述: 向辅助设备输出一个字符,该辅助设备的缺省值为COM1
入口参数: AH=04H
DL=待输出字符的ASCII码
出口参数: 无
(5)、功能05H
功能描述: 向标准的输出设备输出一个字符。该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变
入口参数: AH=05H
DL=待输出字符的ASCII码
出口参数: 无
(6)、功能06H
功能描述: 控制台(如:键盘、屏幕)输入/输出。如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满
入口参数: AH=06H,DL=输入/输出功能选择
出口参数: 若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;
若DL=0FFH,则此功能为输入,此时:若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码
(7)、功能09H
功能描述: 输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满
入口参数: AH=09H
DS:DX=待输出字符的地址
说明:待显示的字符串以’$’作为其结束标志
出口参数: 无
(8)、功能0AH
功能描述: 从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数: AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
1、第一个字节为缓冲区的最大容量,可认为是入口参数;
2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
3、从第三个字节开始存放实际输入的字符串;
4、字符串以回车键结束,回车符是接受的最后一个字符;
5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
BUFF 80, ?, 80 DUP(?) ;最多接受80个字符
出口参数: 无
(9)、功能0BH
功能描述: 检查标准输入设备上是否有字符可读。该输入操作可被重定向
入口参数: AH=0BH
出口参数: AL=00H——无字符可读;FFH——有字符可读
(10)、功能0CH
功能描述: 清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向
入口参数: AH=0CH
AL=01H、06H、07H、08H或0AH
出口参数: 若入口参数AL为0AH,则DS:DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码
2、目录控制功能(Directory-Control Function)
39H — 创建目录
3AH — 删除目录
3BH — 设置当前目录
47H — 读取当前目录
(1)、功能39H
功能描述: 用指定的驱动器和路径创建一个新目录
入口参数: AH=39H
DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
出口参数: CF=0——创建成功,否则,AX=错误号(03H或05H),其含义见错误代码表
(2)、功能3AH
功能描述: 删除指定的驱动器和路径的目录
入口参数: AH=3AH
DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
出口参数: CF=0——删除成功,否则,AX=错误号(03H或05H),其含义见错误代码表
(3)、功能3BH
功能描述: 用指定的驱动器和路径设置为当前目录
入口参数: AH=3BH
DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
出口参数: CF=0——设置成功,否则,AX=错误号(03H),其含义见错误代码表
(4)、功能47H
功能描述: 取当前目录的完全路径字符串
入口参数: AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址
出口参数: CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表
3、磁盘管理功能(Disk-Management Function)
0DH — 磁盘复位 2EH —设置校验标志
0EH — 选择磁盘 36H —读取驱动器分配信息
19H — 读取当前驱动器 54H —读取校验标志
1BH, 1CH — 读取驱动器数据
(1)、功能0DH
功能描述: 清空当前的文件缓冲区,但在MS-DOS内,暂时写入缓冲区的数据将写入磁盘
入口参数: AH=0DH
出口参数: 无
(2)、功能0EH
功能描述: 指定当前驱动器
入口参数: AH=0EH
DL=驱动器号(0=A,1=B,...)
出口参数: AL=系统中当前的驱动器号
(3)、功能19H
功能描述: 取当前缺省驱动器号
入口参数: AH=19H
出口参数: AL=驱动器号(0=A,1=B,...)
(4)、功能1BH和1CH
功能描述: 获得驱动器的分配信息
入口参数: AH=1BH——为缺省驱动器
AH=1CH——为任意驱动器,DL=驱动器号(0=缺省,1=A,...)
出口参数: AL=0FFH——失败,否则,
AL=每簇的扇区数
DS:BX=ID字节的地址
CX=物理扇区的大小(字节数)
DX=驱动器的簇数
(5)、功能2EH
功能描述: 设置/清除操作系统自动读取检验标志
入口参数: AH=2EH
DL=00H
AL=00H——清除该标志,01H——设置该标志
出口参数: 无
(6)、功能36H
功能描述: 取选定驱动器的信息
入口参数: AH=36H
DL=驱动器号(0-缺省,1=A,2=B,…)
出口参数: 若功能调用失败,AX=0FFFFH,否则,
AX=每簇的扇区数
BX=可用的簇数
CX=物理扇区的大小(字节数)
DX=驱动器中的簇数
(7)、功能54H
功能描述: 读取校验标志
入口参数: AH=54H
出口参数: AL=当前检验标志值:00H—关检验,01H—开检验
4、文件操作功能(File Operation Function)
3CH — 创建文件
3DH — 打开文件
3EH — 关闭文件
41H — 删除文件
43H — 读取/设置文件属性
45H — 复制文件句柄
46H — 重定义文件句柄
4EH — 查找到第一个文件
4FH — 查找下一个文件
56H — 文件换名
57H — 读取/设置文件的日期和时间
5AH — 创建临时文件
5BH — 创建新文件
67H — 设置文件句柄数(最多文件数)
6CH — 扩展的打开文件功能(打开、创建或替换文件)
(1)、功能3CH
功能描述: 用指定的文件名创建一个新文件。如果指定的文件已存在,则设置其长度为0。创建后,该文件是打开的,并返回其句柄
入口参数: AH=3CH
DS:DX=指定文件名字符串的地址(以0为字符串的结束标志)
CX=文件属性(这些标志位可以组合) 位0=1——只读
位2=1——系统
位5=1——归档
位1=1——隐含
位3=1——卷标号
其它位保留不用,并置为0
出口参数: CF=0——创建成功,AX=文件句柄,否则,AX=错误号(03H、04H或05H),其含义见错误代码表
(2)、功能3DH
功能描述: 打开指定的驱动器、路径和文件名,并返回其文件句柄
入口参数: AH=3DH
DS:DX=表明文件的字符串(以0为字符串的结束标志)
AL为打开方式: 位0~2 000—只读方式 001—写方式 010—读/写方式
位3 保留,其值为0
位4~6 共享模式 000—兼容模式 001—不共享 010—拒绝写
011—拒绝读 100—不拒绝任何操作
位7 继承标志——0/1:子进程继承或不继承句柄
出口参数: CF=0——打开成功,AX=文件句柄,否则,AX=错误号(02H、03H、04H、05H或0CH),其含义见错误代码表
(3)、功能3EH
功能描述: 关闭指定句柄的文件
入口参数: AH=3EH
BX=文件句柄
出口参数: CF=0——关闭成功,否则,AX=错误号(06H),其含义见错误代码表
(4)、功能41H
功能描述: 删除指定的文件
入口参数: AH=41H
DS:DX=文件名字符串的地址
出口参数: CF=0——删除成功,否则,AX=错误号(02H、03H或05H),其含义见错误代码表
(5)、功能43H
功能描述: 读取或设置指定文件的属性
入口参数: AH=43H
BX=文件句柄
DS:DX=文件名字符串的地址
AL=00H/01H——读取/设置文件属性
CX=文件属性: 位0=1——只读 位1=1——隐含
位2=1——系统 位3=1——卷标号
位5=1——归档 其它位保留不用,并置为0
出口参数: CF=0——关闭成功,CX=文件属性,否则,AX=错误号(01H、02H、03H或05H),其含义见错误代码表
(6)、功能45H
功能描述: 复制当前打开设备或文件的句柄,该句柄对应同样设备或文件的相同位置
入口参数: AH=45H
BX=待复制的文件句柄
出口参数: CF=0——复制成功,AX=新句柄,否则,AX=错误号(04H或06H),其含义见错误代码表
(7)、功能46H
功能描述: 指定二个句柄,把第二句柄指向第一个句柄,即第二个句柄被重定向
入口参数: AH=46H
BX=文件或设备的句柄
CX=待重定向的文件句柄
出口参数: CF=0——重定向成功,否则,AX=错误号(04H或06H),其含义见错误代码表
(8)、功能4EH
功能描述: 获取第一个与给定的文件名相匹配的文件
入口参数: AH=4EH
DS:DX=给定文件名的字符串
CX=搜索时使用的文件属性: 位0=1——只读 位1=1——隐含
位2=1——系统 位3=1——卷标号
位4=1——目录 位5=1——归档
其它位保留不用,并置为0
出口参数: CF=1——操作失败,AX=错误号(02H、03H或12H),其含义见错误代码表,否则,操作成功,DTA(Disk Transfer Area)按下列方式填入数据: 字节00~14H 保留
字节15H 匹配的文件属性
字节16~17H 压缩的文件名
字节18~19H 压缩的文件日期
字节1A~1DH 文件大小
字节1E~2AH 文件名字符串
(9)、功能4FH
功能描述: 在中断21H的功能4EH成功使用之后,再搜索下一个文件名
入口参数: AH=4FH
AL=返回的代码
出口参数: CF=1——操作失败,AX=错误号(12H),其含义见错误代码表,否则,操作成功,DTA中的数据如前面功能4EH所示
(10)、功能56H
功能描述: 文件换名
入口参数: AH=56H
DS:DX=当前文件名字符串地址
ES:DI=新文件名字符串地址
出口参数: CF=0——操作成功,否则,AX=错误号(02H、03H、05H、11H),其含义见错误代码表
(11)、功能57H
功能描述: 读取/设置文件的日期和时间
入口参数: AH=57H
BX=文件句柄 读取日期和时间 AL=00H
设置日期和时间 AL=01H
CX=时间(0F~0BH:小时,0AH~05H:分钟,04H~00H:2秒的个数)
DX=日期(0F~09H:年(相对1980年),08H~05H:月,04H~00H:日)
出口参数: CF=1——操作失败,AX=错误号(01H、06H),其含义见错误代码表,否则,若是读文件信息,则,CX=时间,DX=日期
(12)、功能5AH
功能描述: 创建临时文件
入口参数: AH=5AH
DS:DX=路径名的地址
CX=文件属性(位可组合),其定义如下: 位0=1 只读 位3-4=0 保留
位1=1 隐含 位5=1 归档
位2=1 系统 位6-15=0 保留
出口参数: CF=0——操作成功,AX=文件句柄,DS:DX=完整的路径文件地址,否则,AX=错误号(03H、04H或05H),其含义见错误代码表
(13)、功能5BH
功能描述: 创建新文件
入口参数: AH=5BH
DS:DX=路径名的地址
CX=文件属性(位可组合),其定义如下: 位0=1 只读 位4=0 保留
位1=1 隐含 位5=1 归档
位2=1 系统 位6-15=0 保留
位3=1 卷标号
出口参数: CF=0——操作成功,AX=文件句柄,否则,AX=错误号(03H、04H、05H或50H),其含义见错误代码表
(14)、功能67H
功能描述: 设置文件句柄数(最多文件数)
入口参数: AH=67H
BX=句柄的数量
出口参数: CF=0——操作成功,否则,AX=错误号,其含义见错误代码表
(15)、功能6CH
功能描述: 扩展的打开文件功能(打开、创建或替换文件)
入口参数: AH=6CH
AL=00H
DS:SI=路径名的地址
BX=打开方式 位2~0 000—只读 001—只写 010—可读、写
位3 保留(0)
位6~4 000—兼容 001—拒绝读写 010——拒绝写
011—拒绝读 100——不拒绝任何操作
位7 0—子进程继承句柄,1—子进程不继承句柄
位12~8 保留(0)
位13 致命错误处理程序,0—执行INT 24H,否则,返回错误代码给进程
位14 写入方式:0—写入缓冲区,1—直接写入文件
位15 保留(0)
CX=文件属性
位0=1 只读 位4=0 保留
位1=1 隐含 位5=1 归档
位2=1 系统 位6-15=0 保留
位3=1 卷标签
DX=打开标志 位3~0 0—打开失败,1—打开文件,2—替换文件
位7~4 0—打开失败,1—创建文件
位15~8 0—保留
出口参数: CF=1——操作失败,AX=错误号,其含义见错误代码表,否则,
AX=文件句柄
CX=1——文件存在,打开之
=2——文件不存在,创建之
5、文件操作功能(FCB)(File Operation Function)
0FH — 打开文件 16H —创建文件
10H — 关闭文件 17H —文件换名
11H、12H — 查找第一个或下一个文件 23H —读取文件的大小
13H — 删除文件 29H —分析文件名
(1)、功能0FH
功能描述: 打开文件,并使之为顺序读/写作好准备
入口参数: AH=0FH
DS:DX=文件控制块的地址
出口参数: AL=00H——打开成功,否则,AL=FFH(如文件找不到)
在MS-DOS操作系统中,文件控制块的字段如下表所示。 字段名 偏移量 字段含义
驱动器字 00H 1 for drive A, 2 for drive B,...
当前块字段 0CH 00H
记录大小字段 0EH 0080H
文件长度字段 10H 文件字节数
日期字段 14H 日期
时间字段 16H 时间
(2)、功能10H
功能描述: 关闭文件
入口参数: AH=10H
DS:DX=文件控制块的地址
出口参数: AL=00H——关闭成功,否则,AL=FFH
(3)、功能11H和12H
功能描述: 查找第一个或下一个相匹配的文件
入口参数: AH=11H——第一个相匹配的文件
=12H——下一个相匹配的文件
DS:DX=文件控制块的地址
出口参数: AL=00H——查找到,否则,AL=FFH
(4)、功能13H
功能描述: 在指定(或缺省)的驱动器中,删除所有相匹配的文件
入口参数: AH=13H
DS:DX=文件控制块的地址
出口参数: AL=00H——删除成功,否则,AL=FFH
(5)、功能16H
功能描述: 在当前目录中创建一个文件,其文件长度为0,并打开该文件,为随后的读/写操作作好必要的准备
入口参数: AH=16H
DS:DX=未打开的文件控制块的地址
出口参数: AL=00H——创建成功,否则,AL=FFH(如:磁盘满)
(6)、功能17H
功能描述: 在指定的驱动器的当前目录中,把所有相匹配的文件换名
入口参数: AH=17H
DS:DX=指定文件控制块的地址
出口参数: AL=00H——换名成功,否则,AL=FFH
(7)、功能23H
功能描述: 在当前目录中查找一个相匹配的文件。如果发现,则用其记录数来更新其文件大小
入口参数: AH=23H
DS:DX=未打开的文件控制块的地址
出口参数: AL=00H——匹配成功,FCB中偏移量为21H的字段被设置为其记录数,否则,AL=0FFH
(8)、功能29H
功能描述: 分析一个字符串(文件名)置入FCB表中的不同字段
入口参数: AH=29H
CX=要写入的记录数
DS:SI=字符串段的地址
ES:DI=FCB的地址
AL=分析的控制标志位 位3=1——
若字符串中有文件后缀,则FCB中的文件后缀将改变
=0—— 若后缀忽略修改,或若分析后无后缀,则FCB中后缀字段被置为“空”
位2=1—— 若字符串中有文件名,则FCB中的文件名将改变
=0—— 若文件名忽略修改,或若分析后无文件名,则FCB中文件名字段被置为“空”
位1=1—— 若字符串中指定了驱动器号,则FCB中的ID字节被修改
=0—— 若ID字节忽略修改,或若分析后没有指定驱动器号,则FCB中驱动器字段被置为0(缺省值)
位0=1——
=0—— 忽略前导分割符
不忽略前导分割符
出口参数: AL=00H—没有通配字符 01H—有通配字符 FFH—驱动器号非法
DS:SI=分析后文件名第一个字符的地址
ES:DI=格式化后的、未打开的FCB地址
6、记录操作功能(Record Function)
1AH —设置数据传输区地址 42H —设置文件指针
2FH —读取数据传输区地址 5CH —文件区域加锁或解锁
3FH —读文件或设备 68H —提交文件缓冲区数据
40H —写文件或设备
(2)、功能2FH
功能描述: 为FCB读/写操作而获取DTA的当前地址
入口参数: AH=2FH
出口参数: ES:BX=DTA的段地址和偏移量
(3)、功能3FH
功能描述: 从先前打开的文件中读出指定数目的字节,并移动文件指针
入口参数: AH=3FH
BX=文件句柄
CX=将要读出的字节数
DS:DX=存放字符的缓冲区地址
出口参数: CF=0——读取成功,AX=读取的字符数,否则,AX=错误号(05H或06H),其含义见错误代码表
(4)、功能40H
功能描述: 向先前打开的文件写入指定数量的字节,并相应修改文件指针
入口参数: AH=40H
BX=文件句柄
CX=写入的字节数
DS:DX=存放数据的缓冲区地址
出口参数: CF=0——关闭成功,AX=写入的字节数,否则,AX=错误号(05H或06H),其含义见错误代码表
(5)、功能42H
功能描述: 设置文件指针的相对位置(相对与文件头、文件尾和当前位置)
入口参数: AH=42H
BX=文件句柄
CX=偏移量的高位
DX=偏移量的低位
AL=00H——从文件头开始的绝对偏移量
=01H——从当前文件指针开始的偏移量(可带符号)
=02H——从文件尾开始的偏移量(可带符号)
出口参数: CF=0——设置成功,DX是指针的高位,AX是其低位,否则,AX=错误号(01H和06H),其含义见错误代码表。
(6)、功能5CH
功能描述: 文件区域加锁或解锁
入口参数: AH=5CH
AL=00H——区域加锁 01H——区域解锁
BX=文件句柄
CX:DX=区域偏移量
SI:DI=区域长度
DS:DX=路径名的地址
出口参数: CF=0——操作成功,否则,AX=错误号(01H、06H、21H或24H),其含义见错误代码表
(7)、功能68H
功能描述: 提交文件缓冲区数据
入口参数: AH=68H
BX=文件句柄
出口参数: CF=0——操作成功,否则,AX=错误号,其含义见错误代码表
7、记录操作功能(FCB)(Record Function)
14H —顺序读 24H —设置相对记录数
15H —顺序写 27H —随机读块
21H —随机读 28H —随机写块
22H —随机写
(1)、功能14H
功能描述: 从文件中读出下一个顺序块,并相应增加文件的指针
入口参数: AH=14H
DS:DX=先前打开文件控制块的地址
出口参数: AL=00H——读取成功 01H——文件尾
02H——段缠绕 03H——部分记录在文件尾
(2)、功能15H
功能描述: 向文件写入下一个顺序数据块,并相应增加文件的指针
入口参数: AH=15H
DS:DX=先前打开文件控制块的地址
出口参数: AL=00H——写入成功 01H——磁盘满 02H——段缠绕
(3)、功能21H
功能描述: 从文件中读出当前选定的记录
入口参数: AH=21H
DS:DX=先前打开文件控制块的地址
出口参数: AL=00H——读取成功 01H——文件尾
02H——取消读操作 03H——部分记录在文件尾
(4)、功能22H
功能描述: 把内存中的数据写入在文件中当前选定的记录
入口参数: AH=22H
DS:DX=先前打开文件控制块的地址
出口参数: AL=00H—写入成功 01H—磁盘满 02H—取消写操作
(5)、功能24H
功能描述: 设置FCB中相对记录数作为被打开FCB中的记录数
入口参数: AH=24H
DS:DX=先前打开文件控制块的地址
出口参数: AL的值被破坏,其它寄存器不受影响,FCB中偏移量21H单元被修改
(6)、功能27H
功能描述: 从文件中读出若干个记录到内存中
入口参数: AH=27H
DS:DX=先前打开文件控制块的地址
出口参数: AL=00H——读取成功 01H——文件尾
02H——取消读操作 03H——部分记录在文件尾
CX=实际读出的记录数
(7)、功能28H
功能描述: 从内存向文件中写入若干个记录
入口参数: AH=28H
CX=要写入的记录数
DS:DX=先前打开文件控制块的地址
出口参数: AL=00H——写入成功 01H——磁盘满 02H——段缠绕
CX=实际写入的记录数
8、内存分配功能(Memory-Allocation Function)
48H — 分配内存块
49H — 释放内存块
4AH — 重定义内存块的大小
58H — 读取/设置内存分配策略
(1)、功能48H
功能描述: 分配一块内存单元,并返回该块内存单元的首地址
入口参数: AH=48H
BX=需要申请的内存单元字节数
出口参数: CF=0——分配成功,AX=存储单元的首地址,否则,AX=错误号(07H或08H),其含义见错误代码表,BX=还可用的最大块数
(2)、功能49H
功能描述: 释放内存单元块以便为其它程序使用
入口参数: AH=49H
ES=被申请块的段地址
出口参数: CF=0——释放成功,否则,AX=错误号(07H或09H),其含义见错误代码表
(3)、功能4AH
功能描述: 根据程序的需要,动态地改变一个内存块
入口参数: AH=4AH
BX=需要一个新存储块的大小
ES=被修改块的段地址
出口参数: CF=0——修改成功,否则,AX=错误号(07H、08H或09H),其含义见错误代码表,BX=可用最大块的大小
(4)、功能58H
功能描述: 读取/设置内存分配策略
入口参数: AH=58H 读取内存分配策略 AL=00H
设置内存分配策略 AL=01H
BX=内存分配策略代码:
00H—第一满足
01H—最好满足
02H—最后满足
出口参数: CF=0——操作成功,AX=已选用的内存分配策略代码(含义如上说明),否则,AX=错误号(01H),其含义见错误代码表
9、系统功能(System Function)
25H — 设置中断向量
30H — 读取MS-DOS版本号
33H — 读取/设置Break标志
34H — 读取InDOS标志的地址
35H — 读取中断向量
38H — 读取/设置国家信息
44H — IOCTL(I/O控制)
50H — 设置程序段前缀(PSP)地址
51H — 读取程序段前缀(PSP)地址
59H — 读取扩展的错误信息
5EH — 读取机器名,读取/设置打印机配置
5FH — 设备重定向
63H — 读取前导字节表
65H — 读取扩展的国家信息
66H — 读取/设置代码页
5D0AH — 设置扩展的错误信息
(1)、功能25H
功能描述: 设置中断向量表
入口参数: AH=中断号
DS:DX=中断处理程序的入口地址
出口参数: 无
(2)、功能30H
功能描述: 取MS-DOS操作系统的版本号
入口参数: AH=30H
出口参数: AL=0——V 1.0;对其它高版本有:AL=主要版本号
AH=次版本号(MS-DOS 3.1=0AH,...)
BH=OEM的序列号(Original Equipment Manufacturer)
BL:CX=24位用户序列号
(3)、功能33H
功能描述: 获得或改变操作系统中断的状态。在功能调用期间,将影响^C的检测
入口参数: AH=33H
AL=00H——取状态
=01H——设置状态,DL=00/01表示置该状态OFF/ON
出口参数: 取状态时,DL=00/01——分别表示OFF/ON
说明:
1、若AL中存入其它的功能号,则返回时,AL的值为0FFH;
2、若置AL为5,则启动驱动器号返回在DL中(1-A,2-B,…)
(4)、功能34H
功能描述: 获得InDos标志的远地址,它由DOS维护表示DOS时活跃的
入口参数: AH=34H
出口参数: ES:BX=InDos标志的远地址
若该单元值为1,表示DOS功能在执行,否则,则不是。
(5)、功能35H
功能描述: 取指定中断号的入口地址
入口参数: AH=35H
AL=中断号
出口参数: ES:BX=中断处理程序的入口地址
(6)、功能38H
功能描述: 读取或设置国家信息
入口参数: AH=38H 当读取国家信息时
DS:DX=存放返回信息的地址
AL=0——取当前国家信息
AL=1~0FEH——取国家代码小于255的国家信息
AL=0FFH——取代码大于等于255的国家信息,BX=国家代码
设置国家信息时
DX=0FFFFH
AL=0~0FEH——设置国家代码小于255的国家信息
AL=0FFH——置代码大于等于255的国家信息,BX=国家代码
出口参数: CF=0——调用成功,BX=国家代码,否则。AX=错误代码(02H),其含义见错误代码表 说明国家信息如下所示:
字节0-1H: 日期格式:0—mdy、1—dmy、2—ymd
字节2-6H: 货币字符
字节7-8H: 数值千位分割符
字节9-0AH: 数值精度分割符
字节0B-0CH: 日期间隔符
字节0D-0EH: 时间间隔符
字节0FH: 货币格式
位0=0——货币符号在前,否则,货币符号在后
位1=0——货币符号和数据之间无空格,否则,二者之间有一个空格
位2=0——货币符号和小数点分开,否则,货币符号代替小数点
字节10H: 货币的小数位数
字节11H: 时间格式。位0=0—12小时制,否则,24小时制
字节12~15H: Case-Map调用地址
字节16~17H: 字符串分割符
字节18~21H: 保留
(7)、功能44H
功能描述: 输入/输出控制,其子功能描述:
00H—取设备信息 01H—取设备信息
02H—从字符设备驱动器接受控制数据 03H—发送控制数据到字符设备驱动器
04H—从块设备驱动器接受控制数据 05H—发送控制数据到块设备驱动器
06H—检查输入状态 07H—检查输出状态
08H—检查块设备是否为可拆卸设备 09H—检查设备是否为远程设备
0AH—检查句柄是否为远程对象 0BH—改变共享访问入口数
0CH—字符设备的一般I/O控制信息 0DH—块设备的一般I/O控制信息
0EH—读取逻辑驱动器映射关系 0FH—设置逻辑驱动器映射关系
说明:输入/输出子功能中的00H、06H和07H仅针对文件句柄,子功能00H~ 08H不支持网络设备。
(8)、功能50H
功能描述: 设置程序段前缀(PSP)地址
入口参数: AH=50H
BX=新的PSP地址
出口参数: 无
(9)、功能51H
功能描述: 读取程序段前缀(PSP)地址
入口参数: AH=51H
出口参数: BX=PSP地址
(10)、功能59H
功能描述: 读取扩展的错误信息
入口参数: AH=59H
BX=00H
出口参数: AX=扩展的错误代码,其含义见错误代码表
BH=错误类型,其定义如下: 01h—资源短缺 02h—处于临时状态而非错误
03h—权限问题 04h—系统软件内部错误
05h—硬件失败 06h—系统软件失败,但不是活跃进程失败
07h—应用程序错 08h—文件或数据项未发现
09h—文件或数据项类型或格式错 0Ah—文件或数据项相互加锁
0Bh—驱动器中坏磁盘,磁盘中坏区域或存储问题
0Ch—其它错误
BL=建议采用的措施,其定义如下:
01h — 重试若干次后,再选"终止"或"忽略"
02h — 重试若干次(二次之间要等待)后,再选"终止"或"忽略"
03h — 从用户获取正确的信息
04h — 终止应用程序,并清除其所使用资源
05h — 立即终止程序,但没有清除其资源
06h — 忽略错误
07h — 消除错误原因,再重试
CH=错误地点,其定义如下:
01h — 不知道
02h — 块设备(磁盘或磁盘模拟器)
03h — 网络
04h — 串行设备
05h — 内存
ES:DI=插入磁盘标签的字符串,若AX=0022h(非法改变磁盘)
(11)、功能5EH
功能描述: 读取机器名,读取/设置打印机配置 子功能号 功能描述
00h 读取机器名
02h 设置打印机安装字符串
03h 读取打印机安装字符串
①、子功能1
入口参数: AH=5EH
AL=00H
DS:DX=接受字符串缓冲区的地址
出口参数: CF=1——操作失败,AX=错误号(01H),其含义见错误代码表,否则,
CH=00H——机器名未定义,否则,机器名已定义
CL=NetBIOS名称号(当CH≠00H时)
DS:DX=标识符地址(当CH≠00H时)
②、子功能2
入口参数: AH=5EH
AL=02H
BX=重定向列表索引
CX=安装字符串的长度
DS:SI=安装字符串的地址
出口参数: CF=0——操作成功,否则,AX=错误号(01H),其含义见错误代码表
③、子功能3
入口参数: AH=5EH
AL=03H
BX=重定向列表索引
ES:DI=接受字符串缓冲区的地址
出口参数: CF=0——操作成功,CX=接受字符串的长度,否则,AX=错误号(01H),其含义见错误代码表
(12)、功能5FH
功能描述: 设备重定向 子功能号 功能描述
02h 读取重定向列表索引
03h 重定向设备
①、子功能1
入口参数: AH=5FH
AL=02H
BX=重定向列表索引
DS:SI=接受本地设备名的16字节存储区地址
ES:DI=接受网络名的128字节存储区地址
出口参数: CF=1——操作失败,AX=错误号(01H或12H),其含义见错误代码表,否则,BH位0=0H——设备合法,否则,设备非法
BL=设备类型——03H:打印机,04H:驱动器
CX=存储参数值
DX=被破坏
BP=被破坏
DS:SI=存放本地设备名的地址
ES:DI=存放网络名的地址
②、子功能2
入口参数: AH=5FH
AL=03H
BL=设备类型——03H:打印机,04H:驱动器
CX=调用者保存的参数
DS:SI=本地设备名的16字节存储区地址
ES:DI=网络名的128字节存储区地址,紧跟其后是密码
出口参数: CF=0——操作成功,否则,AX=错误号(01H、03H、05H、08H、0FH或12H),其含义见错误代码表
(13)、功能63H
功能描述: 读取前导字节表
入口参数: AH=63H AL =子功能
=00H—读取系统前导字节表地址
=01H—设置/清除临时控制台标志(DL=00H/01H—清除/设置标志)
=02H—读取临时控制台标志值
出口参数: BX=1——操作失败,AX=错误号(01H),其含义见错误代码表,否则,调用时,
若AL=00H,则,DS:SI=系统前导字节表地址;
若AL=02H,则,DL=临时控制台标志值
(14)、功能65H
功能描述: 读取扩展的国家信息
入口参数: AH=65H
BX=代码页(-1=活跃的CON设备)
CX=接受信息的缓冲区大小
DX=国家标识(-1=缺省)
ES:DI=接受信息的缓冲区地址 AL =子功能
=01H——读取一般的国家信息
=02H——读取指向大写字母表的指针
=04H——读取指向文件名大写字母表的指针
=06H——读取指向校对表的指针
=07H——读取指向DBCS向量的指针
出口参数: CF=0——操作成功,需要的数据存入调用的缓冲区,否则,AX=错误号(02H),其含义见错误代码表
(15)、功能66H
功能描述: 读取/设置代码页
入口参数: AH=66H
AL=子功能号:01H——读取代码页,02H——选择代码页
BX=选择的代码页(当AL=02H)
出口参数: CF=0——操作成功,当调用子功能01H时,BX=活跃的代码页,DX=缺省的代码页,否则,AX=错误号(02H或65H),其含义见错误代码表
(16)、功能5D0AH
功能描述: 设置扩展的错误信息
入口参数: AX=5D0AH
DS:DX=扩展错误结构的地址,该结构的说明如下: EXTEND_ERR STRUCT
RAx WORD ? ;AX
RBx WORD ? ;BX
RCx WORD ? ; CX
RDx WORD ? ; DX
RSi WORD ? ; SI
RDi WORD ? ; DI
RDs WORD ? ; DS
REs WORD ? ; ES
Pad WORD 3 DUP(0)
EXTEND_ERR ENDS
出口参数: 无
10、进程控制功能(Process-Control Function)
00H — 终止进程
26H — 创建新的程序段前缀(PSP)
31H — 终止并驻留
4BH — 执行程序(EXEC)
4CH — 带返回码方式的终止进程
4DH — 读取返回代码
62H — 读取PSP地址
(1)、功能00H
功能描述: 终止进程。这是程序可以使用的终止进程的方法之一
入口参数: AH=00H
CS=代码段地址
出口参数: 无
(2)、功能26H
功能描述: 把当前正在执行程序的程序段前缀(PSP)拷贝到内存中的指定地址中,并可改变其为其它程序所使用
入口参数: AH=26H
DX=新程序段前缀的段地址
出口参数: 无
(3)、功能31H
功能描述: 终止程序的运行,传递一个返回代码给其父进程,但该程序部分或全部驻留在内存中
入口参数: AH=31H
AL=返回代码号
DX=驻留在内存中的字节数
出口参数: 无
(4)、功能4BH
功能描述: 执行程序(EXEC)
入口参数: AH=4BH
ES:BX=参数块的地址
DS:DX=程序的入口地址
AL=00H——装入并执行程序,03H——以覆盖的形式装入
出口参数: CF=0——操作成功,除CS和IP之外,其它寄存器的值都被破坏,否则,AX=错误号(01H、02H、03H、05H、08H、0AH或0BH),其含义见错误代码表
(5)、功能4CH
功能描述: 终止程序的执行,并可返回一个代码
入口参数: AH=4CH
AL=返回的代码
出口参数: 无
(6)、功能4DH
功能描述: 父进程获取子进程的返回代码
入口参数: AH=4DH
出口参数: AH=00H——用中断20H、中断21H的功能0或4C正常终止
=01H——用户按^C终止
=02H——因致命错误而终止
=03H——用中断21H的功能31H,或中断27H终止
AL=子进程的返回码:00H——子进程由中断20H、中断21H的功能0或4C终止
(7)、功能62H
功能描述: 读取PSP地址
入口参数: AH=62H
出口参数: BX=PSP的偏移量
11、时间和日期功能(Time and Date Function)
2AH — 读取日期
2BH — 设置日期
2CH — 读取时间
2DH — 设置时间
(1)、功能2AH
功能描述: 取系统日期
入口参数: AH=2AH
出口参数: CX=年(1980~2099),DH=月(1~12),DL=日(1~31)
AL=星期几(0=Sunday,1=Monday,...)
(2)、功能2BH
功能描述: 置系统日期
入口参数: AH=2BH
CX=年(1980~2099),DH=月(1~12),DL=日(1~31)
出口参数: AL=00H——设置成功,0FFH——设置失败
(3)、功能2CH
功能描述: 取系统时间
入口参数: AH=2CH
出口参数: CH=时(0~23),CL=分(0~59),DL=秒(0~59),AL=百分秒(0~99)
(4)、功能2DH
功能描述: 置系统时间
入口参数: AH=2DH
CH=时(0~23),CL=分(0~59),DL=秒(0~59),AL=百分秒(0~99)
出口参数: 出口参数:AL=00H——设置成功,0FFH——设置失败
2、鼠标功能中断INT 33H
00H — 初始化鼠标
01H — 显示鼠标指针
02H — 隐藏鼠标指针
03H — 读取鼠标位置及其按钮状态
04H — 设置鼠标指针位置
05H — 读取鼠标按键信息
06H — 读取鼠标按钮释放信息
07H — 设置鼠标水平边界
08H — 设置鼠标垂直边界
09H — 设置图形鼠标形状
0AH — 设置本文鼠标形状
0BH — 读取鼠标移动计数
0CH — 为鼠标事件设置处理程序
0DH — 允许光笔仿真
0EH — 关闭光笔仿真
0FH — 设置鼠标计数与象素比
10H — 设置鼠标指针隐藏区域
13H — 设置倍速的阈值
14H — 替换鼠标事件中断
15H — 读取鼠标驱动器状态的缓冲区大小
16H — 存储鼠标驱动器状态
17H — 重装鼠标驱动器状态
18H — 为鼠标事件设置替换处理程序
19H — 读取替换处理程序的地址
1AH — 设置鼠标的灵敏度
1BH — 读取鼠标的灵敏度
1CH — 设置鼠标中断速率
1DH — 为鼠标指针选择显示页
1EH — 读取鼠标指针的显示页
1FH — 禁止鼠标驱动程序
20H — 启动鼠标驱动程序
21H — 鼠标驱动程序复位
22H — 设置鼠标驱动程序信息语言
23H — 读取语种
24H — 读取鼠标信息
25H — 读取鼠标驱动程序信息
26H — 读取最大有效坐标
(1)、功能00H
功能描述: 初始化鼠标,该操作只需要执行一次
入口参数: AX=00H
出口参数: AX=0000H——不支持鼠标功能,FFFFH——支持鼠标功能
BX=鼠标按钮个数(在支持鼠标功能时)
在支持鼠标功能的情况下,鼠标还被设置如下参数: 1、 鼠标指针放在屏幕中央
2、 如果当前鼠标指针是显示的,则操作后,鼠标指针被隐藏
3、 鼠标指针的显示页为0
4、 根据屏幕的显示模式显示鼠标指针:文本—反向显示矩形块,图形—尖头形状
5、 水平象素比=8:8,垂直象素比=16:8
6、 设置水平和垂直的显示边界为当前显示模式的最大边界
7、 允许光笔仿真
8、 双速门槛值=64
(2)、功能01H
功能描述: 显示鼠标指针,通常在鼠标初始化后,用此功能显示其指针
入口参数: AX=01H
出口参数: 无
(3)、功能02H
功能描述: 隐藏鼠标指针,一般在程序结束时,调用此功能
入口参数: AX=02H
出口参数: 无
(4)、功能03H
功能描述: 读取鼠标位置及其按钮状态
入口参数: AX=03H
出口参数: BX=按键状态: 位0=1——按下左键
位1=1——按下右键
位2=1——按下中键
其它位——保留,内部使用
CX=水平位置
DX=垂直位置
(5)、功能04H
功能描述: 设置鼠标指针位置
入口参数: AX=04H,CX=水平位置,DX=垂直位置
出口参数: 无
(6)、功能05H
功能描述: 读取鼠标按键信息
入口参数: AX=05H,BX=指定的按键:0—左键,1—右键,2—中键
出口参数: AX=按键状态,参见功能3H中BX的说明
BX=按键次数
CX=水平位置(最后按键时)
DX=垂直位置(最后按键时)
(7)、功能06H
功能描述: 读取鼠标按钮释放信息
入口参数: AX=06H,BX=指定的按键:0—左键,1—右键,2—中键
出口参数: AX=按键状态,参见功能3H中BX的说明
BX=释放的次数
CX=水平位置(最后释放时)
DX=垂直位置(最后释放时)
(8)、功能07H
功能描述: 设置鼠标水平边界
入口参数: AX=07H
CX=最小水平位置
DX=最大水平位置
出口参数: 无,鼠标有可能因新区域变小而自动移进新区域内
(9)、功能08H
功能描述: 设置鼠标垂直边界
入口参数: AX=08H
CX=最小垂直位置
DX=最大垂直位置
出口参数: 无,鼠标有可能因新区域变小而自动移进新区域内
(10)、功能09H
功能描述: 设置图形鼠标形状
入口参数: AX=09H
BX=指针的水平位置
CX=指针的垂直位置
ES:DX=16×16位光标的映象地址 参数说明: (BX,CX)是鼠标的指针在16×16点阵中的位置,(0,0)是左上角;
ES:DX指向的存储单元内存放16×16点阵的位映象隐码,紧跟其后的是16×16点阵的光标掩码。
鼠标指针的显示方法: 位映象隐码“逻辑与”上屏幕显示区的内容,然后再用光标掩码内容“异或”前面运算的结果。
出口参数: 无
(11)、功能0AH
功能描述: 设置本文鼠标形状
入口参数: AX=0AH
BX=光标类型: 0 — CX和DX的各位含义如下: 位7~0 鼠标指针符号
位10~8 字符前景色
位11 亮度
位14~12 字符背景色
位15 闪烁
1 — CX=光标的起始扫描线
DX=光标的结束扫描线
出口参数: 无
(12)、功能0BH
功能描述: 读取鼠标移动计数
入口参数: AX=0BH
出口参数: CX=水平移动距离:正数——向右移,负数——向左移
DX=垂直移动距离:正数——向下移,负数——向上移
(13)、功能0CH
功能描述: 为鼠标事件设置处理程序
入口参数: AX=0CH
CX=中断掩码 位0=1 ——鼠标指针位置发送变化
位1=1 ——按下左按钮
位2=1 ——释放左按钮
位3=1 ——按下右按钮
位4=1 ——释放右按钮
位5=1 ——按下中间按钮
位6=1 ——释放中间按钮
位7~15=0 ——保留
ES:DX=中断处理程序的地址
在进入中断处理程序时,有关寄存器的值含义:
AX=中断掩码
BX=按键状态
CX=鼠标指针的水平位置
DX=鼠标指针的垂直位置
SI=水平位置的变化量
DI=垂直位置的变化量
出口参数: 无
(14)、功能0DH
功能描述: 允许光笔仿真
入口参数: AX=0DH
出口参数: 无
(15)、功能0EH
功能描述: 关闭光笔仿真
入口参数: AX=0EH
出口参数: 无
(16)、功能0FH
功能描述: 设置鼠标计数与象素比
入口参数: AX=0FH
CX=水平比例
DX=垂直比例
出口参数: 无
(17)、功能10H
功能描述: 设置鼠标指针隐藏区域
入口参数: AX=10H
CX=左上角X坐标
DX=左上角Y坐标
SI=右下角X坐标
DI=右下角Y坐标
出口参数: 无
(18)、功能13H
功能描述: 设置倍速的阈值,其缺省值为64
入口参数: AX=13H
DX=阀值
出口参数: 无
(19)、功能14H
功能描述: 替换鼠标事件中断
入口参数: AX=14H
CX=中断掩码
ES:DX=中断处理程序的地址
出口参数: CX=旧的中断掩码
ES:DX=旧的中断处理程序地址
(20)、功能15H
功能描述: 读取鼠标驱动器状态的缓冲区大小
入口参数: AX=15H
出口参数: BX=存放鼠标驱动器状态所需缓冲区的大小
(21)、功能16H
功能描述: 存储鼠标驱动器状态
入口参数: AX=16H
ES:DX=存储鼠标驱动器状态的地址
出口参数: 无
(22)、功能17H
功能描述: 重装鼠标驱动器状态
入口参数: AX=17H
ES:DX=鼠标驱动器状态的地址
出口参数: 无
(23)、功能18H
功能描述: 为鼠标事件设置可选的处理程序
入口参数: AX=18H
CX=替换中断掩码
ES:DX=替换中断处理程序的地址
CF=0
出口参数: 无
(24)、功能19H
功能描述: 读取替换处理程序的地址
入口参数: AX=19H
CX=替换中断掩码
出口参数: 若AX=-1——不成功,否则,ES:DX=中断处理程序的地址
(25)、功能1AH
功能描述: 设置鼠标的灵敏度,其取值1~100
入口参数: AX=1AH
BX=水平灵敏度(每8个象素鼠标需要移动的数量,一般为8)
CX=垂直灵敏度(每8个象素鼠标需要移动的数量,一般为16)
DX=倍速阀值
出口参数: 无
(26)、功能1BH
功能描述: 读取鼠标的灵敏度
入口参数: AX=1BH
出口参数: BX=水平灵敏度
CX=垂直灵敏度
DX=倍速阀值
(27)、功能1CH
功能描述: 设置鼠标中断速率
入口参数: AX=1CH
BX=每秒钟中断的次数:0—关中断,1—30/S,2—50/S,3—100/S,4—200/S
出口参数: 无
(28)、功能1DH
功能描述: 为鼠标指针选择显示页
入口参数: AX=1DH
BX=显示页
出口参数: 无
(29)、功能1EH
功能描述: 读取鼠标指针的显示页
入口参数: AX=1EH
出口参数: BX=显示页
(30)、功能1FH
功能描述: 禁止鼠标驱动程序
入口参数: AX=1FH
出口参数: 若AX=-1——不成功,否则,ES:BX=鼠标驱动程序的地址
(31)、功能20H
功能描述: 启动鼠标驱动程序
入口参数: AX=20H
出口参数: 无
(32)、功能21H
功能描述: 鼠标驱动程序复位
入口参数: AX=21H
出口参数: 若AX=-1——不成功,否则,BX=2
(33)、功能22H
功能描述: 设置鼠标驱动程序信息语言
入口参数: AX=22H
BX=语言代码:0—英语,1—法语,2—荷兰语,3—德语,4—瑞典语,5—芬兰语,6—西班牙语,7—葡萄牙语,8—意大利语
出口参数: 无
(34)、功能23H
功能描述: 读取语种
入口参数: AX=23H
出口参数: BX=语言代码
(35)、功能24H
功能描述: 读取鼠标信息
入口参数: AX=24H
出口参数: BH=主版本号,BL=辅版本号
CL=中断请求号
CH=鼠标类型:1-Bus Mouse,2-Serial Mouse,3-InPort Mouse,4-PS/2 Mouse,5-HP Mouse
(36)、功能25H
功能描述: 读取鼠标驱动程序信息
入口参数: AX=25H
出口参数: AX=鼠标驱动程序信息: 位15 ——0: 驱动程序是.SYS文件,否则,为.COM文件
位14——0: 不完全鼠标显示驱动程序,否则,为完全的
位13-12——00: 软件文本光标
01: 硬件文本光标
1X: 图形光标
(37)、功能26H
功能描述: 读取最大有效坐标
入口参数: AX=26H
出口参数: BX=鼠标驱动程序状态
CX=最大水平坐标
DX=最大垂直坐标
3、其它DOS中断
INT 20H — 终止程序运行
INT 22H — 终止处理程序的地址
INT 23H — Ctrl+C处理程序
INT 24H — 致命错误处理程序
INT 25H — 读磁盘扇区(忽略逻辑结构)
INT 26H — 写磁盘扇区(忽略逻辑结构)
INT 27H — 终止,并驻留在内存
INT 28H — DOS空闲
INT 2FH — 多重中断服务
(1)、中断INT 20H
功能描述: 终止当前正在运行的程序,它是几种终止程序运行方法之一
入口参数: CS=PSP的段地址
出口参数: 无
(2)、中断INT 22H
功能描述: 终止处理程序的地址,该地址在程序装入内存运行前被放入PSP的0AH~0DH的单元内。该中断指令从不直接书写在程序之中
(3)、中断INT 23H
功能描述: Ctrl+C处理程序。该中断指令从不直接书写在程序之中
(4)、中断INT 24H
功能描述: 致命错误处理程序。该中断指令从不直接书写在程序之中
(5)、中断INT 25H
功能描述: 绝对读磁盘,直接从逻辑设备中读出数据到内存单元中
入口参数: AL=驱动器号(0=A、1=B、……) 分区容量≤32M,有:
CX=读出的扇区数
DX=起始扇区数
DS:BX=存放数据缓冲区的地址
否则,有:
CX=-1
DS:BX=参数块缓冲区的地址,该参数块的结构如下: 字节 描述
00~03H 32位扇区数
04~05H 将被读出的扇区数
06~07H 存放数据的缓冲区的偏移量
08~09H 存放数据的缓冲区的段地址
出口参数: CF=0——操作成功,否则,AX=错误号,其含义见下错误代码表 错误代码 错误含义
80H 附件响应失败
40H 定位操作失败
20H 设备控制器失败
10H 数据错(错误的CRC)
08H DMA失败
04H 需要的扇区未发现
02H 错误的地址标志
01H 错误命令
(6)、INT 26H
功能描述: 绝对写磁盘,直接把内存单元中的内容写入逻辑设备
入口参数: 与前面的INT 25H相一致
出口参数: 与前面的INT 25H相一致
(7)、INT 27H
功能描述: 终止,并驻留在内存
入口参数: CS=PSP的段值
DX=被保护程序最后一个字节的偏移量再加1
出口参数: 无
(8)、INT 28H
功能描述: DOS空闲中断
入口参数: 无
出口参数: 无
(9)、INT 2FH
功能描述: 多重中断服务,允许多个驻留程序通过单个中断与其它进程通信。
入口参数: AH=标识号,AL=功能号,功能号及其含义如下: 功能号 功能描述
01H 假脱机打印
06H 驻留ASSIGN命令
10H 驻留SHARE命令
B7H 驻留APPEND命令
出口参数: 若入口AL为0,则出口AL=0FFH,否则,其值取决于处理程序
BIOS中断:
1、显示服务(Video Service——INT 10H)
00H — 设置显示器模式 0CH —写图形象素
01H — 设置光标形状 0DH —读图形象素
02H — 设置光标位置 0EH —在Teletype模式下显示字符
03H — 读取光标信息 0FH —读取显示器模式
04H — 读取光笔位置 10H —颜色
05H — 设置显示页 11H —字体
06H、07H — 初始化或滚屏 12H —显示器的配置
08H — 读光标处的字符及其属性 13H —在Teletype模式下显示字符串
09H — 在光标处按指定属性显示字符 1AH —读取/设置显示组合编码
0AH — 在当前光标处显示字符 1BH —读取功能/状态信息
0BH — 设置调色板、背景色或边框 1CH —保存/恢复显示器状态
1、显示服务(Video Service——INT 10H)
00H — 设置显示器模式 0CH —写图形象素
01H — 设置光标形状 0DH —读图形象素
02H — 设置光标位置 0EH —在Teletype模式下显示字符
03H — 读取光标信息 0FH —读取显示器模式
04H — 读取光笔位置 10H —颜色
05H — 设置显示页 11H —字体
06H、07H — 初始化或滚屏 12H —显示器的配置
08H — 读光标处的字符及其属性 13H —在Teletype模式下显示字符串
09H — 在光标处按指定属性显示字符 1AH —读取/设置显示组合编码
0AH — 在当前光标处显示字符 1BH —读取功能/状态信息
0BH — 设置调色板、背景色或边框 1CH —保存/恢复显示器状态
1、显示服务(Video Service——INT 10H)
00H — 设置显示器模式 0CH —写图形象素
01H — 设置光标形状 0DH —读图形象素
02H — 设置光标位置 0EH —在Teletype模式下显示字符
03H — 读取光标信息 0FH —读取显示器模式
04H — 读取光笔位置 10H —颜色
05H — 设置显示页 11H —字体
06H、07H — 初始化或滚屏 12H —显示器的配置
08H — 读光标处的字符及其属性 13H —在Teletype模式下显示字符串
09H — 在光标处按指定属性显示字符 1AH —读取/设置显示组合编码
0AH — 在当前光标处显示字符 1BH —读取功能/状态信息
0BH — 设置调色板、背景色或边框 1CH —保存/恢复显示器状态
(1)、功能00H
功能描述: 设置显示器模式
入口参数: AH=00H
AL=显示器模式,见下表所示
出口参数: 无
可用的显示模式如下所列:
显示模式 显示模式属性 显示模式 显示模式属性
00H 40×25 16色 文本 01H 40×25 16色 文本
02H 80×25 16色 文本 03H 80×25 16色 文本
04H 320×200 4色 05H 320×200 4色
06H 640×200 2色 07H 80×25 2色 文本
08H 160×200 16色 09H 320×200 16色
0AH 640×200 4色 0BH 保留
0CH 保留 0DH 320×200 16色
0EH 640×200 16色 0FH 640×350 2(单色)
10H 640×350 4色 10H 640×350 16色
11H 640×480 2色 12H 640×480 16色
13H 640×480 256色
对于超级VGA显示卡,我们可用AX=4F02H和下列BX的值来设置其显示模式。
BX 显示模式属性 BX 显示模式属性
100H 640×400 256色 101H 640×480 256色
102H 800×600 16色 103H 800×600 256色
104H 1024×768 16色 105H 1024×768 256色
106H 1280×1024 16色 107H 1280×1024 256色
108H 80×60 文本模式 109H 132×25 文本模式
10AH 132×43 文本模式 10BH 132×50 文本模式
10CH 132×60 文本模式
(2)、功能01H
功能描述: 设置光标形状
入口参数: AH=01H
CH低四位=光标的起始行
CL低四位=光标的终止行
出口参数: 无
(3)、功能02H
功能描述: 用文本坐标下设置光标位置
入口参数: AH=02H
BH=显示页码
DH=行(Y坐标)
DL=列(X坐标)
出口参数: 无
(4)、功能03H
功能描述: 在文本坐标下,读取光标各种信息
入口参数: AH=03H
BH=显示页码
出口参数: CH=光标的起始行
CL=光标的终止行
DH=行(Y坐标)
DL=列(X坐标)
(5)、功能04H
功能描述: 获取当前状态和光笔位置
入口参数: AH=04H
出口参数: AH=00h——光笔未按下/未触发,01h——光笔已按下/已触发
BX=象素列(图形X坐标)
CH=象素行(图形Y坐标,显示模式:04H~06H)
CX=象素行(图形Y坐标,显示模式:0DH~10H)
DH=字符行(文本Y坐标)
DL=字符列(文本X坐标)
(6)、功能05H
功能描述: 设置显示页,即选择活动的显示页
入口参数: AH=05H
AL=显示页
对于CGA、EGA、MCGA和VGA,其显示页如下表所列: 模式 页数 显示器类型
00H、01H 0~7 CGA、EGA、MCGA、VGA
02H、03H 0~3 CGA
02H、03H 0~7 EGA、MCGA、VGA
07H 0~7 EGA、VGA
0DH 0~7 EGA、VGA
0EH 0~3 EGA、VGA
0FH 0~1 EGA、VGA
10H 0~1 EGA、VGA
对于PCjr:
AL= 80H——读取CRT/CPU页寄存器
81H——设置CPU页寄存器
82H——设置CRT页寄存器
83H——设置CRT/CPU页寄存器
BH=CRT页(子功能号82H和83H)
BL=CPU页(子功能号81H和83H)
出口参数: 对于前者,无出口参数,但对PCjr在子功能80H~83H调用下,有:BH=CRT页寄存器,BL=CPU页寄存器
(7)、功能06H和07H
功能描述: 初始化屏幕或滚屏
入口参数: AH=06H——向上滚屏,07H——向下滚屏
AL=滚动行数(0——清窗口)
BH=空白区域的缺省属性
(CH、CL)=窗口的左上角位置(Y坐标,X坐标)
(DH、DL)=窗口的右下角位置(Y坐标,X坐标)
出口参数: 无
(8)、功能08H
功能描述: 读光标处的字符及其属性
入口参数: AH=08H
BH=显示页码
出口参数: AH=属性
AL=字符
(9)、功能09H
功能描述: 在当前光标处按指定属性显示字符
入口参数: AH=09H
AL=字符
BH=显示页码
BL=属性(文本模式)或颜色(图形模式)
CX=重复输出字符的次数
出口参数: 无
(10)、功能0AH
功能描述: 在当前光标处按原有属性显示字符
入口参数: AH=0AH
AL=字符
BH=显示页码
BL=颜色(图形模式,仅适用于PCjr)
CX=重复输出字符的次数
出口参数: 无
(11)、功能0BH
功能描述: 设置调色板、背景色或边框
入口参数: AH=0BH
设置颜色:BH=00H,BL=颜色
选择调色板:BH=01H,BL=调色板(320×200、4种颜色的图形模式)
出口参数: 无
(12)、功能0CH
功能描述: 写图形象素
入口参数: AH=0CH
AL=象素值
BH=页码
(CX、DX)=图形坐标列(X)、行(Y)
出口参数: 无
(13)、功能0DH
功能描述: 读图形象素
入口参数: AH=0DH
BH=页码
(CX、DX)=图形坐标列(X)、行(Y)
出口参数: AL=象素值
(14)、功能0EH
功能描述: 在Teletype模式下显示字符
入口参数: AH=0EH
AL=字符
BH=页码
BL=前景色(图形模式)
出口参数: 无
(15)、功能0FH
功能描述: 读取显示器模式
入口参数: AH=0FH
出口参数: AH=屏幕字符的列数
AL=显示模式(参见功能00H中的说明)
BH=页码
(16)、功能10H
功能描述: 颜色中断。其子功能说明如下: 功能号 子功能名称 功能号 子功能名称
00H — 设置调色板寄存器 01H — 设置边框颜色
02H — 设置调色板和边框 03H — 触发闪烁/亮显位
07H — 读取调色板寄存器 08H — 读取边框颜色
09H — 读取调色板和边框 10H — 设置颜色寄存器
12H — 设置颜色寄存器块 13H — 设置颜色页状态
15H — 读取颜色寄存器 17H — 读取颜色寄存器块
1AH — 读取颜色页状态 1BH — 设置灰度值
(17)、功能11H
功能描述: 字体中断。其子功能说明如下: 子功能号 子功能名称
00H 装入用户字体和可编程控制器
10H 装入用户字体和可编程控制器
01H 装入8×14 ROM字体和可编程控制器
11H 装入8×14 ROM字体和可编程控制器
02H 装入8×8 ROM字体和可编程控制器
12H 装入8×8 ROM字体和可编程控制器
03H 设置块指示器
04H 装入8×16 ROM字体和可编程控制器
14H 装入8×16 ROM字体和可编程控制器
20H 设置INT 1Fh字体指针
21H 为用户字体设置INT 43h
22H 为8×14 ROM字体设置INT 43H
23H 为8×8 ROM字体设置INT 43H
24H 为8×16 ROM字体设置INT 43H
30H 读取字体信息
(18)、功能12H
功能描述: 显示器的配置中断。其子功能说明如下: 功能号 功能名称 功能号 功能名称
10H — 读取配置信息 20H — 选择屏幕打印
30H — 设置扫描行 31H — 允许/禁止装入缺省调色板
32H — 允许/禁止显示 33H — 允许/禁止灰度求和
34H — 允许/禁止光标模拟 35H — 切换活动显示
36H — 允许/禁止屏幕刷新
(19)、功能13H
功能描述: 在Teletype模式下显示字符串
入口参数: AH=13H
BH=页码
BL=属性(若AL=00H或01H)
CX=显示字符串长度
(DH、DL)=坐标(行、列)
ES:BP=显示字符串的地址 AL= 显示输出方式
0——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变
2——字符串中含显示字符和显示属性。显示后,光标位置不变
3——字符串中含显示字符和显示属性。显示后,光标位置改变
出口参数: 无
(20)、功能1AH
功能描述: 读取/设置显示组合编码,仅PS/2有效,在此从略
(21)、功能1BH
功能描述: 读取功能/状态信息,仅PS/2有效,在此从略
(22)、功能1CH
功能描述: 保存/恢复显示器状态,仅PS/2有效,在此从略
2、直接磁盘服务(Direct Disk Service——INT 13H)
00H —磁盘系统复位 0EH —读扇区缓冲区
01H —读取磁盘系统状态 0FH —写扇区缓冲区
02H —读扇区 10H —读取驱动器状态
03H —写扇区 11H —校准驱动器
04H —检验扇区 12H —控制器RAM诊断
05H —格式化磁道 13H —控制器驱动诊断
06H —格式化坏磁道 14H —控制器内部诊断
07H —格式化驱动器 15H —读取磁盘类型
08H —读取驱动器参数 16H —读取磁盘变化状态
09H —初始化硬盘参数 17H —设置磁盘类型
0AH —读长扇区 18H —设置格式化媒体类型
0BH —写长扇区 19H —磁头保护
0CH —查寻 1AH —格式化ESDI驱动器
0DH —硬盘系统复位
(1)、功能00H
功能描述: 磁盘系统复位
入口参数: AH=00H
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(2)、功能01H
功能描述: 读取磁盘系统状态
入口参数: AH=01H
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
出口参数: AH=00H,AL=状态代码,其定义如下:
00H — 无错
01H — 非法命令
02H — 地址目标未发现
03H — 磁盘写保护(软盘)
04H — 扇区未发现
05H — 复位失败(硬盘)
06H — 软盘取出(软盘)
07H — 错误的参数表(硬盘)
08H — DMA越界(软盘)
09H — DMA超过64K界限
0AH — 错误的扇区标志(硬盘)
0BH — 错误的磁道标志(硬盘)
0CH — 介质类型未发现(软盘)
0DH — 格式化时非法扇区号(硬盘)
0EH — 控制数据地址目标被发现(硬盘)
0FH — DMA仲裁越界(硬盘)
10H — 不正确的CRC或ECC编码
11H — ECC校正数据错(硬盘)
CRC:Cyclic Redundancy Check code
ECC:Error Checking & Correcting code
20H — 控制器失败
40H — 查找失败
80H — 磁盘超时(未响应)
AAH — 驱动器未准备好(硬盘)
BBH — 未定义的错误(硬盘)
CCH — 写错误(硬盘)
E0H — 状态寄存器错(硬盘)
FFH — 检测操作失败(硬盘)
(3)、功能02H
功能描述: 读扇区
入口参数: AH=02H
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明
(4)、功能03H
功能描述: 写扇区
入口参数: AH=03H
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明
(5)、功能04H
功能描述: 检验扇区
入口参数: AH=04H
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,AH=00H,AL=被检验的扇区数,否则,AH=状态代码,参见功能号01H中的说明
(6)、功能05H
功能描述: 格式化磁道
入口参数: AH=05H
AL=交替(Interleave)
CH=柱面
DH=磁头
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
ES:BX=地址域列表的地址
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(7)、功能06H
功能描述: 格式化坏磁道
入口参数: AH=06H
AL=交替
CH=柱面
DH=磁头
DL=80H~0FFH:硬盘
ES:BX=地址域列表的地址
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(8)、功能07H
功能描述: 格式化驱动器
入口参数: AH=07H
AL=交替
CH=柱面
DL=80H~0FFH:硬盘
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(9)、功能08H
功能描述: 读取驱动器参数
入口参数: AH=08H
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
出口参数: CF=1——操作失败,AH=状态代码,参见功能号01H中的说明,否则, BL
=01H — 360K
=02H — 1.2M
=03H — 720K
=04H — 1.44M
CH=柱面数的低8位
CL的位7-6=柱面数的该2位
CL的位5-0=扇区数
DH=磁头数
DL=驱动器数
ES:DI=磁盘驱动器参数表地址
(10)、功能09H
功能描述: 初始化硬盘参数
入口参数: AH=09H
DL=80H~0FFH:硬盘(还有有关参数表问题,在此从略)
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(11)、功能0AH
功能描述: 读长扇区,每个扇区随带四个字节的ECC编码
入口参数: AH=0AH
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=80H~0FFH:硬盘
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明
(12)、功能0BH
功能描述: 写长扇区,每个扇区随带四个字节的ECC编码
入口参数: AH=0BH
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=80H~0FFH:硬盘
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明
(13)、功能0CH
功能描述: 查寻
入口参数: AH=0CH
CH=柱面的低8位
CL(7-6位)=柱面的高2位
DH=磁头
DL=80H~0FFH:硬盘
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(14)、功能0DH
功能描述: 硬盘系统复位
入口参数: AH=0DH
DL=80H~0FFH:硬盘
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(15)、功能0EH
功能描述: 读扇区缓冲区
入口参数: AH=0EH
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明
(16)、功能0FH
功能描述: 写扇区缓冲区
入口参数: AH=0FH
ES:BX=缓冲区的地址
出口参数: CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明
(17)、功能10H
功能描述: 读取驱动器状态
入口参数: AH=10H
DL=80H~0FFH:硬盘
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(18)、功能11H
功能描述: 校准驱动器
入口参数: AH=11H
DL=80H~0FFH:硬盘
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明
(19)、功能12H
功能描述: 控制器RAM诊断
入口参数: AH=12H
出口参数: CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明
(20)、功能13H
功能描述: 控制器驱动诊断
入口参数: AH=13H
出口参数: CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明
(21)、功能14H
功能描述: 控制器内部诊断
入口参数: AH=14H
出口参数: CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明
(22)、功能15H
功能描述: 读取磁盘类型
入口参数: AH=15H
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
出口参数: CF=1——操作失败,AH=状态代码,参见功能号01H中的说明, 否则,AH =00H — 未安装驱动器
=01H — 无改变线支持的软盘驱动器
=02H — 带有改变线支持的软盘驱动器
=03H — 硬盘,CX:DX=512字节的扇区数
(23)、功能16H
功能描述: 读取磁盘变化状态
入口参数: AH=16H
DL=00H~7FH:软盘
出口参数: CF=0——磁盘未改变,AH=00H,否则,AH=06H,参见功能号01H中的说明
(24)、功能17H
功能描述: 设置磁盘类型
入口参数: AH=17H
DL=00H~7FH:软盘 AL =00H — 未用
=01H — 360K在360K驱动器中
=02H — 360K在1.2M驱动器中
=03H — 1.2M在1.2M驱动器中
=04H — 720K在720K驱动器中
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态编码,参见功能号01H中的说明
(25)、功能18H
功能描述: 设置格式化媒体类型
入口参数: AH=18H
CH=柱面数
CL=每磁道的扇区数
DL=00H~7FH:软盘
出口参数: CF=0——操作成功,AH=00H,ES:DI=介质类型参数表地址,否则,AH=状态编码,参见功能号01H中的说明
(26)、功能19H
功能描述: 磁头保护,仅在PS/2中有效,在此从略
(27)、功能1AH
功能描述: 格式化ESDI驱动器,仅在PS/2中有效,在此从略
3、串行口服务(Serial Port Service——INT 14H)
00H —初始化通信口 03H —读取通信口状态
01H —向通信口输出字符 04H —扩充初始化通信口
02H —从通信口读入字符
(1)、功能00H
功能描述: 初始化通信口
入口参数: AH=00H
DX=初始化通信口号(0=COM1,1=COM2,……)
AL=初始化参数,参数的说明如下: 波特率 奇偶位 停止位 字的位数
765 43 2 10
000 = 110 X0 = None 0 = 1 bit 10 = 7 bits
001 = 150 01 = Odd 1 = 2 bits 11 = 8 bits
010 = 300 11 = Even
011 = 600
100 = 1200
101 = 2400
110 = 4800
111 = 9600
对于PS/2,可用INT 14H之功能04H和05H来初始化其通信速率大于9600。
出口参数: AH=通信口状态,各状态位为1时的含义如下: 位7—超时
位6—传递移位寄存器为空
位5—传递保持寄存器为空
位4—发现终止 位3—发现帧错误
位2—发现奇偶错
位1—发现越界错
位0—接受数据准备好
AL=Modem状态
位7—接受单线信号诊断
位6—环指示器
位5—数据发送准备好
位4—清除数据,再发送 位3—改变在接受线上的信号诊断
位2—后边界环指示器
位1—改变“数据准备好”状态
位0—改变“清除—发送”状态
(2)、功能01H
功能描述: 向通信口输出字符
入口参数: AH=01H
AL=字符
DX=初始化通信口号(0=COM1,1=COM2,……)
出口参数: AL的值不变
AH的位7=0——操作成功,通信口状态,AH的位6~0是其状态位
(3)、功能02H
功能描述: 从通信口读入字符
入口参数: AH=02H
DX=初始化通信口号(0=COM1,1=COM2,……)
出口参数: AL=接受的字符
AH的位7=0——操作成功,通信口状态,AH的位6~0是其状态位
(4)、功能03H
功能描述: 读取通信口状态
入口参数: AH=03H
DX=初始化通信口号(0=COM1,1=COM2,……)
出口参数: AH=通信口状态,AL=Modem状态,参见功能号00H中的说明
(5)、功能04H
功能描述: 扩充初始化通信口,仅在PS/2中有效,在此从略
4、杂项系统服务(Miscellaneous System Service——INT 15H)
00H —开盒式磁带机马达 85H —系统请求(SysReq)键
01H —关盒式磁带机马达 86H —延迟
02H —读盒式磁带机 87H —移动扩展内存块
03H —写盒式磁带机 88H —读取扩展内存大小
0FH —格式化ESDI驱动器定期中断 89H —进入保护模式
21H —读/写自检(POST)错误记录 90H —设备等待
4FH —键盘截听 91H —设备加电自检
80H —设备打开 C0H —读取系统环境
81H —设备关闭 C1H —读取扩展BIOS数据区地址
82H —进程终止 C2H —鼠标图形
83H —事件等待 C3H —设置WatcHdog超时
84H —读游戏杆 C4H —可编程选项选择
(1)、功能00H
功能描述: 开盒式磁带机马达
入口参数: AH=00H
出口参数: CF=0——操作成功,否则,AH=状态(86H,若未安装盒式磁带机)
(2)、功能01H
功能描述: 关盒式磁带机马达
入口参数: AH=01H
出口参数: CF=0——操作成功,否则,AH=状态(86H,若未安装盒式磁带机)
(3)、功能02H
功能描述: 读盒式磁带机
入口参数: AH=02H
CX=读入的字节数
ES:BX=存放数据的缓冲区地址
出口参数: CF=0——操作成功,DX=实际读入的字节数,ES:BX指向最后一个字节的后面地址,否则,AH=状态码,其值含义如下: 01H —— CRC校验码错 80H —— 非法命令
02H —— 位信号混乱 86H —— 未安装盒式磁带机
04H —— 无发现数据
(4)、功能03H
功能描述: 写盒式磁带机
入口参数: AH=03H
CX=要写入的字节数
ES:BX=已存数据的缓冲区地址
出口参数: CF=0——操作成功,CX=00H,ES:BX指向最后一个字节的后面地址,否则,AH=状态码,其值含义如下: 80H —— 非法命令 86H —— 未安装盒式磁带机
(5)、功能0FH
功能描述: 格式化ESDI驱动器定期中断,仅在PS/2中有效,在此从略
(6)、功能21H
功能描述: 读/写自检(POST)错误记录,仅在PS/2中有效,在此从略
(7)、功能4FH
功能描述: 键盘截听,仅在PS/2中有效,在此从略
(8)、功能80H
功能描述: 打开设备
入口参数: AH=80H
BX=设备号
CX=进程号
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态码
(9)、功能81H
功能描述: 关闭设备
入口参数: AH=81H
BX=设备号
CX=进程号
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态码
(10)、功能82H
功能描述: 进程终止
入口参数: AH=81H
BX=进程号
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态码
(11)、功能83H
功能描述: 事件等待
入口参数: AH=83H 若需要事件等待,则: AL=00H
CX:DX=千分秒
ES:BX=信号量字节的地址
否则,调用参数为 AL=01H
出口参数: 若调用时,AL=00H,操作成功——CF=0,否则,CF=1
(12)、功能84H
功能描述: 读游戏杆
入口参数: AH=84H
DX=00H——读取开关设置
=01H——读取阻力输入
出口参数: CF=1H——操作失败,否则,
DX=00H时,AL=开关设置(位7~4)
DX=01H时,AX、BX、CX和DX分别为A(x)、A(y)、B(x)和B(y)的值
(13)、功能85H
功能描述: 系统请求(SysReq)键
入口参数: AH=85H
AL=00H——键按下
=01H——键放开
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态码
(14)、功能86H
功能描述: 延迟
入口参数: AH=86H
CX:DX=千分秒
出口参数: CF=0——操作成功,AH=00H
(15)、功能87H
功能描述: 从常规内存和扩展内存之间移动扩展内存块
入口参数: AH=87H
CX=移动的字数
ES:SI=GDT(Global Descriptor Table)的地址,其结构定义如下: 偏移量 存储的信息
00h-0Fh 保留,但现全为0
10h-11h 段的长度(2CX-1或更大)
12h-14h 24位源地址
15h 访问权限字节(其值为93h)
16h-17h 保留,但现全为0
18h-19h 段的长度(2CX-1或更大)
1Ah-1Ch 24位目标源地址
1Dh 访问权限字节(其值为93h)
1Eh-2Fh 保留,但现全为0
出口参数: CF=0——操作成功,AH=00H,否则,AH=状态码,其含义如下:
01H —— RAM奇偶错
02H —— 异常中断错
03H —— 20号线门地址失败
(16)、功能88H
功能描述: 读取扩展内存大小
入口参数: AH=88H
出口参数: AX=扩展内存字节数(以K为单位)
(17)、功能89H
功能描述: 进入保护模式,CPU从实模式进入保护模式
入口参数: AH=89H
BH=IRQ0的中断号
BL=IRQ8的中断号
ES:SI=GDT的地址(参见功能号87H)
出口参数: CF=1——操作失败,AH=0FFH,否则,AH=00H,CS、DS、ES和SS都是用户定义的选择器
(18)、功能90H
功能描述: 设备等待
入口参数: AH=90H AL =驱动器类型,具体的驱动器类型定义如下:
=00H~7FH——串行再重用设备
=80H~0BFH——可重入式设备
=0C0H~0FFH——等待访问设备,没有自检功能
00h — 磁盘
02h — 键盘
80h — 网络
FDh — 软盘马达启动 01h — 软盘
03h — 点设备(Pointing Device)
FCh — 硬盘复位
FEh — 打印机
ES:BX=对驱动器类型80H~0FFH的请求块地址
出口参数: CF=1——操作失败,否则,AH=00H
(19)、功能91H
功能描述: 设备加电自检
入口参数: AH=91H
AL=00H~7FH——串行再重用设备
=80H~0BFH——可重入式设备
出口参数: AH=00H
(20)、功能0C0H
功能描述: 读取系统环境
入口参数: AH=0C0H
出口参数: ES:BX=配置表地址,配置表的定义如下: 偏移量 含义说明
00h-01h 表的大小(字节数)
02h 系统模型
03h 系统子模型
04h BIOS版本号
05h 配置标志,其各位为1时的说明如下:
位7—DMA通道3使用
位6—存在从属8259
位5—实时时钟有效
位4—键盘截听有效
位3—等待外部事件有效
位2—扩展BIOS数据区
位1—微通道设施
位0—保留
06h-09h 保留
(21)、功能C1H
功能描述: 读取扩展BIOS数据区地址,仅在PS/2中有效,在此从略
(22)、功能C2H
功能描述: 鼠标图形,仅在PS/2中有效,在此从略
(23)、功能C3H
功能描述: 设置WatcHdog超时,仅在PS/2中有效,在此从略
(24)、功能C4H
功能描述: 可编程选项选择,仅在PS/2中有效,在此从略
5、键盘服务(Keyboard Service——INT 16H)
00H、10H —从键盘读入字符 03H —设置重复率
01H、11H —读取键盘状态 04H —设置键盘点击
02H, 12H —读取键盘标志 05H —字符及其扫描码进栈
(1)、功能00H和10H
功能描述: 从键盘读入字符
入口参数: AH
=00H——读键盘
=10H——读扩展键盘,可根据0000:0496H单元的内容判断:扩展键盘是否有效
出口参数: AH=键盘的扫描码
AL=字符的ASCII码
(2)、功能01H和11H
功能描述: 读取键盘状态
入口参数: AH =01H——检查普通键盘
=11H——检查扩展键盘
出口参数: ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。
(3)、功能02H和12H
功能描述: 读取键盘标志
入口参数: AH =02H——普通键盘的移位标志
=12H——扩展键盘的移位标志
出口参数: AL=键盘标志(02H和12H都有效),其各位之值为1时的含义如下: 位7—INS开状态
位3—ALT键按下
位6—CAPS LOCK开状态 位2—CTRL键按下
位5—NUM LOCK开状态 位1—左SHIFT键按下
位4—SCROLL LOCK开状态 位0—右SHIFT键按下
AH=扩展键盘的标志(12H有效),其各位之值为1时的含义如下:
位7—SysReq键按下 位3—右ALT键按下
位6—CAPS LOCK键按下 位2—右CTRL键按下
位5—NUM LOCK键按下 位1—左ALT键按下
位4—SCROLL键按下 位0—左CTRL键按下
(4)、功能03H
功能描述: 设置重复率
入口参数: AH=03H 对于PC/AT和PS/2: AL=05H
BH=重复延迟
BL=重复率
对于PCjr: AL
=00H——装入缺省的速率和延迟
=01H——增加初始延迟
=02H——重复频率降低一半
=03H——增加延迟和降低一半重复频率
=04H——关闭键盘重复功能
出口参数: 无
(5)、功能04H
功能描述: 设置键盘点击
入口参数: AH=04H AL =00H——关闭键盘点击功能
=01H——打开键盘点击功能
出口参数: 无
(6)、功能05H
功能描述: 字符及其扫描码进栈
入口参数: AH=05H
CH=字符的描述码
CL=字符的ASCII码
出口参数: CF=1——操作成功,AL=00H,否则,AL=01H
6、并行口服务(Parallel Port Service——INT 17H)
00H — 向打印机输出字符
01H — 初始化打印机端口
02H — 读取打印机状态
(1)、功能00H
功能描述: 向打印机输出字符
入口参数: AH=00H
AL=输出的字符
DX=打印机号(0—LPT1,1—LPT2,2—LPT3,……)
出口参数: AH=打印机状态。其各位为1时的含义如下: 位7—打印机空闲 位3—I/O错误
位6—打印机响应 位2—保留
位5—无纸 位1—保留
位4—打印机被选 位0—打印机超时
(2)、功能01H
功能描述: 初始化打印机端口
入口参数: AH=01H
DX=打印机号(0—LPT1,1—LPT2,2—LPT3,……)
出口参数: AH=打印机状态。各位定义如下功能00H所示
(3)、功能02H
功能描述: 读取打印机状态
入口参数: AH=02H
DX=打印机号(0—LPT1,1—LPT2,2—LPT3,……)
出口参数: AH=打印机状态。各位定义如下功能00H所示
7、时钟服务(Clock Service——INT 1AH)
00H —读取时钟“滴答”计数 06H —设置闹钟
01H —设置时钟“滴答”计数 07H —闹钟复位
02H —读取时间 0AH —读取天数计数
03H —设置时间 0BH —设置天数计数
04H —读取日期 80H —设置声音源信息
05H —设置日期
(1)、功能00H
功能描述: 读取时钟“滴答”计数
入口参数: AH=00H
出口参数: AL=00H——未过午夜,否则,表示已过午夜
CX:DX=时钟“滴答”计数
(2)、功能01H
功能描述: 设置时钟“滴答”计数
入口参数: AH=01H
CX:DX=时钟“滴答”计数
出口参数: 无
(3)、功能02H
功能描述: 读取时间
入口参数: AH=02H
出口参数: CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
DL=00H——标准时间,否则,夏令时
CF=0——时钟在走,否则,时钟停止
(4)、功能03H
功能描述: 设置时间
入口参数: AH=03H
CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
DL=00H——标准时间,否则,夏令时
出口参数: 无
(5)、功能04H
功能描述: 读取日期
入口参数: AH=04H
出口参数: CH=BCD码格式的世纪
CL=BCD码格式的年
DH=BCD码格式的月
DL=BCD码格式的日
CF=0——时钟在走,否则,时钟停止
(6)、功能05H
功能描述: 设置日期
入口参数: AH=05H
CH=BCD码格式的世纪
CL=BCD码格式的年
DH=BCD码格式的月
DL=BCD码格式的日
出口参数: 无
(7)、功能06H
功能描述: 设置闹钟
入口参数: AH=06H
CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
出口参数: CF=0——操作成功,否则,闹钟已设置或时钟已停止
(8)、功能07H
功能描述: 闹钟复位
入口参数: AH=07H
出口参数: 无
(9)、功能0AH
功能描述: 读取天数计数,仅在PS/2有效,在此从略
(10)、功能0BH
功能描述: 设置天数计数,仅在PS/2有效,在此从略
(11)、功能80H
功能描述: 设置声音源信息
入口参数: AH =80H
AL =声音源
=00H——8253可编程计时器,通道2
=01H——盒式磁带输入
=02H——I/O通道上的"Audio In"
=03H——声音产生芯片
出口参数: 无
8、直接系统服务(Direct System Service)
INT 00H —“0”作除数
INT 01H —单步中断
INT 02H —非屏蔽中断(NMI)
INT 03H —断点中断
INT 04H —算术溢出错误
INT 05H —打印屏幕和BOUND越界
INT 06H —非法指令错误
INT 07H —处理器扩展无效
INT 08H —时钟中断
INT 09H —键盘输入
INT 0BH —通信口(COM2:)
INT 0CH —通信口(COM1:)
INT 0EH —磁盘驱动器输入/输出
INT 11H —读取设备配置
INT 12H —读取常规内存大小(返回值AX为内存容量,以K为单位)
INT 18H —ROM BASIC
INT 19H —重启动系统
INT 1BH —CTRL+BREAK处理程序
INT 1CH —用户时钟服务
INT 1DH —指向显示器参数表指针
INT 1EH —指向磁盘驱动器参数表指针
INT 1FH —指向图形字符模式表指针
第八章 接口技术
1. 可编程并行I/O接口8255A
1) 基本结构
(1) 外口接口:具有3个8位的通道口A、B、C。每个通道口可独立作为8位并行I/O口,也可分为A、B两组使用作为两个独立的并行口。此时C口将作为A、B口与外设的联络控制线。
(2) A组包括A口及PC7~PC4(称C口上半部),B组包括B口及PC3~PC0(称C口下半部),8225A内部分A、B两组进行控制,两组控制电路从内部总线接收各控制字并发出相应的命令到所控制通道,从而选择及控制通道的工作方式,或对C口置位和复位。
2) 端口的选通
端口的选通由引脚
、A1、A0及
、
经8255A内部逻辑组合产生。8088中A1、A0连至地址线的A1、A0,而在8086系统中,为了使端口数据送到低8位数据线,端口应该具有偶地址,故A1、A0一般与CPU地址线A2、A1相连。
3) 工作方式
8255A具有山中工作方式。方式0称基本I/O方式,A、B、C口可作为基本的I/O线使用,这种方式无中断请求位,仅能采用查询方式传送数据。方式1为选通I/O方式,此时C口作为A、B口与外设的联络信号,而A、B口工作与用中断联络的I/O,方式2为双向I/O方式,但只限于A口,A口占用PC7~PC35条联络线,B口只可以使用PC2~PC0 ,这时B口可工作于方式0或方式1。
4) 控制字
有一个方式选择控制字为3个口公用。注意,即使只用一个口,其他口的工作方式也将随之确定下来。除此之外还有一个C口的位置/复位控制字。注意控制字送入控制端口中。
2、可编程定时/计数器8253
1)基本结构
(1)控制寄存器用于存放8253的控制字,三个通道公用一个地址,因此控制字的最高两位状态决定使对哪一个计数器进行控制字的写入。
(2)每人通道有一个16位的计数初始值寄存器CR,一个16位递减计数器CE和一个16位的输出锁存器OL,OL随CE变化。CR和OL都没计数功能,只起锁存作用,两者公用一个地址,CR只允许写,OL只允许读。
2) 工作方式
8253有6种工作方式:
方式0:计数结束中断方式。在这这种方式下,写入计数值N后,经N+1个CLK脉冲,输出变为高;
方式1:可编程单拍脉冲方式,门控触发后,但脉冲宽度为N 个CLK脉冲;
方式2:脉冲发生器方式,每N个CLK脉冲输出一个宽度为CLK周期的脉冲;
方式3:方波方式,写入计数值N 后,输出:N/2个CLK高电平,N/2个CLK低电平(N为偶数);
(N+1)/2个CLK高电平,(N-1)/2个CLK高电平(N为奇数);
方式4:软件触发选通方式,写入计数值N后过N+1个CLK,输出宽度为1个CLK的脉冲;
方式5:硬件触发选通方式,门控触发后,过N+1个CLK,输出宽度为1个CLK的脉冲。
这6种方式可为三组来理解;方式0与4,方式1与5,方式2与3,每一组的两种工作方式极为类似。注意抓住门控信号GATE功能,输出OUT的波形,计数器初值的设置和启动计数的条件及能否自动重新计数等。
3)8253的读写操作
写操作:工作方式控制字写入控制字寄存器,计数器计数初值写入各自计数器。
读操作:先锁存再读OL的值;使计数器停止后再读;此外也可以在计数过程中用指令进行读出。
3、可编程串行通讯接口
1)串行同学的基本概念
(1)串行数据传送线路的方式有单工、半双工和全双工三种。
(2)数据同步方式有异步和同步方式:
A)异步传送中,信息使以字符的方式进行传送的,字符的有效长度可为5~8位,每个字符传送时还应加上起始位(1位低电平)和停止位(1、1.5、2位高电平),有时还加上一位奇偶校验位,异步传送的各字符不要求连续,字符间以高电平作空闲位。异步传送灵敏度高,但传送的有效数据率低。
B)同步传送中,信息时以数据块进行传送的,须注意发送和接收端的时钟必须时严格同步,收发双取得同步的方法,时在数据块的开头同步字符和结尾出(同校验码)加控制信息。
(3)串行通讯的传送速度用波特率来表示,即每秒传送信息位的数量。
(4)为了节省CPU的资源,常用异步接收器/发送器(UART)完成串一并,并一串转换工作。UART一般有三种功能:(A)进行串一并、并一串转换。
(B)设置通讯协议,包括字符格式和波特率。
(C)检测通讯错误设置出错标志。
2)串行通讯接口8251
8251时一个通用的同步/异步收发器(USART),异步方式以字符位单位发送和接收,也支持面向字符式的同步传送。能以半双工、全双工的方式进行通讯,具有双缓冲的接收器和发送器。8251在使用前,必须由CPU写入方式控制字和命令字来设定它的工作方式、字符格式和传送速率等。
使用8251应注意下面几点:
(1) 由于8251的方式、命令控制字和同步字符SYN之间无特征标志,他们的区别仅在于装入的先后次序。因此初始化编程时,唏嘘按编程次序进行。
(2) 欲改变8251的工作方式,必须先复位,再重新设置方式。
(3) 8251的命令字和发送数据公用发送数据/命令缓冲器。在发送数据过程中,发送命令将覆盖缓冲区中等待发送的字符,要求CPU必须在等待TXRDY=1时不能输出命令字。
(4) 当8251以同步方式接收时,除设置允许接收外,必须指定进入搜索方式,且使出错标志复位。
8251的状态位TXRDY与输出引脚TXRDY使用区别。TXRDY状态标志为“1”只反映当前发送缓冲器已空,而TXRDY引脚为“1”除表示发送缓冲器已空外,还反映CTX=0和TXEN=1,亦即允许发送。
第九章 总线技术
一、总线基本概念
1. 总线特性、总线指标
每种总线都有详细特性,包括机械特性、电气特性、功能特性及时间特性。
总线性能指标包括:总线宽度、总线传输率、时钟同步/异步、负载能力、总线控制方式等。
2. 系统总线的基本结构和组织
总线包括三种不同功艿男藕畔撸菏葑芟摺⒌刂纷芟吆涂刂谱芟摺#芟叩淖橹绞交痉治プ芟吆投嘧芟撸プ芟呤墙心?槎剂拥降ヒ蛔芟呱希嘧芟呤侵赶低持邪硕嘀植煌嘈偷淖芟呦低常扑慊低持胁煌旨渡系钠骷蜕璞柑峁└髦中阅懿煌耐ㄐ磐ǖ馈5プ芟呓峁辜虻ケ阌诶┏洌嘧芟呓峁乖蚨约扑慊阅艿奶岣呤欠浅S行У摹?/span>
二、总线仲裁
系统中多个设备或模块可能同时申请对总线的使用权,为避免产生总线冲突,需由总线仲裁机构合理地控制和管理系统中需要占用总线的申请者,在多个申请者同时提出总线请求时,以一定的优先算法仲裁哪个应获得对总线的使用权。总线判优控制按照仲裁控制机构的设置可分为集中控制和分散控制两种。其中就集中控制而言,常用的总线仲裁方式有:菊花链仲裁、二维仲裁、同步通信方式、异步通信方式和半同步通信方式。
三、微机总线
微机中几种常用的标准总线包括:ISA总线、EISA总线、PCI总线和AGP(高速图形接口)等。
(一) ISA( Industrial standard Architecture)总线是IBM的标准兼容总线,也是现代个人计算机的基础,其中的8位ISA总线也称为IBM PC总线或PC/XT总线,是在以8088为CPU的IBM PC/XT出现时提出的,16位ISA总线是IBM公司在80286CPU出现后,推出的PC/AT机中提出的。ISA总线实际上是把微处理器的芯片总线经缓冲后直接连接到系统总线上,不支持总线仲裁的硬件逻辑和多主设备系统,且总线上所有数据的传输都必须通过CPU或DMA控制器来管理。
(二) EISA (Extended Industrial Standard Architecture)总线是适应32位微处理器的系统总线标准,它支持总线主控,可以直接控制总线实现对内存和I/O设备的访问而不涉及主CPU。
(三) PCI(Peripheral Component Interconnet)总线是为今后若干代产品开发制定代一个高性能代局部总线标准。
1. PCI总线位于外围设备与CPU之间代一个中间层,它通过主存控制器-桥与系统总线相连。这种与系统总线相隔离代结构使之独立于处理器并可支持多种系统代处理器。PCI总线采用多层结构于外围设备相连接:PCI总线上可带高速外围设备,另外通过扩展总线桥与扩展总线连接,从而与ISA、EISA等总线兼容。
2. PCI的基本总线传送是突发传送,一个突发传送由一个地址段和一个或多个数据段组成,一次读操作的时序如下:
1) 在时钟脉冲1开始,总线上主设备获得总线控制权,它使FRAME#信号有效,同时主设备将有效地址放在AD总线,C/BE#也有效了。
2) 在时钟脉冲2开始,总线上各个从设备根据AD地址及C/BE#来识别是否为自己的地址。
3) 在时钟脉冲2的下半周开始,主设备中止地址发送,而准备转为接收数据信号,同时C/BE#发送新的信息,指定数据线上哪些字节有效,还有主设备的IRDY#有效表示是主设备读操作。
4) 从设备读DEVSEL#有效表示它可识别出自己地址和命令。接着被选中读从设备把数据放在AD线上,同时使TRDY#有效,表示总线上的数据有效。
5) 若在一个时钟脉冲的上升沿,IRDY#和TRDY#同时有效,就进行数据的传送,与此同时,改变C/BE#上的信息,为读下一个数据做准备。如此进行几个数据读传送。
6) 当主设备将IRDY#置为无效,相应当从设备也将TRDY#和DEVSEL#变无效,表示一次总线传送结束。
注意在传送过程中,IRDY#和TRDY#其中之一无效时,就插入等待周期,只有二者同时有效才能进行读数据操作。
3. PCI总线仲裁是采用集中控制的同步仲裁机制。
(四) AGP(Accelerate Graphic Port)是为支持高性能图形和视频而专门设计的一种新型局部总线。AGP使信息在图形控制器和系统芯片组之间的专用点对点通道上进行传输,使图形控制器拥有完全属于自己的32位通道。AGP采用边带信号传输技术,即控制信号不通过数据总线而是通过单独的总线来传输;还采用内存请求流水线技术,对各种内存请求进行排队来减少延迟。
浙公网安备 33010602011771号