汇编语言程序设计第六章课件

上传人:tian****1990 文档编号:74575143 上传时间:2019-01-28 格式:PPT 页数:87 大小:702.50KB
返回 下载 相关 举报
汇编语言程序设计第六章课件_第1页
第1页 / 共87页
汇编语言程序设计第六章课件_第2页
第2页 / 共87页
汇编语言程序设计第六章课件_第3页
第3页 / 共87页
汇编语言程序设计第六章课件_第4页
第4页 / 共87页
汇编语言程序设计第六章课件_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《汇编语言程序设计第六章课件》由会员分享,可在线阅读,更多相关《汇编语言程序设计第六章课件(87页珍藏版)》请在金锄头文库上搜索。

1、,第六章 输入/输出和WIN32编程,一、本章的学习内容 本章学习在几种新的计算机资源下的汇编语言程序设计技术,包括: (1)输入输出指令的使用格式及功能; (2)主机与外部设备之间传送数据的方式; (3)中断的概念及中断处理程序设计; (4)WIN32程序设计基本方法与技术。 通过本章的学习,有助于深入系统的核心,充分发掘系统的资源,有效发挥汇编语言的优势。,新的计算机资源包括:,外部设备;(输入/输出指令,数据传递方式) 中断系统;(中断机制、软/硬件中断、中断处理程序设计) ROM BIOS;(软中断调用) 协处理器;(浮点指令、运算) WINDOWS操作系统。(宏汇编语言功能、WIN-

2、API、32位编程),第六章 输入/输出和WIN32编程,二、本章的学习重点 (1)输入输出指令IN、OUT的使用格式及功能; (2)中断矢量表,中断处理程序的编制方法; (3)段的简化定义方法; (4)结构的定义与使用方法; (5)基于窗口的WIN32程序的结构、功能和特点,基本的程序设计方法。,第六章 输入/输出和WIN32编程,三、本章学习的难点 (1)输入输出指令中的地址表示方法; (2)中断矢量表的作用、存取方法; (3)中断处理程序的安装、驻留、调试; (4)存储模型的理解和应用; (5)不带变量名字的结构成员的访问方法; (6)基于窗口的WIN32程序执行流程、消息驱动机制。,6

3、.1 输入/输出指令和数据的传送方式,地址总线,数据总线,控制总线,CPU,内存 地址 译码,内存读写,PC机IO端口分配情况:,输入: 从外部设备向计算机传送信息,也即将外部设备寄存器中的数据送至累加器AL/AX/EAX或主存储器中; 输出: 从计算机向外部设备传送信息,也即将AL/AX/EAX或主存储器中的数据送至外设寄存器中。,6.1.1输入/输出指令,语句格式: IN OPD,OPS 功能: (OPS)累加器OPD 说明: 当外设寄存器的地址255时,OPS只能用DX表示。 OPD只能是累加器AL、AX或EAX。 即: IN AL/AX/EAX,OPS,1. 输入指令 IN,例: IN

4、 AL,60H 执行前:(60H)=11H,(AL)0E3H 执行后:(AL)11H,(60H)不变 说明: 60H是键盘将当前按键的键码输入到计算机内的端口的地址。该指令语句从60H号端口中读取一个字节的键码送到AL中,即(60H)AL。 当(DX)=60H时, IN AL,DX 等价于 IN AL,60H,例: IN AX,DX 执行前:(DX)200H,(200H)=33H (201H)=44H,(AX)1234H 执行后:(AX)4433H (DX)、(200H)和(201H)不变 说明: 以DX中的内容200H为起始端口地址,从端口中读取 一个字送到AX中,完成(DX)AX的功能。

5、即:(200H)AL、(201H)AH。,语句格式: OUT OPD,OPS 功能:累加器(OPS)OPD 说明: OPD = 立即数 或者DX OPS只能是累加器AL、AX或EAX。 即: OUT OPD, AL/AX/EAX,2. 输出指令 OUT,例: OUT 80H,EAX 执行前: (EAX)11223344H,(80H)=55H, (81H)=66H,(82H)=77H,(83H)=88H 执行后: (80H)44H,(81H)33H, (82H)22H,(83H)11H,(EAX) 说明: 该指令完成(EAX)80的功能。即(EAX )中的4个字节按照从低到高的次序分别送到了外设

6、寄存器地址为80H83H的4个单元中。,从上面的例子可以看出: I/O空间的访问不存在分段的问题(不使用段寄存器); 在输入/输出指令中,寻址方式的表示形式不同于第二章的格式规定。 用立即数表示的端口地址形式实际相当于第二章中的直接寻址方式; 用寄存器表示的端口地址形式实际相当于第二章中的寄存器间接寻址方式。,语句格式: INS OPD, DX INSB 输入字节串 INSW 输入字串 INSD 输入双字串 功 能:(DX)ES:DI/EDI ,指针修改 语句格式: OUTS DX,OPS OUTSB 输出字节串 OUTSW 输出字串 OUTSD 输出双字串 功 能:(DS:SI/ESI)DX

7、 ,指针修改 在实方式下,I/O空间的访问没有特殊的限制, 在保护方式下,CPU对I/O功能提供保护。,3. 串输入指令 INS,4. 串输出指令 OUTS,1无条件传送方式 2查询传送方式,输入状态寄存器“READY”位为1时表示要输入的数据已准备好。,6.1.2 数据的传送方式,查询式输入的程序段INPROG如下: INPROG:IN AL,STATUS_PORT ;从状态寄存器 输入状态信息 TEST AL,80H ;检查“READY”位 JZ INPROG ;未准备好,转INPROG IN AL,DATA_PORT ;已准备好,从数据寄存器输入数据送入AL,3直接存储器传送方式 直接存

8、储器传送方式也称DMA(Direct Memory Access)方式。 4中断传送方式(具体见下一节),6.2 中断与异常,6.2.1中断的概念 中断:是CPU所具有的能打断当前执行的程序,转而为临时出现的事件服务,事后又能自动按要求恢复执行原来程序的一种功能。 中断系统:实现这种功能的软、硬件装置 。 中断处理程序(或中断服务程序):某事件的处理程序。 中断源:引起中断的事件。, K: DK: , ,响应随机发生的事件,处理结束,返回断点,处理事件的程序,现行程序,实现数据的中断传送方式时需要完成的步骤: 安装服务程序、初始化硬件、做别的事情、中断来时处理IO.,注意与子程序的区别,中断处

9、理过程如下:,外部中断 (中断,随机性) 内部中断 (异常,与CPU的状态和当前执行的指令有关),不可屏蔽中断NMI: 电源掉电、存储器出错或者总线奇偶校验错 可屏蔽中断INTR: 开中断状态(STI,IF=1);CLI,CPU检测: 如除法出错、单步中断、协处理器段超越等。 程序检测: 软中断,包括指令INTO、INT n和BOUND等。,中断源,80X86系统的中断源分类:,NMI,INTR,键盘,鼠标,除法出错处理,溢出中断处理,单步中断处理,软 中断处理,中断逻辑,不可屏蔽中断请求,中断 控制器8259A,可屏蔽 中断请求,CPU,时钟,(1)几个中断同时发生时怎么办? 采用优先级的办

10、法. (2)如何得到中断处理程序的入口地址? 通过中断号和中断矢量表(6.2.2节介绍)实现. (3)怎样编写中断处理程序? 通过相关指令及编写、安装方法 (在6.2.3及6.2.4节介绍).,中断过程中会遇到的问题:,1、优先级,2、中断号(类型码): 0 - 255(一个字节256个),中断矢量表:是中断类型码与对应的中断处理程序之间的连接表,存放的是中断处理程序的入口地址(也称为中断矢量或中断向量)。 (实方式下1KB,起始位置固定地从物理地址0开始) 实方式下的中断矢量表如下:,类型0中断处理程序入口地址,类型1中断处理程序入口地址,类型2中断处理程序入口地址,类型255中断处理程序入

