目录
二、COM文件的编程格式:可以生成扩展为COM的可执行文件。
3.常用的I/O指令(只能在端口和AL,AX,EAX之间交换信息)
二、可屏蔽中断(PC系列机可屏蔽中断,响应中断的条件,响应的过程,硬件结构)
第一章微型计算机基础
第一节 数制
数制是用来解决数的表示方法。
1.常用的计数制
1)十进制数(D):0~9,基数为10。加减法则:逢十进一,借一当十。
2)二进制数(B):0~1,基数为2。加减法则:逢二进一,借一当二。
计算机内部信息存储、运算、输入/输出都是二进制。
3)十六进制数(H):0~9,A~F,基数为16。加减法则:逢16进一,借一当16。
四位二进制为一组为一个十六进制数。
2.数制转换
1)二、八、十六转十进制
每个数*对应基数的N次方再累加。
2)二进制转十六进制
小数点为界,四位一组,不足四位补0,每组用对进制表示。
3)十六进制转二进制
一个十六进制用等值的四位二进制代换。
4)十进制转二、八、十六进制
整数部分:除二、八、十六取余,直到商为零为止,倒序取余。
小数部分:乘二、八、十六取整,直到乘积的小数部分为0时为止,顺排。
第二节 计算机系统的基本组成
一、计算机系统组成
1)硬件:构成计算机的设备实体。
冯诺依曼时20世纪最重要的数学家之一,被后人成为计算机之父和博弈论之父。现代计算机的硬件结构仍然是在冯诺依曼提出的计算机逻辑节后和存储程序概念的基础上建立起来的。
硬件系统有:运算器、控制器、存储器、输入、输出五大部分。
计算机硬件技术中,把计算机的核心部件 运算器和控制器合称为中央处理单元,简称为CPU。
CPU和存储器系统、I/O接口、电源系统、I/O设备组成了计算机系统的主机。
输入输出设备被称为外部设备。
2)软件:计算机的软件又分为系统软件和应用软件两大类。
系统软件是使用管理计算机本身的软件,具体的有面向计算机的软件。如操作系统等。数据库管理系统,如oracle,mexico等管理软件,计算机网络管理软件,语言处理和服务性软件。
应用软件是计算机用户在各自的义务领域中开发和使用的各种软件是为解决某一实际问题和编制的程序,例:学校教务,学生后勤的管理软件,天气预报中的数据处理软件,建筑业中的框架设计软件,生产企业的仓库管理软件等。
二、微型机的硬件结构
计算机按其性能、价格、体积可以分为巨型机、大型机、中型机、小型机、微型机、工作站和服务器,利用大规模集成电路,把计算机中运算器和控制器以及相关电路,制作在一块芯片上,通常称为:MPU(微处理器),它是微型计算机的核心,通常对CPU和MPU不做区分。
微型计算机就是以CPU为核心,配置一定容量的存储器,加上必要的输入输出接口电路,通过总线结构链接起来的一台机器,它的系统结构和基本工作原理和其他几类计算机并没有本质上的区别。
三、微型计算机的存储器
微型计算机中的存储器是具有记忆功能,是能够接收保存和取出信息的设备,计算机中的信息是指程序数据和文件,这里所讲的存储器。
系统中的内存储器,也称主存储器简称为内存和主存,作为外设的辅存是不同的,微型计算机当中的I/O接口是CPU与I/O设备之间进行信息交换的中转站。
由于外部设为种类繁多有机械式电动是和电子式等且一般说来与CPU相比他们的工作速度较低,外设处理的信息有数字量,模拟量和开关等。而微型计算机只能处理数字量,另外外设和卫星计算机工作的逻辑时序也可能不一致。鉴于上述原因,微型计算机与外设之间的连接及信息的交换不能直接进行。必须设计一个接口电路作为两者之间的桥梁。这种接口电路又叫做I/O适配器,外设不同与之配套设计的接口电路区别也很大。需要再次强调外部设备不能直接与CPU交换信息,必须通过接口电路,总线是连接CPU与存储器I/O接口的公共导线,是计算机内部个部件信息传输的公共通道。
微型系统有三条中线分别是地址总线,数据总线和控制总线。
那么三条只是习惯说法。实际上每一条总线都有若干根。
地址总线是传输地址信息用来选址存储单元和I/O端口,地址总线的宽度决定了系统内存的最大容量。
8088/8086有20根地址线,他可以寻址一兆字节的内存。
80486有32根地址线可寻址四个G字节的存储单元,数据总线传输数据信息,8086 CPU与存储器I/O端口之间传递信息使用16位数据线,80486有32根数据线,这意味着,CPU和存储器I/O端口每一次可以传输32位的数据, 控制总线对于不同CPU来讲,起条数不一样,控制线向系统各部件发出或接收各种控制信号,从信息流向的角度讲,地址总线通常是单向总线,地址信息由CPU发出,数据总线是双向总线,控制总线中大部分是单向的,他们是CPU发出的操作命令,或者是其他部件向CPU提出的请求信号,只有少数控制线是双向控制线,
四、基本属于读、写
两个基本术语读与写。
所谓读,是指信息通过总线向外部送往CPU外部,是指存储器或输入输出设备。
所谓写,是指信息从CPU模块送往外部的存储器或输入输出设备。
五、微型计算机的基本工作过程
微型计算机的思想是存储程序和程序控制,也就是说,程序由多条有逻辑关系的指令组成,指令是程序员发出的计算机能识别的通知cpU执行某种操作的命令,指令的长度不等,一般为1到4字洁计算机的工作,就是逐条执行有指令构成的程序。
所谓存储程序,就是指将指令数据以二进制形式存入计算机系统的存储器中,存放位置有地址指定地址码也是二进制形式,
所谓程序控制,就是指启动以后,应能自动执行存储器中的程序
即计算机按程序的流程,自动地连续取出,存放在存储器中的指令。
并自动执行之完成预定的操作。
为了实现自动连续地执行程序CPU的控制器需设置一个程序计数器PC它可根据指令的长度,自动增亮,也就是说,这个计数器总是指向下一条指令。
只要给出程序中第一条指令的地址,控制器,就可依据存储程序中的指令顺序周而复始的取指令,译码,执行,直到完成全部指令操作为止及,即控制器通过指令流的串行驱动,实现程序控制。
第三节 存储器的基本概念
一、基本术语
1、存储器是指系统的主存储器,简称为内存或主存。用来存放当前运行的程序和当前程序所需的数据。
2、存储元:是存储器最小的组成单位,用以存储1位二进制代码。称为一个比特。
3、存储单元:是CPU访问存储器基本单位,由若干个具有相同操作属性的存储元组成。
4、存储体:存储单元的集合,是存放二进制信息的地方。
5、单元地址:在存储器中用以表识存储单元的唯一编号,CPU通过该相应的存储单元。
6、存储器:存储体和地址译码电路、读写控制电路等一起构成存储器。
7、位(bit)是计算机所能表示的最小最基本的数据单位,它指的是取值只能为0或1的一个二进制数值位。位作为单位时记作b。
8、字节(byte)由8个位二进制组成,通常用作计算存储容量的单位。字节作为单位时记作B。
9、KB(2的10次方)、MB(2的20次方)、GB(2的30次方)、TB(2的40次方)
10、存储单元的二进制地址码,由CPU通过地址总线送存储器的地址译码器的输入。为了方便,习惯上书写成16进制。
11、地址码的二进制位数即地址线的条数越多,访问的存储单元数目也就越多。
12、地址线条数决定了访问内存的容量:N条地址线,可以访问2的N次方个字节存储容量。
13、1MB容量的存储器地址范围:00000H~FFFFFH,由20根地址线提供地址码。
4GB容量的存储器地址范围:00000000H~FFFFFFFFH,由32根地址线提供地址码。
14、微型计算机通过给各个存储单元规定不同的地址来管理内存储器。
15、CPU对存储器的挫折由两种方式:
读:CPU从存储器取出信息;
写:CPU向存储器存入信息。
CPU将内存单元的内容取出,读入CPU内部称为存储器读操作。
CPU将其内部的信息传送到内存单元保存起来称为存储器写操作。
二、存储器的分类
1、按存储介质分:半导体存储器:用半导体器件组成
磁表面存储器:用磁性材料做成
2、按存储器的读写功能分:
只读存储器(ROM):存储的内容固定不变,只能读出而不能写入的半导体存储器。
随机读写存储器(RAM):存储的内容可读可写的半导体存储器。
3、按在计算机系统中的作用分:
主存储器:存放运行的指令和数据(存取速度较快,存储容量小)
辅助存储器:外设——存储程序和数据(存取速度慢,存储容量大)
高速缓冲存储器Cache:主存的一部分,可进行高速存取指令和数据(速度快,容量小)
控制存储器:CPU内部控制的主要组成
4、
RAM,随机存储器,是内存的重要组成部分,CPU执行指令可对其进行读,写操作。
静态RAM(SRAM):集成度低,信息稳定,读写速度快。
动态RAM(DRAM):集成度高,大,缺点是信息存储不稳定,只能保持几个毫秒,为此要不断进行”信息再生”,即进行刷新操作。容量
三、存储器在计算机中的作用
- 内存条:由于动态RAM集成度高,价格较便宜,在微机系统中使用的动态RAM组装在一个条状的印刷板上,系统配有动态RAM刷新看过浓汁电路,不断对所存信息进行再生。
- 高速缓冲存储器Cache:位于CPU与主存储器之间,由高速静态RAM组成。容量较小,位调高整机的运行速度而设置,应用程序不能方位Cache。CPU内部也有Cache。
- ROM,只读存储器,所存信息只能读出,不能写入。
- ROM/EPROM在微机系统中的应用:存放基本的输入输出系统程序(简称BIOS),是及玄机最底层的系统管理程序,操作系统和用户程序均可调用。
第二章80X86处理器
第一节Intel微处理器发展概况
一、发展概况
微处理器是微型计算机系统的核心部件,是采用大规模或超大规模集成电路技术做成的半导体芯片。
作为全球最大的个人计算机零件和CPU,英特尔logo深入人心,X86是英特尔对所有86系统的简单通配符定义。随着CPU技术的不断发展,英特尔陆续研制出了更新型的处理器,为了保证计算机能继续运行以往开发的各类应用程序,以保护和继承丰富的软件资源,整个系列的CPU都是指令兼容的,所以就用X86来标识所使用的指令集合。如近的奔腾,酷睿处理器也都属于X86家族。
与微处理器有关的常用术语:
- 字长(数据宽度):字长是微处理器一次可以直接处理的二进制数码的位数,它通常取决于微处理器内部同意寄存器的位数和数据总线的宽度。微处理器的字长有4位,8位,16位,32位和64位等。
- 寻址能力:指CPU能直接存取数据据的内存地址的范围,它由CPU的地址总线的数目决定。
- 主频:也叫时钟频率,用来表示微处理器的运行速度,主频越高,表明微处理器运行越快,主频单位是MHz,GHz。
- MIPS:是Millions Of Instruction Per Second的缩写,每秒钟能执行多少百万条指令。用来表示微处理器运算速度的性能。
- 微处理器的集成度:指微处理器芯片上集成的晶体管数目。
二、内部结构
通常来说,为了运行程序和处理数据,CPU由实现最基本功能的运算器、控制器和内部寄存器组三部分组成。即含了寄存器组及相关电路的总线接口单元BIU和含了运算器、控制器和寄存器组的执行单元EU。但由于随着计算机技术的不断发展,CPU的功能越来越强大,所以在原有基本功能模块的基础上,CPU内部也集成了一些扩展模块。
1、微处理器的基本功能模块:
总线接口单元BIU:寄存器组及相关电路
由段寄存器CS、DS、SS、ES和指令指针寄存器IP及内部的暂存器、指令队列、地址加法器及总线控制电路组成。它的主要作用是负责执行所有的外部总线操作及当EU从指令队列中取走指令时,BIU即从内存中取出后续的指令代码放入队列中。当EU需要数据时,BIU根据EU输出的地址,从指定的内存单元或外设中取出数据,以供EU使用。当运算结束时,BIU将运算结果送到指定的内存单元或者外设中。
执行单元EU:运算器和控制器、寄存器组
执行单元EU由通用的寄存器和算数逻辑单元ALU及相关控制电路组成。它的主要作用时分析和执行指令。即EU控制电路从指令队列取出指令代码,经译码发出相应的控制信号,数据在ALU中进行运算,运算过程及运算结果的某些特征,将保留在标志寄存器中,指令队列使EU和BIU并行工作取指令操作,分析指令操作重叠进行,从而提高了CPU的利用率,加快了整机的运行速度。
8086设计中引入了指令流水线和存储器分段技术,其他还有存储管理,指令预取,分支预测,浮点处理,并行计算,另外80286还有虚拟存储、特权保护、任务管理等功能,支持多用户和多任务系统。
2.附加:
RISC:精简指令系统的计算机
提供数据较少、格式与功能简单、运行高效的指令。追求的是计算机控制器实现简单,运行高速,更容易在单块超大规模集成电路的芯片内制作出来。
CISC:复杂指令系统计算机
相对于RISC一词而提出的。特点:指令条数多,格式多样,寻址方式复杂,每条指令的功能强大。汇编程序设计容易些,但计算机控制器的实现困难多,很多指令被使用的机会并不多。
流水线:是一种使多条指令重叠操作的技术,是当代微处理器设计中的关键技术之一。
把一条指令分解成若干个步骤来完成,在流水线上称为级,每级都在一个时钟周期内完成各自的操作。这样每个时钟周期都可以启动一条指令,M级的流水线上就会有M条指令在同时执行。
流水线的性能比非流水线作业几乎提高了M倍。
超标量流水线:标量指单个量,一般的流水计算机因只有一条指令流水线,所以称为标量流水计算机,所谓超标量是指其具有两条以上的指令流水线。
分支预测技术:所谓分支预测是指当遇到转移指令、CALL调用指令、RET返回指令、INT n中断指令等跳转指令时,指令预取单元能够较准确地判断是否转移取指。
第二节32位微处理器内部结构
80486微处理器内部结构寄存器
486内部寄存器分为4类:基本结构寄存器、系统级寄存器、调试测试寄存器、浮点寄存器。
1、通用寄存器(32位、16位、8位:
EAX累加器
EBX基址寄存器
ECX计数器
EDX数据寄存器
EIP指令指针
ESP堆栈指针
EBP基址指针
ESI源变址寄存器
EDI的变址寄存器
低16位可以单独使用:
AX累加器
BX基址寄存器
CX计数器
DX数据寄存器
IP指令指针
SP堆栈指针
BP基址指针
SI源变址寄存器
DI的变址寄存器
其中AX累加器、BX基址寄存器、CX计数器、DX数据寄存器又可作为两个8位寄存器(高、低位)来用。即AH、AL、BH、BL、CH、CL、DH、DL。都是用于赞成操作数、运算的中间结构和其他一些信息。
指令=操作码+操作数
IP指令指针、SP堆栈指针、BP基址指针、SI源变址寄存器、DI的变址寄存器为寻址存储单元提供16位偏移地址。
IP指令指针,32位的寄存器称为EIP,EIP中存放相对与代码段寄存器CS给出的基地址的偏移量,EIP的低16位可做独立使用的寄存器称IP,它在实地址模式时,与CS组合以后,形成指令所在内存单元的20位物理地址。
SP堆栈指针,应用时其内容作为访问堆栈栈顶所在单元的16位偏移地址,与SS段寄存器的内容结合,一起形成栈顶单元的20位物理地址。
BP、SI、DI寄存器在应用时也可为存储器寻址,提供某内存单元的偏移地址,所以也被称为指针寄存器。
上述寄存器除IP意外都可以作为数据寄存器使用。
2、标志寄存器
EFLAGS为32位寄存器,低16位可做独立的标志寄存器FLAGS,FLAGS又称为程序状态字PSW,为16位寄存器。
作用:记录CPU运行结果的状态标志,控制CPU的某种操作。
EFLAGS和FLAGS中的标志位分为状态位和控制位两类。即提供两类标志。
状态标志:表示前面的操作执行后,算术逻辑部件处于怎样一种状态,这种状态会像某种先决条件一样影响后面的操作。有SF、ZF、PF、CF、AF、OF。
控制标志(由程序设计者来设置):DF、IF、TF。每个控制标志都对某一种特定的功能起控制作用。指令系统中由专门的指令用于控制标志的设置和清除。
3、段寄存器
设计程序时,一般把指令代码和数据代码放在不同的存储器空间。
80X86微处理器内部有六个16位的段寄存器,用于指示代码和数据所用的地址空间。即代码段寄存器CS、堆栈段寄存器SS、DS、ES和GS都称作数据段寄存器。除CS是用于指示代码的地址空间外,其他段寄存器都用于指示数据的地址空间。
段寄存器和偏移地址寄存器一起形成20位存储单元的物理地址,对存储器中存放的程序,数据、堆栈区域加以区别。
第三节32位微处理器工作模式
一、 32位微处理器地址空间
1、存储地址空间(物理、虚拟、线性)
物理空间是计算器中主存储器的实际空间,也称主存空间。相应的地址乘坐物理地址或主存地址。
例如8086的地址线为20根,其最大访问主存空间为1兆个字节的存储单元,每个存储单元存储一个字节,地址范围编码为00000H~FFFFFH。80486的地址线为32根,其最大访问主存空间为2的32 个字节,即4GB,地址范围编码00000000H~FFFFFFFFFH。
物理地址与主存单元是一一对应的,对主存的访问最终必须通过物理地址来实现。
虚拟空间又称为逻辑空间,是应用程序员编写程序的空间,此空间对用的存储器称为虚拟存储器。CPU内部的存储管理部件把主存和辅存看作是一个整体,即虚拟存储器。
允许编程空间为2的46次个字节。即64TB。程序员可在此地址范围内编程,大大超过物理地址空间。该空间对应的地址称为虚拟地址或逻辑地址。程序运行时,操作系统从虚拟空间取一部分程序代码载入物理空间运行。当程序运行需要调用的程序和要访问的数据不在物理存储器时,擦偶哦系统再把那一部分调入物理存储器……数的交换极快,程序察觉不到。
当程序从虚拟空间调入物理空间的时候,要进行地址抓换。
32位微处理器的分段部件首先把虚拟地址转换为线性空间的32位线性地址,该地址对应的空间就是线性空间。
如果不分页的话,线性地址就是物理地址。
如果分页的话,则由分页部件把线性地址转换位物理地址。
32位的处理器工作在实模式时,存储空间仅分段 不分页。当工作在保护模式时,存储空间先分段再分页。
2、输入输出地址空间
即I/O空间。486利用低16位地址访问I/O端口,所以I/O端口最多有2的16次方 等于64K,I/O地址空间为0000H~FFFFH。
I/O地址空间不分段。
二、32位微处理器工作模式
实地址模式、保护虚拟地址模式和虚拟8086模式简称位实模式,保护模式,虚拟86模式.
实地址模式是80X86工作的基础,早期的处理器只能工作在单一的实地址模式下,随着计算机的发展,后期的处理器可以在多个模式下工作。
实地址模式全称为实地址存储管理模式,16位微处理器只能在实模式下工作,可以向下兼容。32位微处理器可以向下兼容。
实地址模式特点:
1.处理器加电、复位之后,486主动工作在实模式,系统在DOS管理下;寻址机构、存储管理和中断机构均与16位机一致。
2.微处理器的地址线仅低20根起作用,只能访问主存储器最低端的1MB存储空间(00000H~FFFFFH)
3.存储管理部件对存储器只采用分担技术,每个逻辑段最大不超过64KB。
4.该模式下,段寄存器中存放段基址
实模式下,不同存储空间存储单元的地址表示形式不同。
物理空间也就是物理地址,是指1MB存储区域中的某一单元地址,地址信息是20位的二进制码,以16进制表示就是00000H~FFFFFH中的一个单元,CPU访问存储器时,地址总线上送出的时20物理地址。
编程空间也叫虚拟空间、逻辑空间。编制程序采用逻辑地址。程序时分段的。逻辑地址由段基址和偏移地址做成,书写成 段基址:偏移地址。
保护虚拟地址模式也叫保护模式。
计算机的软件由操作系统和应用程序组成,操作系统和应用系统之间有联系、又相互独立,在程序运行过程中,为防止应用程序破坏系统程序,某一应用程序破坏了其他应用程序,错误的把数据当做程序运行等情形出现,为了实现系统程序与应用程序之间,各个应用程序之间以及程序和数据之间相互独立所采取的措施。称作保护。这种保护机制是由硬件和软件共同配合完成的。
32位为处理器工作在保护模式时,充分发挥了32位微处理器所具有的存储管理功能,以及硬件支撑的保护机制。这就为多用户操作系统的设计者提供了有力的支持。与此同时,在保护方式下,奔腾处理器也允许运行8086、80286、80386和80486的软件。
保护模式特点:
1.486支持多任务操作系统
2.486可以访问4G物理存储空间。存储器用虚拟地址空间、线性地址空间和物理地址空间三种方式来进行描述,虚拟地址就是逻辑地址。寻址机构不用于8086,通过一种称为描述符表的数据结构来是心啊对内存单元的访问,该描述符由存放在段寄存器中的选择符来趋稳定。
3.CPU内部的存储管理部件对存储器采用分段和分页管理。可以将磁盘等存储设备有效映射到内存,使逻辑地址空间按大大超过实际的物理地址空间,这样使主存储器容量似乎很大、
4.既能进行16位运算,也能进行32位运算。
486工作在保护模式下,才能真正发挥他的设计能力。
关于保护基址:高级别的程序可以访问同级或地址的数据段,反之则不行(向下兼容)。
采用的环保护方式,即在用户程序与用户程序之间,以及用户程序与操作系统之间隔离。
32位微处理器的环保护功能是通过设置特权级实现的,特权级分为4级,最低数级别最高。0操作系统核心,1、2系统服务及接口,3应用程序。
虚拟8086模式是保护模式下的一种特殊工作模式,可运行实模式程序。在操作系统管理下,486可以分时地运行多个实模式程序。
第三章汇编语言指令集
第一节指令概述
1.指令:是指CPU操作的基本单位,每条指令执行一个特定的操作。可以理解为:指令是通知CPU执行某种操作的命令
CPU全部指令的集合,称为指令集。
2.指令的分类
机器指令:二进制格式编码的序列(一串0,1代码书写)。注意:硬件只能识别,存储,运行机器指令。
符号指令:用字符串形式的序列(包含字符串形式的操作码以及操作数助记符)表示。
3.指令的组成
标号:操作码助记符 空格 操作数助记符 ; 注释
操作码:计算机要执行的操作,如:加、减、逻辑与等。
操作数:执行操作过程所要操作的数,如加运算的两个加数。
4.指令的长度
指令在存储器中占用的字节数称为指令长度。80X86指令长度(机器指令长度)为1~16字节。
5.指令的地址
多字节指令占用连续的内存单元,存放指令第一字节的内存单元地址,称为指令地址。
6.指令的存放
首先存放操作码,然后存放操作数。多字节操作数连续存放,顺序一句小端法规则,即:低位字节存放在低地址单元,高位字节存放在相邻的高地址单位。
第二节标志寄存器
32位CPU标志寄存器为32位,实际使用15位。
15位标志分为两类:状态标志和控制标志。
状态标志记录了当前指令执行后的状态信息。
控制标志用来控制微处理器操作。
D0为起点。
一、C标志——进位/借位标志
字节/字/双字加减,最高位(D7、D15、D31)产生进位/借位时:C标志置1,否则置0。
二、A标志——辅助进位/辅助借位标志
字节、字、双字加减,D3位产生进位/借位时:A标志置1,否则置0。
三、S标志——符号标志
字节、字、双字运算后,最高位(D7、D15、D31)为1时:S标志置1,否则置0。
四、Z标志——零标志
运算结果全为0时,Z标志置1,否则置0。
五、P标志——奇偶标志(实际上是偶标志)
运算结果的低8位中,若“1”的个数为偶数个,则P标志置1,否则置0。
六、O标志——溢出标志
则加数与被加数的最高位相同,却与结果的最高位相异,(超出长度的那一位不是最高位),则O标志置1,否则置0。
程序员如何判断溢出:
有符号数运算,判O标志,O标志为1,有溢出
无符号数加/减,判C标志,C标志 为1,有溢出
第三节寻址方式
操作数是指令的操作对象,寻址方式就是在指令中,使用特定的助记符(地址表达式),告知CPU如何计算出操作数的地址,从而正确地取出操作数进行后继的指令操作。
寻址方式通俗来说,就是通知CPU本条指令的操作数在哪?或者说用什么方式才能得到操作数。
一、操作数的分类
操作数包含在指令中,这种操作数称为立即数。
操作数存放在CPU的某个寄存器中,这种操作数称为寄存器操作数
操作数存放在存储器中,这种操作数称为存储器操作数(内存操作数)
操作数存放在I/O端口中,这种操作数称为I/O端口操作数
一、立即寻址:获得立即数(1种)
立即寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在代码段区域中。立即数可以是8、16、32位
操作数是指令的一部分,完整的取出该条指令,也就获得了操作数。
例子:(以二进制的形式存放在寄存器当中)
当操作数是十六进制,前面要加个0.
二、寄存器寻址:获取寄存器操作数(1种)
操作数在CPU的某个寄存器中,符号指令中直接写出寄存器的名称。
例:
三、存储器寻址方式:获取内存操作数(存储器操作数)(5种)
在读写内存操作数之前,CPU必须知道相关存储单元的物理地址。由于CPU对存储器采用分段管理,因为此指令格式种只能鞋出存放操作数的内存单元的”逻辑地址“。程序云的责任仅在于正确的书写逻辑地址表达式,然后由CPU自动运算一求出物理地址。
段寄存器:偏移地址
1.直接寻址
(1)地址表达式的格式1:段寄存器:[偏移地址]
例: MOV AL,ES:[2CH]
从ES附加段偏移地址为2CH的单元取数 ——AL
例: MOV AX,DX:[2000H]
从数据段偏移地址为2000H的单元取一字——AX
(2)地址表达式的格式2:段寄存器:变量名
用变量名代表存储单元的有效地址,变量名是唯一的,程序种不能有重复的变量名。
段寄存器可以省略。
变量名由段基址和偏移量两种属性。
2.寄存器间接寻址
寄存器间接寻址又称间接寻址,间址。操作数在内存单元,该地址的段基址在段寄存器中,偏移地址在间址寄存器中,CPU首先进行地址计算。
3.基址
该寻址方式的偏移地址由两部分组成。一部分在基址寄存器中,另一部为常量。
4.变址
5.基址+变址
第四章 汇编语言程序设计
第一节、汇编语言程序的结构
完整的汇编语言源程序在结构上必须做到:
用方式选择伪指令说明执行该程序的微处理器类型;
用段定义语句定义每一个逻辑段;
用ASSUME语句说明段约定;
用汇编结束语句说明源程序结束;
一、方式选择伪指令
功能:通知汇编程序,源程序经过汇编链接后生产哪一个CPU类型的机器指令。
应用:源程序第一条指令,指令以句号开头
例:.586
说明:不设置方式伪指令,即默认.8086
二、段定义语句
格式:段名 SEGMENT 定位参数 链接参数 ‘分类名’ 段长度
段体
段名 ENDS
功能:是逻辑段的定界语句,源程序中的每一个逻辑段都必须用段定义语句定界。
段名:命名规则和变量名及标号一样,它不能代表段体的性质,但为了方便阅读,习惯上总是根据段体的性质起一个适当的段名。通常用DATA作为数据段的段名,用STACK作为堆栈段的段名,CODE为代码段的段名。
定位参数 链接参数 ‘分类名’:为段定义语句的三个属性参数,可以选1~3个,也可以全部省略。为源程序的汇编、链接提供必要的信息。
段长度:有两种描述方式可供选择:
- USE16:表示该逻辑段长度最大允许为64K,单元的有效地址为16位,访问该逻辑段应采用16位寻址方式。
- USE32:表示该逻辑段长度可以超过64K,单元的有效地址为32位,访问该逻辑段应采用32位寻址方式。
说明:
- 模块化程序中必要考虑各模块之间同名段的定位方式和链接方式。对于单一模块的程序不需考虑这些问题。
- 单一模块的程序,如果有堆栈段的话,堆栈段的链接属性应为STACK(因为只有STACK属性才表示该段是堆栈段),分类名也应用‘STACK’,且不能省略。其他逻辑段,前3个属性参数都选用缺省方式。
- DOS环境下运行的程序选用USE16做段长
三、段约定语句
格式:ASSUME 段寄存器:段名,……,段寄存器:段名
功能:ASSUME 语句通知汇编程序,寻址逻辑段使用哪一个段寄存器。
说明:ASSUME语句是非执行语句,要求放在代码段之中,执行寻址操作之前。习惯上,把ASSUME语句作为代码段的第一条语句。ASSUME语句仅仅是约定了对某个逻辑段进行寻址操作时使用哪一个段寄存器,二段寄存器的初值还必须在程序中用指令设置。
四、汇编结束语句
格式1:END 程序的启动地址标号
例:END BEFIN
功能:通知汇编程序,源程序到此结束,用BEGIN作为标号的指令时程序的启动指令。
注意:在单一模块的源程序中,以及在模块化程序的主模块中必须用此格式作为源程序的最后一条语句。DOS装在程序的可执行文件(EXE文件)时,自动把标号BEGIN所在段的段基址赋给CS,把BEGIN所在单元的偏移量赋给IP。从而CPU子宫从BEGIN开始的那条指令依次执行程序。
格式2:END
功能:通知汇编程序,源程序到此结束。在模块化程序的子模块中,必须用此格式作为源程序的最后一条语句。
五、返回DOS语句
程序在完成预定任务之后,必须返回DOS。返回DOS最常用的方法是使用DOS系统4CH功能调用,即连续执行以下2条指令:
MOV AH ,4CH
INT 21H
第二节、汇编源程序的编程格式
说明:COM文件的执行级别高于EXE文件,同名的BAT(批处理)文件执行级别最低
一、EXE文件的编程格式:只能生成扩展为EXE的可执行文件
此格式允许源程序使用多个逻辑段(包括数据段、堆栈段、代码段及其它逻辑段);在是模式下,每个逻辑段的目标块不超过64K;适合编写大型程序。
例:加法程序实现46H+52H,并将运算结果存放在数据段变量SUM中。
源程序:
.586
DATA SEGMENT USE16
SUM DB ? ;预留一个随机的内存单元
DATA END
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:MOV AX,DATA
MOV DS,AX
MOV AL,46H
ADD AL,52H
MOV SUM,AL
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END BEG
二、COM文件的编程格式:可以生成扩展为COM的可执行文件。
汇编语言要求此格式必须符合一下规定:
- 源程序只允许使用一个逻辑段,即代码段,不允许设置堆栈段。
- 代码段目标块小于64K,适合于编写中小型程序。
- 程序使用数据,可以集中设置在代码段的开始或末尾
- 需使用定位ORG伪指令将程序的启动指令存放在代码段偏移地址为100H的单元。
定位伪指令
格式:ORG 表达式
功能:用于通知汇编程序将下一条指令或数据存放在表达式给出的段内起始偏移地址。
例:DATA SEGMENT USE16
ORG 0017H
KEYFLAG DB ?
DATA ENDS
三、汇编语言程序的开发过程
第三节、系统功能调用(DOS/BIOS调用)
DOS的四个组成部分中IBMBIO.COM使DOS系统的核心模块,为基本I/O设备处理程序,于BIOS一起完成数据输入和数据输出的基本操作。
DOS和BIOS均有若干子功能可以被用户程序调用,称为“DOS调用”和“BIOS调用”
BIOS/DOS调用模式
MOV AH,功能号 ;设置入口参数
INT n ;分析出口参数
说明:
- n值因子程序不同而不同,比如:ROM BIOS有n=5~1FH,DOS 有n=20H,21H,23~2AH,2EH,2FH,33H和67H等几种情况。有得n只对应一个子程序,有的n对应很多子程序。
- 调用结束后一般都有出口参数,这些出口参数常放在寄存器中,通过出口参数可以知道功能调用得成功与否。
- 在DOS功能子程序调用中,我们把通过INT21H来实现得子程序调用称为DOS系统功能调用。
DOS功能调用——INT 21H
BIOS功能调用——INT16H键盘功能调用
主板EPROM中固化有基本I/O系统程序——BIOS,它是最接近硬件的驱动程序,BIOS中的许多子程序可被用户程序调用,调用这些子程序称为BIOS功能调用。
BIOS功能调用——INT10H文本显示功能调用
第四节、汇编语言程序的设计方法
程序设计方法——顺序、分支、循环、子程序、宏指令
主程序向子程序传送参数主要有三种方式:
- 利用寄存器传送参数
- 利用堆栈传送参数
- 利用某个内存单元传送参数
宏指令程序设计
子程序调用可以简化程序,但是如果子程序的参数太多,调用时太麻烦,汇编语言提供了另一种简化的途径——宏指令
- 宏指令是汇编语言提供的伪指令。是用户自行定义的若干指令的集合。
- 宏指令的定义,可以不在任何逻辑段中,习惯上放在源程序首部
- 宏指令应该先定义后调用(子程序可以先调用后定义)
说明:宏体经过定义之后,宏指令的名称就是一条宏指令,在代码段中防置一条宏指令就是宏调用。编译时汇编程序用宏体替换宏指令
- 实元表是一串用逗号(或空格)间隔的立即数,寄存器操作数或者是没有PTR说明符的存储器操作数。
- 汇编时,汇编程序自动地把实元(实参)一一对应的赋给哑元(形参)
子程序与宏指令的比较
共同点:
- 宏指令与子程序都可以简化程序设计,增强程序的可读性。
不同点:
- 子程序调用是由CPU完成的,宏指令调用是在汇编过程中由汇编程序完成的。
- 子程序调用可以减小目标程序的体积,宏指令则不能。
程序设计举例——代码转换、数据处理
数据处理(字符串比较)
例:比较从键盘输入的字符串STR1,和数据段中定义的字符串STR2是否相等。若相等,则置FLAG单元为”Y“,不相等则置为”N“
思路:把2串字符分别置于数据段和附加段
第五章 输入/输出系统
第一节、总线概念
一、32位微处理器的外部引脚(缺内构
1.数据线及控制信号
D63~D0:共64位 双向数据线 可以传输8个字节的数据
每个字节对应字节允许信号BE
PCHK,读校验出错时为0,送外部电路标识校验出错。
PEN,若该信号输入为低电平,则在读校验出错时,处理器会自动进行异常处理
2.地址线及控制信号
3.总线周期控制信号
CPU通过总线与存储器、I/O交换一个数据所需要的时间称为总线周期。而执行一条指令所需要的时间称为指令周期。
一个指令周期通常由一个或者几个总线周期组成。
4.系统控制信号
称为时钟周期或者T状态
5.总线仲裁信号
二、总线和总线标准
1.总线的类型
总显示构成计算机系统的互联机构,是多个系统的功能部件之间进行数据传送的公共通路。通过总线可以传输数据信息、地址信息以及各种控制命令和状态信息。
按总线传输的信息的性质分:地址总线、数据总线、控制总线
按总线的连接对象和所处系统的层次分
芯片级总线:使用于模块内芯片级的互联,是该芯片与外围支撑电路的连接总线。
如连接CPU及周边的协处理器、总线控制器、总线收发器的总线称为CPU局部总线或者CPU总线。连接存储器及其支撑芯片的总线,称为存储器总线。
系统总线:是连接计算机内部各个模块的一条主干线,是连接芯片级总线、局部总线和外部总线的纽带。
系统总线包括 地址总线、数据总线、控制总线。系统总线符合某一总线标准,具有通用性,是计算机系统模块化的基础。由于经过缓冲器驱动,负载能力比较强。
局部总线:是用来连接处理器和高速缓存,支持一个或者多个高速局部设备或者模块。通过高速缓存控制器连接到局部总线和系统总线,经系统总线连接到所以的主存储系模块
外部总线又称为设备总线或者输入输出总线,是连接计算机与外部设备的总线。
2.典型总线标准
PC系列机主板上的总线标准有
AT(ISA)总线
EISA总线 VESA总线
PCI总线
3.通用外部总线标准
4.32位微型计算机总线结构
第二节、输入输出系统概念
1、输入/输出接口的概念
输入输出系统是微型计算机系统中,主机与外部设备进行数据交互的系统,由于外设种类繁多,信号类型复杂,在微型计算机和外设之间,必须设有输入输出接口,以使CPU与外设信息交换能够达到最佳匹配,实现高效可靠的信息交换。
源程序或者原始数据要送到CPU必须通过输入接口电路,而运行的结果要送到输出设备时,必须通过输出接口电路。
接口是CPU与外部设备交换信息的中转站。
接口电路的功能:
- 数据暂存功能(在接口电路当中,一般都要设置数据缓冲器或者锁存器,用来实现系统内外信号的隔离和信号的稳定,以解决高速主机与低俗外设数据速率诧异的矛盾,避免因数据信号速率不同而丢失信息。)
- 端口地址译码器(便于使用IN,OUT指令读写数据)
- 与外设之间有联络功能(某些接口电路应该能向CPU系统提供外设的状态,或者通知外设CPU系统的状态)
- 有中断管理能力(在高性能的接口电路中,为了便于CPU使用中断方式和端口寄存器交换信息,接口电路中应设置中断控制电路,允许或者禁止接口电路提出中断请求)
- 有数据转换功能(并转串,串转并)
2.端口的概念和编址方式
端口是接口电路中,通常会包含一组寄存器,用来实现接口的各项功能,这些能与CPU交换信息的寄存器,就称为输入输出端口寄存器,简称为端口。端口与CPU之间是使用指令IN。OUT来交换信息的。
端口的分类:
数据口:存放CPU向外设输出或者外设输入的数据(接口电路必须具有数据口)
控制口:存放控制信息——控制接口电路、外设的工作。
状态口:存放状态信息——反映外设的状态
每个端口,系统都为它编了一个地址,系统只要给出某个地址,通过译码电路,就能找到相应的I/O接口电路中的端口寄存器。
编址方式:
存储器映像方式:把端口和存储单元等同看待,统一编址。特点:凡访问存储单元的指令都可访问I/O端口,端口地址占用存储空间。
I/O端口独立编址:I/O端口和存储器分别使用两个地址空间,单独编址。特点:I/Oduankou不占用存储空间,CPU要用专用的I/O指令
PC系列机次啊用端口独立编址:从8088~奔腾微处理器,设计时用A15~A0低16位地址寻址I/O端口;所以CPU的端口寻址能力位2的16次方即65536个。
总线周期控制信号M/IO是存储器和I/O访问信号。低电平时访问I/O端口,高电平时访问存储器。
因此,存储器空间和输入输出空间是两个独立的空间。
基于微处理器的PC系列机,实际使用A9~A0做I/O地址;所以,PC系列机I/O端口最多为2的十次方为1024个。这1024个口地址,系统本身(主板上,以及常规I/O接口)已经占用了一部分。
端口地址(I/O空间)没有分段的概念。
3.常用的I/O指令(只能在端口和AL,AX,EAX之间交换信息)
(1)当n为8位端口地址(即一个字节)(直接寻址):
IN AL,n ; 口地址为n的端口中取数给AL
OUT n ,AL ;AL内容给口地址为n的端口寄存器。
IN AX ,n ;n给到AL,n+1给AH
OUT n, AX ; AL给n , AH 给到n+1;
(2)DX间址的I/O指令(当口地址n>8位二进制数时)使用时不能加方括号:
IN AL ,DX ;[DX]的端口内容 给AL
OUT DX,AL;AL的内容输出到[DX]端口寄存器
IN AX ,DX;[DX]内容给AL [DX+1]内容给AH
OUT DX , AX ;AL的内容输出到[DX], AH的内容输出到[DX+1]的端口寄存器
第三节、微机系统与外设交换信息的方式
微机系统与I/O设备的信息交换有四种方式:
采用何种方式与接口的硬件电路有直接关系
一、无条件传送方式
要求外设准备好,即输入数据已经准备好或者输出设备是空闲的,此时CPU可以直接用IN或者OUT指令来完成与接口之间的数据传送,采用无条件传送方式的接口电路,只需要设置数据口。
输入接口:在执行IN指令之前,要求外设数据已经准备好。
采用无条件传送方式的输入接口电路
二、查询方式
用查询方式交换数据前,必须先了解外设的状态
状态口和数据口
在查询方式中,CPU需要通过不断的读取状态信息来了解外设的状态,CPU的利用效率不高。
在有多个外设的系统中,多个外设要求CPU为它服务是随机的,若采用查询方式工作,就不能保证系统实时地对外设的请求做出响应,为了提高CPU的效率,使系统有实时性能,导致了中断处理技术的产生。
三、中断控制方式
特点:在外设没有做好数据传送准备时,CPU可执行与传送数据无关的其他指令。当外设做好传送准备后,主动向CPU请求中断,若CPU响应这一请求,则暂停正在运行的长须,转入中断服务程序,完成数据传送。待服务完毕后,自动返回原来运行的程序。
被中断的原程序称为主程序;
中断处理程序称为中断服务子程序;
主程序被中止的地方,称为断点,也就是下一条指令所在内存的地址。
四、DMA方式
1.什么是DMA?
DMA直接存储器存取,习惯上称DMA传送。
DMA传送:利用硬件完成高速外设与系统RAM之间的信息交换。
2.DMAC:DMA控制器 是实现DMA传送的核心芯片。
3.专用术语
DMA读传送:在DMAC控制下,读取RAM的内容 送到I/O端口
DMA写传送:在DMAC控制下,I/O端口信息 送到系统RAM某单元
存储单元读/写传送:在DMAC控制下,实现系统RAM 到RAM
4.DMA传送的过程
系统的三总线分别受到CPU和DMAC的控制,但同一时间,三总线只能受一个器件的控制。所以,两者之间必须有联络信号。
高速外设,通过其接口电路向DMAC发出”DMA请求“信号(请求DMAC为其传送数据)。
DMAC检测到有DMA请求之后,即向CPU提出总线保持请求(请求CPU脱离总线)。
DMAC收到”总线响应“信号之后,接管系统总线的控制权,并向I/O接口打出DMA响应信号。
在这之后,由DMAC控制系统总线进行DMA的传送。
a.若进行DMA读传送:
DMAC把RAM地址 送到地址总线上
DMAC发出存储器读命令和I/O写命令
b.若进行DMA写传送:
DMAC把RAM地址 送到地址总线上
DMAC发出I/O读命令和存储器写命令
预定的字节数全部传送完毕,DMAC脱离系统总线,CPU再次控制系统总线,完成被中断指令的后继总线周期。
5.DMA传送与中断方式的比较
响应时间:CPU接到”中断请求“后要等到当前指令执行完毕才响应,而CPU接到DMAC的”总线请求“后,只要当前指令的当前总线周期执行完毕就响应。
数据传送速度:DMA传送比中断传送要快!
中断传送方式是由CPU通过执行程序来实现的,每次执行中断服务程序,CPU都要保护断点。而在中断服务程序中,还需要保护现场以及恢复现场,同时执行若干的指令以后才能够传送一个字节。
由此可以看出,中断传送是由软件完成的,执行一次中断服务程序,就完成一字节的I/O传送。
而DMA传送是由硬件完成的,每传送一个字节之占用CPU的一个总线周期。
中断请求分为内部中断和外部中断。
DMA请求的方式也有两种:硬件DMA请求和软件DMA请求。
6.8237ADMA控制器
一片8237有4个DMA通道。
8237提供4种DMA传送方式:单字节读/写传送、数据块读写传送、请求传送、级连传送
一次DMA传送的最大字节数是64KB。8237A每个通道只能访问64K RAM,PC系列机由于增加了”页面寄存器“,所以一个通道能访问16兆内存。
7.四种方式的比较
第六章 中断系统
第一节、中断的基本概念
一、中断的概念
CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待事件服务结束后,又能自动返回到被中止了的程序中继续执行的过程。
二、中断接口电路
三、中断源
中断源:是指能够引发CPU中断的信息源。
四、中断分类
中断源的分类:
(1)外部中断源(硬件中断源)
I/O设备:键盘、显示器、打印机
数据通道:磁带、磁盘
时钟: 8254 0#,由此引发的中断
故障源:掉电、存储器奇偶校验出错
由外部事件所引发的中断,即由CPU以外的设备发出,并由CPU的中断请求信号引脚所引发的中断称为外部中断,也成为硬件中断。80X86CPU有连个引脚(INTR和NMI)可以接受外部的中断请求信号。
由输入到INTR引脚的中断请求信号引发的中断称为可屏蔽硬件中断。
由输入到NMI引脚的中断请求信号引发的中断源称为非屏蔽硬件中断。
(2)内部中断源(软件中断源)
执行INT软件中断指令 :如执行指令INT21H
CPU指令执行产生的异常: 如被0除,单步执行
由CPU内部事件,即由CPU硬件故障或程序执行中的事件所引发的中断称为内部中断。内部中断可以进一步分为软件中断和异常。
执行有定义的INT n 指令引发的中断,称为软件中断。
软件中断可以分为BIOS中断、DOS中断。
DOS中断又分为DOS专用中断、DOS保留中断、用户可调用的DOS中断以及保留给用户开发的中断。
由于CPU本身故障程序故障等引发的中断称为异常。
部分异常如下:
除法中断——当除法结果溢出或者除数为0时,发生的中断。
单步或陷阱中断——执行每条指令后,如果标志寄存器的T标志(陷阱标志)为1时,则产生中断。
断点中断——CPU执行“INT 3”指令后,进入相应的中断服务程序。INT 3指令通常用于调试程序时设置程序断点。
溢出中断——CPU执行“INT 4”指令,或者标志寄存器O标志(溢出标志)为1时,执行“INT O”指令,进入相应的中断服务程序。
五、中断类型码
中断类型码
为了区别各种不同的中断,微机系统给每一个中断分配了一个中断号n,即中断类型码,其取值范围是0~255.
微机系统可以处理256种中断,在这256个中断中,Intel在它各种微处理器中都保留了前32个(0~31)为系统所专用,后224个由用户设定。
六、中断向量
中断向量是实模式下,中断服务子程序的入口地址。
它由两部分组成:
服务程序所在代码段的段基址 2个字节
服务程序入口的偏移地址 2个字节
七、中断向量表
中断类型码通过一个地址指针表与中断服务程序的入口地址相联系:
实模式下:该表称为中断向量表;
保护模式下:该表称为中断描述符表。
(1)实模式下,中断向量表的设置。
CPU规定:在实模式下,中断向量表需设置在系统的RAM最低端的1K单元(00000H~003FFH)共256个(0~255)
(2)中断向量表的表地址与中断类型的关系
转二进制 乘 4(末尾补两个零)
(3)中断向量表的初始化
由BIOS设计的中断服务程序(如INT16H,INT10H……),其中断向量在加电时由BIOS负责写入中断向量表。
由DOS设计的中断服务程序(如INT 21H),其中断向量是在启动DOS时,由DOS负责写入中断向量表。
由用户程序开发的中断服务程序,由用户程序写入其中断向量。
用户如何向中断向量表中写入中断向量?
八、中断响应和处理的过程
微机系统各种类型中断的响应和处理过程补完全相同,主要区别在于中断类型码的获得方式不同,当CPU获得了中断类型码后的处理过程基本类似。
对于非屏蔽硬件中断请求,CPU内部会自动产生中断类型码2;
对于可屏蔽硬件中断请求,当CPU处于开中断状态时,由外部中断控制器将相应的中断类型码送给CPU;
对于异常,中断类型码也是自动形成的;
对于INT n 指令,中断类型码即为指令中给定的n.
F寄存器也就是标志寄存器。
中断向量的引导作用
九、中断服务子程序的结构
第二节、多级中断管理
一、中断优先与中断分级
当有多个中断源在同一时刻提出请求时,CPU对中断响应的次数称中断优先级。
中断响应的次序是用排队器硬件实现的,中断优先级如图所示。为了根据需要,可以由程序控制改变实际的中断处理次序。
二、禁止/屏蔽中断
禁止中断:产生中断请求后,CPU不能中断现行程序的执行。
中断屏蔽:用程序有选择的封锁部分中断,而允许其余部分仍可得到响应。
三、中断嵌套
中断嵌套:在执行中断服务程序时,仍可再响应中断申请。
四、中断系统的基本功能
1.对于硬件中断,接口电路应具备“屏蔽”和“开放”功能,这种功能由程序员通过软卷去控制。
2.能实现中断判优(中断排队),当有多个中断源提出请求时,应能优先响应高级别的中断源
3.能够实现中断嵌套
4.响应中断后,能自动转入中断处理,处理完毕能自动返回断点。
第三节、80X86中断指令
一、开中断STI
功能:使标志寄存器(F)中的I标志置1,CPU处于开中断状态(可以响应自于引脚INTR的可屏蔽硬件中断请求)。
I标志是用来控制CPU是否响应来自于引脚INTR的可屏蔽硬件中断请求。
二、关中断CLI
功能:使标志寄存器(F)中的I标志置0,CPU处于关中断状态(不可以响应自于引脚INTR的可屏蔽硬件中断请求)。
I标志是用来控制CPU是否响应来自于引脚INTR的可屏蔽硬件中断请求。
三、软件中断INT n
n 为中断类型码,n 为0~255之间有定义的无符号整数。
功能:无条件转向n型中断服务子程序
INT n 指令的执行过程——CPU响应软件中断的过程
四、 中断返回IRET
功能:依次从栈顶弹出6个元素 给 IP,CS,F 。如果栈顶使INTn的断口地址,则执行IRET后,返回断点,否则不能。
五、中断溢出INTO
功能:先判别F寄存器中O标志位是否为1,如是则直接调用类型为4的中断子程序,用以处理溢出中断。
第四节、中断控制器8259A
8259A功能
Intel8259A是可编程的中断控制器,主要功能如下:
通过级联,采用1主8从的方式,可扩展管理64级中断。
(2)每一级中断都可以通过设置内部屏蔽字进行屏蔽允许
(3)在中断响应周期,8259A可以向CPU提供相应的中断类型码。
(4)8259A是很复杂的中断控制器,可以通过编程从中断触发方式、中断屏蔽方式、中断优先级管理方式、中断结束方式和总线连接5个方面对中断进行管理。
8259A主从级联
一、内部结构
中断请求寄存器(IRR):寄存引脚IR0~IR7的中断请求信号,IRRi位置1,表明IRi引脚上有了中断请求信号。
中断屏蔽寄存器(IMR):寄存程序员写入的中断屏蔽字,屏蔽字某位=1(IMRi位=1),则该位对应的中断请求信号(IRRi位)就不能送到中断优先权电路。
例:
优先权电路(排队电路)
作用:1.比较同时送达优先权电路的中断请求,哪一个级别最高
2.比较CPU正为之服务的中断源和刚进入优先权电路的中断源,哪一个级别更高
通过判优“选中”其中级别更高的中断电源,然后通过控制电路,从INT端向CPU提出中断请求。
中断控制电路
作用:1.寄存一组初始化命令字和操作命令字,通过译码产生内部控制信号
2.当判优电路选中一个中断源时向CPU提中断请求(INT)
3.通过INTA接受CPU送来的中断信号,中断响应信号是两个连续的负脉冲.
当收到第一个负脉冲,使被选中的中断源对应的ISRi位置1,IRRi位置0,为下一个中断请求信号做准备。在第二个负脉冲的时候,使8259A向CPU送出被选送的中断源的中断类型码。
中断服务寄存器(ISR):8位寄存器,ISRi位和IRRi位一一对应
作用:记录CPU正为之服务的是哪一个中断源,怎样记录?
如:通过判优电路IRR0位的请求被选中,8259A向CPU发出中断请求,通过INTA收到第一个中断响应信号后,ISR0位置1,IRR0置0. ISR0位置1,表明CPU准备(或正在)执行IR0的服务程序,反之,如果ISR0位由1变0,表明IR0的中断服务程序执行完了.
所以,ISR的每一位都是响应中断源的中断服务标志位。
数据总线缓冲器
作用:1.完成与CPU数据线配接
2.接收初始化命令字,操作命令字
3.当收到第二个中断响应脉冲时,通过它们向CPU送出被选中的中断源的中断类型码n
在这之后CPU从4n+0~4n+3单元取出n型中断向量,从而转入n型服务程序。
读写控制模块
功能:接收片选信号CS,端口选择信号A0和读写控制信号RD、WR。
一片8259A在系统中占用两个口地址,用末位地址线A0选择端口,其他地址线通过译码产生8259A的片选信息。
级连/缓冲比较器
一位8259A可以管理8级中断,二片8259A“级连”可管理15级中断,级连/缓冲比较器是为完成多片8259A级连设置的模块。
二、外部引脚、中断过程(CPU响应可屏蔽硬件中断的过程)
三、中断管理方式
四、编程控制方法
286以上的微机,对8259A的编程,分两步进行:
对8259A进行初始化编程——系统加电后,由BIOS完成。
对8259A进行应用编程——编写中断程序时完成,有两项内容:
1.需要时,向8259A中断屏蔽寄存器写入屏蔽字。
2.每一个硬件中断服务程序结束前必须向8259A送中断结束命令字,通知8259A本次中断结束,否则8259A不能响应同一中断源的下次中断。即8259A收到中断结束命令字后,把ISR中的置1位清0.
第五节、PC系列机的中断系统
一、PC系列机中断管理方式
8259A中断控制器是中断系统的核心器件,对系统8259A的初始化编程是在为其启动知道后由BIOS自动完成的,设定的中断管理方式为:
一、非屏蔽中断
即:输入到NMI引脚的中断请求信号,引发的中断。
1.CPU什么时候可以响应非屏蔽中断?
- 有非屏蔽中断请求,没有DMA请求
- 一条指令执行完
2.CPU响应非屏蔽中断过程
CPU在每一条指令的最后一个时钟周期,检测NMI引脚。处理器不屏蔽来自NMI的中断请求。
处理器在响应NMI中断时,不从外部硬件接受中断向量号。在80X86中,非屏蔽中断所对应的中断向量号固定为2。为了非屏蔽中断的嵌套,每当接受一个NMI中断,处理器就在内部屏蔽了再次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束。所以,NMI处理程序应以IRET指令结束。
二、可屏蔽中断(PC系列机可屏蔽中断,响应中断的条件,响应的过程,硬件结构)
可屏蔽中断:输入到INTR引脚的中断请求信号,引发的中断。
硬件中断的级别:DMA请求级别高于非屏蔽中断高于可屏蔽中断。
响应可屏蔽中断的条件:
- 有可屏蔽中断请求,没有DMA请求,没有非屏蔽中断请求;
- CPU一条指令执行完毕;
- CPU处于开中断状态(I标=1)
CPU响应可屏蔽中断过程:
CPU在每一条指令的最后一个时钟周期,检测INTR引脚,当检测到有可屏蔽中断请求时,在满足上述条件的前提下,通过总线控制器向系统8529A发出中断响应信号(2个负脉冲)。在获得8259A送来的中断类型码之后,在实模式下查询中断向量表,从而转向相应中断源的中断服务程序。
第六节、微型计算机系统中用到的中断及应用举例
一、日时钟中断
日时钟中断源:系统8254 0#计数器
BIOS对系统8254 0#计数器初始化,使系统8254 0#计数器每55ms产生一次中断请求。
日时钟的中断请求接至系统主8259A的IRO
日时钟中断类型:08H
日时钟中断处理流程
系统日时钟中断开发应用
1.什么是日时钟计数器?、
BIOS系统规定:40H:6CH ~ 40H:6FH这四个单元(共32位)为日时钟计数器,每55ms加一次,计数,到001800B0H,为24小时,其计数值供系统软件使用。
系统启动时CPU执行BIOS中的一段程序,读取CMOS实时时钟电路的时间值——计数值——40:6CH~40:6FH作为日时钟计数器的计数初值。
2.关于1CH服务系统
08H型服务程序,每隔55ms在DS=40H的前提下,调用一次1CH服务程序,之后又返回08H
所以CH中断是日时钟的外扩中断,用户可开发新的1CH中断(完成每55ms一次的定时操作)取代原来的中断服务子程序。
(1)置换中断向量
CPU响应日时钟中断后,自动转向“08H型”服务程序。根据BIOS设计的08H型中断服务程序处理流程,可以知道,用户自行设计的定时中断服务程序类型可以是“08H型”,也可以是1CH。
1>当用户程序的某项定时操作,其定时周期等于55ms的整数倍时,
可定义用户程序的定时操作为1CH中断。此时需要置换1CH型中断向量,调用DOS系统25H号子程序把用户定时中断服务程序入口地址写入4*1CH~4*1CH+3单元。
也可以定义用户中断服务程序为08H型中断,此时需要置换08H型中断向量,调用DOS系统25H号子程序把用户定时中断服务程序入口地址写入4*08H~4*08H+3单元。
2>当用户程序的定时操作,其定时周期不等于55ms的整数倍,或者小于55ms时,定义用户中断服务程序为08H型中断,此时需要置换08H型向量中断,调用DOS系统25H号子程序把用户定时中断服务程序入口地址写入4*08H~4*08H+3单元。
(2)用户中断服务程序结束
1>若用户定时中断定义为1CH型,服务程序结束前不需要向主8259A送结束命令。
2>若用户定时中断定义为08H型,服务程序结束前,需要向主8259A送中断结束命令。
MOV AL,20H
OUT 20H, AL
(3)中断服务程序的执行时间
定时中断服务程序的执行时间,必须远远小于定时中断的时间间隔。
(4)避免DOS重入
实例: