输入输出和中断程序设计.ppt

上传人:仙人指路1688 文档编号:2244907 上传时间:2023-02-06 格式:PPT 页数:48 大小:1.60MB
返回 下载 相关 举报
输入输出和中断程序设计.ppt_第1页
第1页 / 共48页
输入输出和中断程序设计.ppt_第2页
第2页 / 共48页
输入输出和中断程序设计.ppt_第3页
第3页 / 共48页
输入输出和中断程序设计.ppt_第4页
第4页 / 共48页
输入输出和中断程序设计.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《输入输出和中断程序设计.ppt》由会员分享,可在线阅读,更多相关《输入输出和中断程序设计.ppt(48页珍藏版)》请在三一办公上搜索。

1、输入输出和中断程序设计,中断系统端口输入输出,输入过程输入设备把数据送到接口,由CPU执行输入程序把接口中的数据读入CPU,再根据需要放入存储器或寄存器中。处理程序完成对数据的处理并将处理结果放入指定的寄存器或存储器中。输出过程CPU执行输出程序,将存储器或寄存器中等待输出的内容送到输出接口中,然后启动输出设备,将接口中的数据通过输出设备输出。输入/输出的基本条件连接CPU与外设的接口电路和相应的软件-驱动程序。,输入输出,微机端口,通过总线与CPU相连的芯片除了存储器外,还有以下3种芯片:(1)各种接口卡上的接口芯片.(独立显卡等)(2)主板上接口芯片,CPU通过它们对部分外 设进行访问.(

2、USB,键盘、鼠标接口)(3)其它芯片,用来存储相关的系统信息,或 进行相关的输入输出处理.(CMOS,BIOS)这些芯片都有一组可以被CPU读写的寄存器这些寄存器叫做端口。这些寄存器在物理上处于不同的芯片中,但它们都是与CPU的总线相连,CPU通过控制线向它们所在的芯片发出端口读写命令。,端口,每个接口由一组寄存器组成,这些寄存器都分配有一个称为I/O端口的地址编码。计算机的CPU和内存就是通过这些端口和外部设备进行通信的。,I/O接口部件中一般有三种寄存器:1.用作数据缓冲的数据寄存器;2.用来保存设备和接口的状态信息,供 CPU对外设进行测试的状态寄存器;3.用来保存CPU发出的命令,以

3、控制接 口和设备操作的控制寄存器。这些寄存器都分配有各自的端口号,CPU就是通过不同的端口号来选择各种外部设备的。(端口地址),端口编址,I/O端口编址一般分两种方法:1.将I/O与内存单元统一编址,其优点是节省了输入/输出指令,但缺点是占用了内存单元的有效地址空间;2.将I/O独立编址。在80 x86微机中,I/O端口编址在一个独立的地址空间中,端口的读写(CPU访问端口),在访问端口时,CPU通过端口地址(端口号)来定位端口。因为端口所在的芯片和CPU通过总线相连,所以端口地址和内存地址一样,通过地址总线来传送。对端口的读写不能用mov,push,pop等指令。端口的读写指令只要两条:in

4、和out,分别用于从端口读取数据和向端口写入数据,(1)端口读写命令IN 和OUT,例:IN AL,20H;端口CPU OUT 20H,AL;CPU端口在IN和OUT指令中,只能用AX或AL寄存器来存放从端口读入的数据或者要发到端口中的数据。访问8位端口时用AL访问16位端口时用AX。,端口的读写,(2)对0255的端口进行读写 in al,20h;从20h端口读取一个字节 out 20h,al;向20h端口写入一个字节(3)对25665535的端口进行读写时,端口号放在dx中 mov dx,3f8h;将端口号3f8h送入dx in al,dx;从3f8h端口读入一个字节 out dx,al;

5、向3f8h端口写入一个字节,端口的读写,(4)in al,60h指令的CPU执行过程CPU通过地址线将地址信息60h发出.CPU通过控制线发出端口读命令,选 中端口所在的芯片,并通知它,将要 从中读取数据.端口所在的芯片将60h端口中的数据 通过数据线送入CPU.,端口的读写,对CMOS RAM的读写来体会对端口的访问CMOS RAM芯片有一个128个存储单元的RAM存储器,其中0-0DH单元用来保存时间信息,其余大部分单元用于存放系统配置信息,供系统启动时BIOS程序读取。CMOS RAM芯片内部有2个端口,端口地址为70h和 71h。70h为地址端口,存放CPU要访问的CMOS单元地址,7

6、1h为数据端口,存放从选定的CMOS单元中读写的数据。,CMOS RAM芯片的读写,对CMOS RAM的读写来体会对端口的访问,CMOS RAM芯片的读写,其中0-0DH单元用来保存时间信息,其余大部分单元用于存放系统配置信息,供系统启动时BIOS程序读取。,1个128个存储单元的RAM存储器,2个端口(端口地址为70h和 71h),70h为地址端口:存放CPU要访问的CMOS单元地址;71h为数据端口:存放从选定的CMOS单元中读写的数据。,CMOS RAM芯片,例:读CMOS的2号单元数据,要分2步:将2送端口70h 从71h读出2号单元的内容 MOV AL,2 OUT 70H,AL;将2

7、送端口70h IN AL,71H;从71h读出2号单 元数据到AL寄存 器中,例1、将CMOS中用BCD码表示的月份,以十进制的形式显示到屏幕上。在CMOS RAM中,存放着当前的时间:年,月,日,时,分,秒这6个信息的长度都是1个字节,存放单元为:秒:0 分:2时:4日:7月:8年:9 这些数据是以BCD码存放的,例2.将CMOS中的时间信息存于MSG开始的内存空间 lea si,msg mov dl,0jj:mov al,dl;从CMOS中地址为0到9的单元内容读出 out 70h,al;向70H端口写入要访问的单元地址 in al,71h;从数据端口71H取出指定单元的数据 mov si

8、,al inc si inc dl cmp dl,09h jna jj,中断,中断信息任何一个通用的CPU都具备有一种能力,可以检测到从CPU外部发送来或者内部产生的一种特殊信息,并且可以立即对接收到的信息进行处理。这种特殊的信息称为:中断信息中断CPU不再接着向下执行指令,而是转去处理这个特殊信息。,中断,中断信息任何一个通用的CPU都具备有一种能力,可以检测到从CPU外部发送来或者内部产生的一种特殊信息,并且可以立即对接收到的信息进行处理。这种特殊的信息称为:中断信息中断CPU不再接着向下执行指令,而是转去处理这个特殊信息。,中断,当CPU的内部有下面情况发生时,将产生中断信息:(1)除法

9、错误;比如div指令产生除法溢出(2)单步执行(3)into溢出中断(4)int指令对于不同的信息要进行不同的处理,在处理前,CPU 首先要知道,所接收到的中断信息的来源,所以中断 信息中必须包含识别来源的编码,即中断类型码:(1)除法错误:0(2)单步执行:1(3)执行into指令:4(4)执行int指令:指令格式int n,n即为提供给cpu的中断类型码,中断处理中断处理程序就是对中断信息进行处理的一段指令。CPU要执行某个中断处理程序必须获得该程序的入口地址。因此必须在中断信息(中断类型号)与中断处理程序入口地址间建立某种联系。中断向量表中断向量表保存在内存中,CPU用中断类型码,通过查

10、找中断向量表,就可以得到中断处理程序的入口地址。,中断向量表 即中断类型号*4开始的4个单元存放着该类型号所 对应的中断处理程序的入口地址,CS:IP,类型0中断处理程序入口IP类型0中断处理程序入口CS类型1中断处理程序入口IP类型1中断处理程序入口CS类型2中断处理程序入口IP类型2中断处理程序入口CS.,00000H00001H00002H00003H00004H00005H00006H00007H00008H00009H0000AH0000BH,3、中断过程 中断指令INT n:(1)取中断类型号n(2)标志寄存器内容入栈(保护标志寄存器内容)(3)当前CS,IP入栈(4)禁止外部中断