11、口地址,IP CS,00000H 00004H,003FCH 003FFH, 00008H,主存,中断号为1的中断处理程序的代码段,6.2.2 中断矢量表,(1)获取中断类型码n (2)从中断矢量表中获取入口地址 (0:n*4)IP, (0:n*4+2)CS。 以上2步解决了如何获得入口地址的问题。 (3)返回地址的处理、标志寄存器等的处理。 例:n=2对应的中断处理程序的入口地址值存放在物理地址范围为00008H-0000BH的内存中,如何将其读出来看看? MOV AX,0 MOV DS,AX MOV AX,0008H ;访问DS:2*4单元, 即0:0008H单元 MOV BX,000AH

12、,CPU转到中断处理程序的重要步骤是:,在保护方式下,中断矢量表称作中断描述符表(IDT),按照统一的描述符风格定义其中的表项;每个表项(称作门描述符)存放中断处理程序的入口地址以及类别、权限等信息,占8个字节,共占用2KB的主存空间。IDTR决定IDT的起始PA。具体情况如下图:,保护方式下的中断矢量表,n*8,IDT,LDT或GDT,入口点 (处理代码),可执行段,基址,偏移,CS,EIP,IDTR,怎样编写中断处理程序:相关指令,编写、安装方法等等,见下面内容,软中断通过程序中的软中断指令实现,所以又称它为程序自中断。 1. 软中断指令 语句格式:INT n 其中,n为中断号,取值范围为

13、0255。 功能: 实方式:(FLAGS)(SP),0IF、TF 32位段:(EFLAGS)(ESP),0TF, 中断门还要将0IF,6.2.3 软中断及有关的中断指令,实方式:(CS)(SP),(4*n+2)CS 32位段:(CS)扩展成32位(ESP), 从门或TSS描述符中分离出的段选择符CS 实方式:(IP)(SP),(4*n)IP 32位段:(EIP)(ESP), 从门或TSS描述符中分离出的偏移值EIP,例: “INT 21H”用来调用DOS系统功能,每当执行这条指令时,便产生类型号为21H的中断,执行事先安排好的中断处理程序。堆栈中信息的布局情况如下:,SP,中断前的(IP)=

14、断点(IP)= 返回地址值,语句格式:IRET 功能:实方式:(SP)IP 32位段:(ESP)EIP 实方式:(SP)CS 32位段:(ESP)取低16位CS 实方式:(SP)FLAGS 32位段:(ESP)EFLAGS,恢复断点地址,恢复标志寄存器的内容,CPU对中断的响应一般是在当前指令执行完后才去响应,所以,通过分析各种中断源的特点,得出:程序设计中重点关注可屏蔽中断源INTR可能对程序执行结果的影响。,2. 中断返回指令, MOV SS,AX MOV SP,BX ,CLI MOV SS,AX MOV SP,BX STI,在进行不能打断的操作前一定要先关闭中断 (CLI指令使IF=0,

15、不会响应INTR了),做完之后STI。,例,软中断的实例:操作系统提供了INT 21H 等软中断,完成了很多系统功能;ROM BIOS 也提供了很多系统驱动程序。BIOS软中断的功能和入口、出口参数见附录。 实方式下 :,0000:0-03FFH 0000:0400H A000:0000 E000:0000-,中断矢量表 DOS系统区 用户程序区 显示缓冲区 ROM BIOS,编程时混合接口界面:,硬件设备寄存器等,汇编源程序,DOS调用,ROM BIOS调用,6.2.4 中断处理程序的设计 中断处理程序的设计主要包括: 为尚未分配功能的中断号设计一个中断处理程序(新增); 修改已有的中断处理程序以扩充其功能。 下面以实方式为例进行介绍。 1新增一个中断处理程序的步骤 根据功能编制中断处理程序。 编制方法与子程序的编制方法类似,远过程, IRET。 为软中断找到一个空闲的中断号m;或根据硬件确定中断号。 将新编制的中断处理程序装入内存,将其入口地址送入中断矢量表4*m4*m+3的四个字节中。 使用方法:INT m / 硬件中断 / CPU异常。,2修改(接管)已有中断处理程序以扩充其功能 根据扩

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号