1、输入输出和中断程序设计中断系统端口输入输出1.输入过程输入设备把数据送到接口,由CPUCPU执行输入程序把接口中的数据读入CPUCPU,再根据需要放入存储器或寄存器中。处理程序完成对数据的处理并将处理结果放入指定的寄存器或存储器中。输出过程CPUCPU执行输出程序,将存储器或寄存器中等待输出的内容送到输出接口中,然后启动输出设备,将接口中的数据通过输出设备输出。输入/输出的基本条件连接CPUCPU与外设的接口电路和相应的软件-驱动程序。输入输出2.微机端口通过总线与CPU相连的芯片除了存储器外,还有以下3种芯片:(1)各种接口卡上的接口芯片.(独立显卡等)(2)主板上接口芯片,CPU通过它们对
2、部分外设进行访问.(USB,键盘、鼠标接口)(3)其它芯片,用来存储相关的系统信息,或进行相关的输入输出处理.(CMOS,BIOS)这些芯片都有一组可以被CPU读写的寄存器这些寄存器叫做端口。这些寄存器在物理上处于不同的芯片中,但它们都是与CPU的总线相连,CPU通过控制线向它们所在的芯片发出端口读写命令。3.端口每个接口由一组寄存器组成,这些寄存器都分配有一个称为I/O端口的地址编码。计算机的CPU和内存就是通过这些端口和外部设备进行通信的。4.I/O接口部件中一般有三种寄存器:1.用作数据缓冲的数据寄存器;2.用来保存设备和接口的状态信息,供CPU对外设进行测试的状态寄存器;3.用来保存C
3、PU发出的命令,以控制接口和设备操作的控制寄存器。这些寄存器都分配有各自的端口号,CPU就是通过不同的端口号来选择各种外部设备的。(端口地址)5.端口编址I/O端口编址一般分两种方法:1.将I/O与内存单元统一编址,其优点是节省了输入/输出指令,但缺点是占用了内存单元的有效地址空间;2.将I/O独立编址。在80 x86微机中,I/O端口编址在一个独立的地址空间中6.端口的读写(CPU(CPU访问端口)在访问端口时,CPU通过端口地址(端口号)来定位端口。因为端口所在的芯片和CPU通过总线相连,所以端口地址和内存地址一样,通过地址总线来传送。对端口的读写不能用mov,push,pop等指令。端口
4、的读写指令只要两条:in和out,分别用于从端口读取数据和向端口写入数据7.(1)端口读写命令ININ 和OUTOUT例:INAL,20H;端口CPUOUT20H,AL;CPU端口在ININ和OUTOUT指令中,只能用AXAX或ALAL寄存器来存放从端口读入的数据或者要发到端口中的数据。访问8位端口时用AL访问16位端口时用AX。端口的读写8.(2)对0255的端口进行读写inal,20h;从20h端口读取一个字节out20h,al;向20h端口写入一个字节(3)对25665535的端口进行读写时,端口号放在dx中movdx,3f8h;将端口号3f8h送入dxinal,dx;从3f8h端口读入
5、一个字节outdx,al;向3f8h端口写入一个字节端口的读写9.(4)inal,60h指令的CPU执行过程CPU通过地址线将地址信息60h发出.CPU通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据.端口所在的芯片将60h端口中的数据通过数据线送入CPU.端口的读写10.对CMOSRAM的读写来体会对端口的访问CMOSRAM芯片的读写其中0-0DH单元用来保存时间信息,其余大部分单元用于存放系统配置信息,供系统启动时BIOS程序读取。1个128个存储单元的RAM存储器2个端口(端口地址为70h和71h)70h为地址端口:存放CPU要访问的CMOS单元地址;71h为数据
6、端口:存放从选定的CMOS单元中读写的数据。CMOSRAM芯片12.例:读CMOS的2号单元数据,要分2步:将2送端口70h从71h读出2号单元的内容MOVAL,2OUT70H,AL;将2送端口70hINAL,71H;从71h读出2号单元数据到AL寄存器中13.例1、将CMOS中用BCD码表示的月份,以十进制的形式显示到屏幕上。在CMOSRAM中,存放着当前的时间:年,月,日,时,分,秒这6个信息的长度都是1个字节,存放单元为:秒:0分:2时:4日:7月:8年:9这些数据是以BCD码存放的14.15.中断中断信息任何一个通用的CPU都具备有一种能力,可以检测到从CPU外部发送来或者内部产生的一
7、种特殊信息,并且可以立即对接收到的信息进行处理。这种特殊的信息称为:中断信息中断CPU不再接着向下执行指令,而是转去处理这个特殊信息。17.中断中断信息任何一个通用的CPU都具备有一种能力,可以检测到从CPU外部发送来或者内部产生的一种特殊信息,并且可以立即对接收到的信息进行处理。这种特殊的信息称为:中断信息中断CPU不再接着向下执行指令,而是转去处理这个特殊信息。18.中断当CPU的内部有下面情况发生时,将产生中断信息:(1)除法错误;比如div指令产生除法溢出(2)单步执行(3)into溢出中断(4)int指令对于不同的信息要进行不同的处理,在处理前,CPU首先要知道,所接收到的中断信息的
8、来源,所以中断信息中必须包含识别来源的编码,即中断类型码:(1)除法错误:0(2)单步执行:1(3)执行into指令:4(4)执行int指令:指令格式intn,n即为提供给cpu的中断类型码19.中断处理中断处理程序就是对中断信息进行处理的一段指令。CPU要执行某个中断处理程序必须获得该程序的入口地址。因此必须在中断信息(中断类型号)与中断处理程序入口地址间建立某种联系。中断向量表中断向量表保存在内存中,CPU用中断类型码,通过查找中断向量表,就可以得到中断处理程序的入口地址。0号中断源对应的中断处理程序的入口地址1号中断源对应的中断处理程序的入口地址2号中断源对应的中断处理程序的入口地址.中
9、断向量表20.中断向量表即中断类型号*4开始的4个单元存放着该类型号所对应的中断处理程序的入口地址,CS:IP类型0中断处理程序入口IP类型0中断处理程序入口CS类型1中断处理程序入口IP类型1中断处理程序入口CS类型2中断处理程序入口IP类型2中断处理程序入口CS.00000H00001H00002H00003H00004H00005H00006H00007H00008H00009H0000AH0000BH21.3、中断过程中断指令INTn:(1)取中断类型号n(2)标志寄存器内容入栈(保护标志寄存器内容)(3)当前CS,IP入栈(4)禁止外部中断(5)取(n*4)IP,(n*4+2)CS(
10、6)转去中断处理程序中断返回指令IRET:中断处理程序的最后一条指令22.4、中断处理程序与子程序相同点:都必须保存返回的断点CS,IP不同点:中断处理程序需要保存标志寄存器内容.中断处理程序不允许再产生中断.中断可以驻留内存,不依赖于调用它的程序.23.例:编写、安装中断7ch的中断例程,求一个字数据的平方,AX中是要计算的数(0:200H这个空间一般情况下为空)26.例4调用7CH中断求ax的平方codesegmentassumecs:codestart:movax,3456int7chmovah,4chint21hcodeendsendstart29.BIOS功能调用30.BIOS功能调
11、用(课本P.241)BIOS(BasicInput/OutputSystem)BIOS是一组固化到计算机主板上的ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。主要以中断处理程序的形式提供I/O设备的处理程序和常用例行程序。表8.48.4BIOSBIOS中断调用表31.用户程序和操作系统关系示意图BIOSBIOS中断程序处于DOSDOS功能调用和硬件环境之间,和DOSDOS功能调用相比其优点是效率高,缺点是编程相对复杂。32.DOSDOS系统功能调用 DOSDOS系统功能调用和
12、BIOSBIOS中断调用 DOSDOS操作系统或ROM-BIOSROM-BIOS程序提供的一组子程序,用“INT NINT N”指令调用。uDOSDOS系统功能调用:DOSDOS操作系统提供,主要用于I/OI/O设备管理、目录及文件管理uBIOSBIOS中断调用:ROMROM提供,主要用于系统加电自检、引导装入初始化程序等。这些子程序给用户编程带来了方便,直接调用相应的功能即可。33.DOSDOS系统功能调用的步骤及实例 u最常用的:INT 21HINT 21H 21H21H为子程序的总入口,进入后可调用各种功能u步骤:1.1.设置入口参数 2.2.将功能号放入AHAH寄存器 3.3.使用指令
13、INT 21H INT 21H 转入子程序入口 一般:2 2、3 3步必须有;1 1视情况而定34.BIOS中断调用方法(1)设置分功能号。按实现的操作功能的要求,给指定寄存器(通常为AH)送入分功能号。(2)设置入口参数。按操作要求,给寄存器填写相应参数的内容(某些调用无参数)。(3)使用中断语句INTn。执行调用的功能,其中n为中断号。(4)分析出口参数。如:MOV AH,0;分功能号为0MOVAL,10H;置入口参数INT1AH;1AH为中断号,功能为读时间计数器的值35.显示器中断调用(10H中断调用)DOSDOS中断和BIOSBIOS中断存在同样的功能如:打印机输出一个字符的功能,可
14、以用 DOSDOS中断21h21h的功能5 5,可以用BIOSBIOS中断17h17h的功能0.0.对BIOSBIOS和DOSDOS调用的选择原则是:无法使用DOSDOS功能调用或者DOSDOS没有提供而BIOSBIOS提供了功能的情况下可以考虑使用BIOSBIOS中断。如:有关显示输出的DOSDOS功能调用不多而BIOSBIOS调用(INT 10HINT 10H)的功能很强,主要包括设置显示方式,设置光标大小和位置,设置调色板号,显示字符和显示图形等,见p249p249表8.58.5。36.T设置显示方式(0号功能)入口参数:AH=0,AL=设置方式,见表8.6出口参数:无T设置光标类型(1
15、号功能)入口参数:AH=1,CH=光标开始行,CL=光标结束行。出口参数:无。根据CX给出光标的大小。(要在纯DOS下才能实现)movch,1movcl,3movah,1int10h显示器中断调用(10H中断调用)37.T设置光标位置(2号功能)入口参数:AH=2,BH=页号,DH=行号,DL=列号.出口参数:无.根据DX给出确定光标的位置.T在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码BL=字符属性,CX=写入字符数.出口参数:无.在当前光标处,可连续写CX个字符.如何在某个位置显示某些字符呢?38.例1:在第0页(20,25)的位置显示3个
16、*MOVBH,0;第0页MOVDH,20MOVDL,25;坐标MOVAH,2;设置光标位置INT10HMOVAL,*;要显示的字符MOVBH,0;第0页MOVBL,0C3H;颜色MOVCX,3;字符个数MOVAH,9;功能调用在光标位置显示字符INT10HMOVAH,4CHINT21H39.T初始始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号,DX=上滚窗口右上角的行、列号,BH=空白行的属性.(例青底白字,BH=37h)出口参数:无.当滚动后,顶部为空白输入行.40.T初始窗口或向下滚动(7号功能)入口参数:AH=7,AL=下滚行数,CX=下滚
17、窗口左上角的行、列号,DX=下滚窗口右上角的行、列号,BH=空白行的属性.出口参数:无.当滚动后,底部为空白输入行.BH属性见表8.7-表8.1041.例2.清屏幕的左半边,呈反相显示(白底黑字BH=70H),见P251,表8.9、8.10。MOVAH,7;下滚MOVAL,0;行数,0为全屏MOVBH,70H;属性白底黑字MOVCH,0;从0行0列开始MOVCL,0MOVDH,24;到24行39列为止MOVDL,39INT10H42.43.T写字符串到指定的页面(功能号13H)入口参数:ES:BP=要显示字符串的地址CX=字符串的长度;DH=起始光标行号,DL=列号;BH=页号;AL=方式代码
18、;BL=属性(例:红底蓝字,即BL=41h)结果:在屏幕的任意位置显示彩色的字符串44.例4.用13h功能,在屏幕左上角显示字符串45.例5.从(10,20)的位置开始用*画一条斜线movah,0;设置字符显示模式moval,3int10hmovdh,20;从第20行10列开始movdl,10set:movah,2;设置光标位置int10hmovcx,1;一次显示一个字符moval,*;显示的字符movah,0ah;在光标位置显示字符,属性不变int10hdecdh;光标斜向上移incdlcmpdh,0;到第0行退出jneset47.set1:movah,2;光标设置在当前位置int10hmovcx,1;一次显示一个字符moval,2;笑脸的ascii=2movah,0ahint10hincdh;光标位置下移incdlcmpdh,21;21行退出jneset1例6.6.接例5 5写程序,画出下面图形,笑脸的ASCIIASCII码为2 248.