11、(5)取(n*4)IP,(n*4+2)CS(6)转去中断处理程序 中断返回指令IRET:中断处理程序的最后一条指令,4、中断处理程序与子程序相同点:都必须保存返回的断点CS,IP不同点:中断处理程序需要保存标志寄存器内容.中断处理程序不允许再产生中断.中断可以驻留内存,不依赖于调用它的 程序.,5、用户中断的设置(1)编写中断子程序(2)将程序传送到指定空间(0:200H这个空间一般情况下为空)(3)设置中断向量表,这个过程可以直接向中断向量表写数据,也可以由DOS的AH=25,INT 21H来完成,6、BIOS和DOS的装载过程:(1)开机后,CPU加电,初始化 CS0FFFFH,IP=0,

12、自动从0FFFFH:0单元开始执行程序。0FFFFH:0处有一跳转指令,转去执行BIOS中的硬件自检和初始化程序(2)初始化程序将BIOS所支持的中断例行程序的入口地址登记在中断向量表中(程序是固化在ROM中)(3)硬件系统检测和初始化完成后,调用INT19H进行操作系统的引导(4)DOS启动后,将DOS中断例行程序装入内存,并建立中断向量,例:编写、安装中断7ch的中断例程,求一个字数据的平方,AX中是要计算的数(0:200H这个空间一般情况下为空),例:编写、安装中断7ch的中断例程,求一个字数据的平 方,AX中是要计算的数code segment assume cs:codestart:

13、;将中断程序传送到0:200处 mov ax,cs mov ds,ax mov si,offset sqr;设置DS:SI指向源地址 mov ax,0 mov es,ax mov di,200h;设置ES:DI指向目的地址 mov cx,offset sqrend-offset sqr;设置CX为传输长度 cld rep movsb,;设置中断向量表,将程序的入口地址保存到7CH表项中 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;求平方的功能中断程序sq

14、r:mul ax iretsqrend:nopcode endsend start,例4 调用7CH中断求ax的平方code segment assume cs:codestart:mov ax,3456 int 7ch mov ah,4ch int 21hcode endsend start,BIOS功能调用,BIOS功能调用(课本P.241),BIOS(Basic Input/Output System)BIOS是一组固化到计算机主板上的ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件

15、设置和控制。主要以中断处理程序的形式提供I/O设备的处理程序和常用例行程序。,表8.4BIOS中断调用表,用户程序和操作系统关系示意图,BIOS中断程序处于DOS功能调用和硬件环境之间,和DOS功能调用相比其优点是效率高,缺点是编程相对复杂。,DOS系统功能调用,DOS系统功能调用和BIOS中断调用 DOS操作系统或ROM-BIOS程序提供的一组子程序,用“INT N”指令调用。DOS系统功能调用:DOS操作系统提供,主要用于I/O设备管理、目录及文件管理BIOS中断调用:ROM提供,主要用于系统加电自检、引导装入初始化程序等。这些子程序给用户编程带来了方便,直接调用相应的功能即可。,DOS系

16、统功能调用的步骤及实例 最常用的:INT 21H 21H为子程序的总入口,进入后可调用各种功能步骤:1.设置入口参数 2.将功能号放入AH寄存器 3.使用指令INT 21H 转入子程序入口 一般:2、3步必须有;1视情况而定,BIOS中断调用方法,(1)设置分功能号。按实现的操作功能的要 求,给指定寄存器(通常为AH)送入分功 能号。(2)设置入口参数。按操作要求,给寄存器填 写相应参数的内容(某些调用无参数)。(3)使用中断语句INT n。执行调用的功能,其 中n为中断号。(4)分析出口参数。如:MOVAH,0;分功能号为0 MOV AL,10H;置入口参数 INT1AH;1AH为中断号,功

17、能 为读时间计数器的值,显示器中断调用(10H中断调用),DOS中断和BIOS中断存在同样的功能如:打印机输出一个字符的功能,可以用 DOS中断21h的功能5,可以用BIOS中断17h的功能0.对BIOS和DOS调用的选择原则是:无法使用DOS功能调用或者DOS没有提供而BIOS提供了功能的情况下可以考虑使用BIOS中断。如:有关显示输出的DOS功能调用不多而BIOS调用(INT 10H)的功能很强,主要包括设置显示方式,设置光标大小和位置,设置调色板号,显示字符和显示图形等,见p249表8.5。,设置显示方式(0号功能)入口参数:AH=0,AL=设置方式,见表8.6出口参数:无设置光标类型(

18、1号功能)入口参数:AH=1,CH=光标开始行,CL=光标结束行。出口参数:无。根据CX给出光标的大小。(要在纯DOS下才能实现)mov ch,1 mov cl,3 mov ah,1 int 10h,显示器中断调用(10H中断调用),设置光标位置(2号功能)入口参数:AH=2,BH=页号,DH=行号,DL=列号.出口参数:无.根据DX给出确定光标的位置.在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码 BL=字符属性,CX=写入字符数.出口参数:无.在当前光标处,可连续写CX个字符.,如何在某个位置显示某些字符呢?,例1:在第0页(20,25)的位

19、置显示3个*MOV BH,0;第0页 MOV DH,20 MOV DL,25;坐标 MOV AH,2;设置光标位置 INT 10H MOV AL,*;要显示的字符 MOV BH,0;第0页 MOV BL,0C3H;颜色 MOV CX,3;字符个数 MOV AH,9;功能调用在光标位置显示字符 INT 10H MOV AH,4CH INT 21H,初始始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号,DX=上滚窗口右上角的行、列号,BH=空白行的属性.(例青底白字,BH=37h)出口参数:无.当滚动后,顶部为空白输入行.,初始窗口或向下滚动(7号功能

20、)入口参数:AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号,DX=下滚窗口右上角的行、列号,BH=空白行的属性.出口参数:无.当滚动后,底部为空白输入行.BH属性见表8.7-表8.10,例2.清屏幕的左半边,呈反相显示(白底黑字BH=70H),见P251,表8.9、8.10。MOV AH,7;下滚 MOV AL,0;行数,0为全屏 MOV BH,70H;属性白底黑字 MOV CH,0;从0行0列开始 MOV CL,0 MOV DH,24;到24行39列为止 MOV DL,39 INT 10H,写字符串到指定的页面(功能号13H)入口参数:ES:BP=要显示字符串的地址CX=字符串的长

21、度;DH=起始光标行号,DL=列号;BH=页号;AL=方式代码;BL=属性(例:红底蓝字,即BL=41h)结果:在屏幕的任意位置显示彩色的字符串,例4.用13h功能,在屏幕左上角显示字符串,mov al,3;设置8025彩色显示模式mov ah,0int 10hmov bp,seg string;段地址送ES,偏移地址送BPmov es,bpmov bp,offset stringmov cl,len;字符串长度mov ch,0mov dx,0;光标起始位置mov bl,41h;属性mov al,0;光标不移动mov ah,13h;显示字符串功能调用 int 10h,例5.从(10,20)的位

22、置开始用*画一条斜线 mov ah,0;设置字符显示模式 mov al,3 int 10h mov dh,20;从第20行10列开始 mov dl,10 set:mov ah,2;设置光标位置 int 10h mov cx,1;一次显示一个字符 mov al,*;显示的字符 mov ah,0ah;在光标位置显示字符,属性不变 int 10h dec dh;光标斜向上移 inc dl cmp dh,0;到第0行退出 jne set,set1:mov ah,2;光标设置在当前位置 int 10h mov cx,1;一次显示一个字符 mov al,2;笑脸的ascii=2 mov ah,0ah int 10h inc dh;光标位置下移 inc dl cmp dh,21;21行退出 jne set1,例6.接例5写程序,画出下面图形,笑脸的ASCII码为2,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号