微机原理与接口技术复习笔记.docx
《微机原理与接口技术复习笔记.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术复习笔记.docx(19页珍藏版)》请在冰豆网上搜索。
![微机原理与接口技术复习笔记.docx](https://file1.bdocx.com/fileroot1/2023-1/30/307b9a6b-2a23-46cf-a930-141b71b2972c/307b9a6b-2a23-46cf-a930-141b71b2972c1.gif)
微机原理与接口技术复习笔记
程序(program):
实现特定应用的数据定义和指令序列。
其中,数据是计算机自动计算的对象,而指令(instruction)是指挥计算机执行各种基本操作的指令,一条指令对应一种基本操作。
·诺依曼结构:
计算机必须具备的5个基本部分:
算术逻辑单元、存储器、控制单元、输入设备、输出设备。
算术逻辑单元实现数据处理,而数据处理是计算机最根本的功能。
存储器用以暂存原始数据、中间结果、最终处理结果及程序。
控制单元:
实现指令的执行,根据指令控制算术逻辑单元的操作及各部分之间的数据传送。
现代计算机:
普遍采用的是以存储器为中心的·诺依曼结构。
计算机5个部分之间的关系,两种信息流:
数据流:
以存储器为中心,其他部分之间的数据传送都要经过存储器的暂存中转。
输入设备输入的原始数据和程序(计算机中各部分之间传送的信息广义上都是数据)要暂存在存储器;控制单元从存储器读取指令;算术逻辑单元从存储器得到原始数据,处理后的结果再存回存储器;输出设备输出从存储器传送来的最终处理结果。
数据流表征了配合数据处理和程序执行所必须的操作—数据传送。
控制流:
以控制单元为中心。
控制单元从存储器读取指令(数据流),根据指令译码产生发向其他部分的控制信号(控制流),指挥算术逻辑单元的数据处理,协调各部分之间的数据传送(数据流)。
控制流表征了计算机自动计算的实现—程序执行。
微机在结构上两个显著特点:
一是采用CPU,二是各组成部件之间采用总线连接。
时序脉冲的频率就是CPU的工作频率。
时钟周期:
时序脉冲的周期。
时钟周期是微机的最小定时单位。
总线周期:
CPU访问一次总线的时间即为总线周期。
由四个时钟周期构成。
指令周期:
执行一条指令的时间即为指令周期。
指令周期由若干时钟周期够成。
指令周期包括取指周期和执行周期,执行周期包括译码、取操作数、数据处理和存操作数等若干基本操作。
微机的组成结构:
1、总线:
是连接各部件的一组公共信号线;
2、CPU:
算术逻辑单元与控制逻辑单元合称为CPU,即中央处理器;
3、存储器:
存储数据和程序;
4、I/O接口:
输入/输出设备与总线之间的缓冲电路。
在外设侧以输入/输出设备通信标准信号实现数据交换,在总线侧则与存储器类似,被CPU通过总线标准信号访问。
在微机结构中,CPU与输入/输出设备不相关,双方可以独立发展。
寻址:
CPU从存储器取指令时,必须发出指令所在存储器单元的地址,程序计数器就是暂存在这个地址的寄存器。
CPU根据指令访问存储器单元或I/O接口中的数据时,也必须发出相应的地址,地址寄存器就是暂存在这个地方。
地址总线从CPU向存储器和I/O接口的译码电路传送地址。
译码电路对地址译码之后,即可定位到相应的存储器单元或I/O端口。
总线的功能:
地址总线:
用于CPU寻址存储器和I/O端口,针对采用独立寻址方式和存储器单元数目,定义为8位宽度。
(功能是从CPU向存储器和I/O接口的译码电路传送地址。
)
数据总线:
是各部件之间数据传送的公共通道。
控制总线:
用于CPU控制单元控制数据总线上的传送过程。
三类信号线不是独立作用的,协调完成数据的传送:
CPU首先通过地址总线和M/IO信号线寻址存储器单元或I/O端口,然后通过RD或WR控制线确定数据传送的方向,最后被选通的寄存器与CPU通过数据总线实现数据传送。
数据传送是要实现的目的,数据总线是传送通道,地址总线定位数据的所在,控制总线控制数据的传送方向,三总线协调作用,共同实现数据传输的目的。
数据传输的一端一定是CPU部的寄存器,由控制单元在CPU部直接控制,且同一时刻只能有一个CPU工作。
模型机的指令集:
共8条。
2条数据处理指令(加法和减法操作),2条存储器访问指令,2条输入/输出访问指令,1条流程控制指令(无条件转移)和1条空操作指令。
伪指令:
用于向汇编程序指示存储器分配的汇编命令(directive)。
操作系统:
一种控制硬件和调度软件全面管理计算机资源的程序。
执行指令:
包括取指令和译码发出控制信号两个阶段。
后一阶段是通过指令译码器和控制逻辑电路对设计的指令集实现译码,并转换成相应的控制信号。
程序计数器(PC):
是控制单元中的一个重要寄存器。
其容是控制单元要执行的下一字节指令的地址,控制单元根据这个地址从存储器去的一字节指令后,就对程序计数器加1,始终指示下一字节指令的地址,这样控制单元就可以不断取得指令(取指令后自加1)。
I/O接口的数据传送方式:
1、查询方式(Query):
不需增加额外的硬件,CPU输入或输出数据时,必须先查询相应I/O接口是否就绪,若就绪则进行数据传送,否则继续查询直到满足条件。
(耗时)
2、中断方式(Interrupt):
当相应I/O接口满足数据传送条件时主动向CPU发出申请,由CPU中断当前执行的程序,调用一个相应的子程序完成数据传送,子程序返回后继续执行被中断的程序。
(CPU运行效率高,但I/O接口想CPU申请的信号需要占用CPU引脚,而响应此过程也需要一定的CPU开销,还有可能增加硬件)
3、DMA方式(DirectMemoryAccess):
DMA方式是通过增加一个硬件(DMA控制器)来专门完成I/O接口与存储器的直接数据交换。
DMA控制器发出地址信号、控制信号,而采用DMA方式时,CPU要出让总线控制权,这时,CPU可以继续执行当前程序,但不能访问总线,还可能影响到对中断的响应。
微处理器:
算术逻辑单元和控制逻辑单元,以及暂存数据和指令的寄存器组(RegisterSet)、高速缓冲存储器(Cache)等特殊寄存器,这些部件集中在一片大规模或超大规模集成电路芯片上。
(通常,微处理器不包含程序存储单元)
微机:
以微处理器为核心,配以大规模集成电路的只读存储器ROM、读写存储器RAM、输入/输出接口及总线。
(微机已具有独立运行的能力)
微机系统:
硬件和软件的集合。
8086微处理器
是字长16位的定点微处理器,部寄存器、算术逻辑单元和外部数据引脚均为16位,支持8位和16位的符号数/无符号数的算术运算和数据传送。
提供20位地址引脚(存储周期20位地址有效;I/O周期16位地址有效),可寻址1M存储器空间和64KI/O地址空间。
流水线:
分段寻址:
把整个存储器地址分为若干段,存储器单元的定位被分解为所在的段和在段的偏移,一次,存储器单元的地址由两部分组成:
段地址和偏移地址。
段地址和偏移地址通常记为segment:
offset。
段地址定位断的位置,由8086专门的段寄存器提供。
偏移地址定位存储器单元在段的位置,如果是取指操作,偏移地址由指令指针寄器提供;如果是指令执行中访问存储器操作数,偏移地址在指令中指出。
物理存储器:
连接在系统总线上实际存在的存储器。
物理地址:
为了寻址物理存储器,微处理器向系统地址总线发出的地址。
物理地址是寻址物理存储器的线性地址,线性是指连续而有序的意思。
8086的分段地址称为逻辑地址。
要访问系统总线上的物理存储器,逻辑地址必须转换为物理地址,所以逻辑地址只存在于8086中,即逻辑地址对物理存储器是透明的。
总线接口单元BIU
段寄存器:
段寄存器组:
CS、SS、DS、ES。
CS(CodeSegment):
保存代码段的段地址,代码段用于存储程序的指令。
SS(StackSegment):
保存堆栈段的段地址,堆栈段用于形成堆栈区。
DS(DataSegment):
保存数据段的段地址,数据段用于暂存原始数据和处理后的中间结果及最终结果。
ES(ExtraSegment):
保存扩展段的段地址,扩展段与数据段类似,一般情况下,数据段用于存储局部变量,扩展段用于存储全局变量。
地址加法器:
将执行单元提供的16位费重定位地址重定位为20位的存储器物理地址,用于存储器接口访问总线上实际存无的物理存储器。
工作分两步:
1.将段寄存器提供的16位段地址左移4位,得到20位的段首地址。
2.20位段首地址再加上16位的偏移地址,即可得到20位的物理地址。
指令指针寄存器:
存储代码段的偏移地址,,与CS仪器构成取指所需的程序计数器。
程序计数器由总线接口单元自动改变,始终指向顺序存储的下一字节指令。
除控制程序流指令可以改变程序计数器外,其他指令都不能直接修改程序计数器。
(8086复位后,CS全部置位而IP全部复位,程序计数器的值为FFFFH:
0000H,转换为物理地址为FFFF0H)
存储器接口:
指令流字节队列:
执行单元EU
控制器:
从指令流字节队列顺序读取指令,根据指令译码控制8086中其他部分进行相应的操作,以实现指令要求的功能。
控制器根据要求修改程序计数器的容之后,必须等待总线接口单元清空指令流字节队列,并按修改后的程序计数器容重新取指填充指令流字节队列后,控制器才能继续从指令流字节队列取指令。
算术逻辑单元:
这个16位算术逻辑单元,根据控制器的控制,可完成8位或16位的二进制算术运算和逻辑运算,实现对数据的处理。
标志寄存器:
标志寄存器设计为16位,实际使用9位,其中6位用于存放算术逻辑单元运算后的结果特征,称为状态标志;
CF(CarryFlag):
进位/借位标志。
(最高位)
PF(ParityFlag):
奇偶标志。
(置位位的个数,为偶则PF=1,表示为PE;为奇则PD=0,表示为PO)
AF(AuxiliaryCarryFlag):
辅助进位/借位标志,用于BCD加法的调整。
(运算的低四位产生了进位或借位,AF=1,表示为AC;否则AF=0,表示为NA)
ZF(ZeroFlag):
零标志。
(运算结果为0,则标志置位;否则复位)
SF(SignFlag):
符号标志,用于标志符号的正负。
(运算结果最高位为1,则标志置位,表示为NG;否则标志复位,表示为PL)
OF(OverflowFlag):
溢出标志,用于标志符号数的运算结果是否超出表达围(无符号数的溢出以CF标志)。
(双高异或判别)
另外3位通过人为设置,用以控制8086的3种特定操作,称为控制标志。
TF(TrapFlag):
陷阱标志,也称为单步标志,用于程序的单步执行调试。
IF(InterruptFlag):
中断标志。
(IF=1,表示为EI,即允许响应可屏蔽中断的请求;IF=0,表示为DI,即禁止响应可屏蔽中断的请求)
DF(DirectionFlag):
方向标志。
(DF=1,表示为DN,即down,串操作后地址指针自动减量;DF=0,表示为UP,即up,串操作后地址指针自动增量)
通用寄存器组:
是8086中暂存数据,指针的寄存器阵列,相比使用存储器,可以减少访问总线的次数,有利于提高数据处理速度。
8086包含8个16位寄存器,使用上一般没有限制,但有些特定操作要求必须使用指定的寄存器。
寄存器定义为:
AX(Accumulator),累加寄存器;主要用于乘除运算和输入输出操作时存储操作数、优化移动操作。
BX(Base),基寄存器;主要用于存储器间接寻址时存储数据段的基地址。
CX(Counter),计数寄存器;主要用于循环、重复、移位操作时存储计数值。
DX(Data),数据寄存器;主要用于乘除运算时存储操作数、输入输出操作间接寻址时存储I/O地址。
SP(StackPointer),堆栈指针寄存器;用于存储站定的偏移地址。
BP(BasePointer)基指针寄存器;主要用于存储器间接寻址时存储堆栈段的基地址。
SI(SourceIndex),索引源寄存器;主要用于存储器间接寻址时存储索引地址、串操作时存储原串偏移地址。
DI(DestinationIndex),目的索引寄存器;主要用于存储器间接寻址时存储索引地址、串操作时存储目的串偏移地址。
如果I/O端口中的是字数据时,最好分配偶地址存储。
计算机中的指令由操作码和操作数两部分构成。
操作码也称为指令码,说明计算机要执行哪种操作,是指令中不可缺少的部分;而操作数是参加本指令运算的数据,也就是各种操作的对象。
为限制指令的长度,8086指令系统规定,一条指令的操作数最多只能有2个,且它们不能同时位于存储器中。
根据指令的不同,操作数可以是1个,即单操作数,也可以是两个,即双操作数(源操作数和目的操作数)。
有的指令还可以没有操作数或隐含操作数。
基本数据类型:
字节、字、双字。
指令中的立即数是字符,则用单引号括起来。
8086CPU的寻址方式(计算机中操作数地址的形成就是寻址方式)
1、操作数包含在指令中,称为立即操作数。
2、操作数包含在CPU的某个部寄存器中,称为寄存器操作数。
3、约定操作数事先存放在存储器中存放数据的某个单元,称为存储器操作数。
立即数寻址:
立即数只能作为源操作数,不能作为目的操作数。
寄存器寻址:
是指操作数就在CPU的部寄存器中,那么寄存器名课在指令中指出。
CS和IP不可直接由指令修改,exp:
MOVAX,CS——正确;MOV
CS,BX——错误;MOVAX,IP——错误
在一条指令中,可以对源操作数采用寄存器寻址,也可以对目的操作数进行寄存器寻址,还可以两者都用寄存器寻址方式。
采用寄存器寻址方式的指令在执行时,操作就在CPU部进行,而不需要访问存储器,因而速度很快。
存储器寻址:
用存储器寻址的指令,操作数一般位于代码段之外的数据段、堆栈段或附加段的存储器中,指令中给出的是存储器单元的地址或生成存储器单元地址的信息。
物理地址(PA)=(段寄存器)x16+有效地址(EA)
一条指令中,只能有一个存储器操作数,或者源操作数,或者目的操作数。
存储器寻址分为直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址加变址寻址。
1、直接寻址:
操作数在存储器中,存储单元的有效地址由指令直接指出。
直接寻址,是在指令的操作码后直接给出操作数的16位偏移地址,因而直接寻址是对存储器进行访问时可采用的最简单的方式。
2、寄存器间接寻址:
PA=16x(DS)+EA
3、寄存器相对寻址:
4、基址变址寻址:
5、相对基址变址寻址:
I/O端口寻址
8086采用独立编址的I/O端口,用专门的输入输出指令(IN/OUT)对I/O端口进行操作。
当端口编号小于255时,可以直接寻址;大于255时,只能用DX作为间接寻址。
1、直接端口寻址:
Exp:
INAL,60H;将60H端口中的数据输入到AL中;
INAX,80H;将80H与81H相邻两端口的16位数据输入到AX中;
IN/OUT指令不支持立即数寻址,所以指令中出现的数据是直接寻址的端口地址,不是立即数。
2、寄存器的间接端口寻址:
Exp:
MOVDX,333H;将端口地址送入DX
OUTDX,AL;将AL中的数据输出到DX所指的端口中
MOVDX,330H;将端口地址送入DX
INAL,DX;将DX所指的端口中的数据输入到AL中
只能用DX作为I/O指令的间接寻址寄存器,不能用其他寄存器作为I/O指令的间接寻址。
8086CPU的指令按功能可分为:
数据传送、算术运算、逻辑运算和移位、串操作、控制转移和处理器控制指令6种。
数据传送指令:
通用数据传送指令:
MOV;格式:
MOVdst,src
数据交换指令:
XCHG;格式:
XCHGdst,src;1)源操作数与目的操作数不能同时为存单元;2)不能使用CS、IP作为操作数;3)不影响标志位。
堆栈操作指令:
PUSH、POP,在调用子程序时要保存返回地址;在中断处理过程中要保存断点地址;进入子程序和中断处理后还要保留通用寄存器的值;子程序执行完毕和中断处理完毕返回时,又要恢复通用寄存器的值,并分别将返回地址或断点地址恢复到指令指针寄存器中。
1)8086的堆栈操作都是字(16位)操作,不允许字节的堆栈操作,因此PUSH
AH是错误的。
2)堆栈指令中的操作数只能是存储器或寄存器操作数,而不能是立即数。
3)堆栈操作指令中,有一个操作数是隐含的,这就是堆栈指针SP只是的栈顶存储单元。
4)入栈时“先减后压”(SP先减2,在压入操作数),出栈时“先弹后加”(弹出操作数后,SP加2)。
5)CS寄存器可以入栈,而出栈指令POPCS却是非法指令。
因为8086CPU指令系统不允许CS寄存器目的操作数。
执行POPCS将改变代码段寄存器CS的容,会导致CPU从一个与程序无关的新段中去取下一条指令,从而使程序错误地运行。
累加器专用传送指令:
XLAT、IN、OUT。
XLAT:
换码指令,不影响标志位,也称为查表指令。
查表结果送入“AL”。
8086系统的I/O指令中有:
直接寻址和寄存器间接寻址两种寻址方式,只能用累加器AL/AX与I/O端口进行数据传送。
地址传送指令:
LEA、LDS、LES。
LEA:
取有效地址指令。
将一个任意寻址的存储器操作数的有效地址送给一个16位目标寄存器中,指令的源操作数必须是存储器操作数的地址,目的操作数必须是16位寄存器操作数。
该指令常用来设置一个16位寄存器作为地址指针。
LDS:
全地址指针传送指令。
传送一个32位全地址指针到两个16位目标寄存器,地址指针包括一个段地址和一个偏移地址。
首先从32位的双字存储单元取得低位字,作为全地址指针的偏移地址复制到一个指定的寄存器中(目的操作数中),再将高位字作为全地址指针的段地址复制到DS中。
LES:
全地址指针传送指令。
与LDS指令功能类似,只是把DS换ES。
操作时首先从32位的双字存储单元取低位字,作为全地址指针的偏移地址复制到一个指定的寄存器中(目的操作数中),再将高位字作为全地址指针的段地址复制到ES寄存器。
LEA与LDS、LES允许的操作数类型相同,主要区别在于:
LEA指令的目的操作数是16位偏移地址,而LDS、LES指令的目的操作数是32位的全地址指针。
标志寄存器传送指令:
LAHF、SAHF、PUSHF、POPF。
LAHF(LoadAHFromFlags):
读取标志指令。
指令格式:
SAHF,该指令的执行不影响标志位。
将寄存器中的低8位传送到AH中,包括5个状态标志SF、ZF、AF、PF、CF,其对应的位是第7、6、4、2、0,而第5、3、1位没有定义。
SAHF(StoreAHintoFlags):
设置标志指令。
指令格式:
SAHF,该指令执行时,标志位被新的值所替代。
LAHF与SAHF刚好相反,执行时将AH寄存器的相应位送到标志寄存器的低8位,完成对5个状态标志位SF、ZF、AF、PF、CF的设置。
PUSHF(PUSHFlags):
标志入栈指令。
指令格式:
PUSHF。
POPF(POPFlags):
标志出栈指令。
PUSHF与POPF指令分别起保护标志和恢复标志的作用。
算术运算类指令:
无符号数与有符号数采用同一套加减法指令的条件:
1、要求参与加减法运算的加数、被减数或减数必须同为无符号数或有符号数;2、要用不同的状态标志位检测无符号数或有符号数的运算结果是否溢出(CF/OF)。
除INC/DEC指令不影响进位标志CF外,其他算术运算指令对OF、SF、ZF、AF、PF、CF均会产生影响。
加法:
ADD、ADC、INC。
ADD:
不带进位加。
格式:
ADDdst,src;注意:
dst不能为立即数,dst,src不能同为存储器操作数。
ADC:
带进位加。
格式:
ADCdst,src;注意:
dst=dst+src+CF。
ADC主要用于多字节运算。
Exp:
两个32位操作数1234A9A9H和5678C8C8H依次存在1000H开始的单元,低位在前高位在后,要求编程求和,结果仍然存在1000H开始的连续单元。
1000HA9;MOVSI,1000H
1001HA9;MOVDI,1004H
1002H34;MOVAX,[SI]
1003H12;ADDAX,[DI]
1004HC8;MOV[SI],AX
1005HC8;MOVAX,[SI+2]
1006H78;ADCAX,[DI+2]
1007H56;MOV[SI+2],AX
MOVWORDPTR[SI+4],0ADCWORDPTR[SI+4],0
减法:
SUB、SBB、DEC、NEG、CMP。
DEC:
减量指令。
注意:
段寄存器不能使用该指令。
NEG:
取补指令。
格式:
NEGdst,该指令执行的结果总是使CF=1,除非操作数为0才使CF=0。
注意:
当操作数dst=0时,结果不变;当操作数为-128(补码为80H)或-32768(补码为8000H)时,结果数值不变,但使OF置1。
乘法指令:
MUL、IMUL。
特点:
在指令中总有一个操作数隐含在AL或AX中。
指令中的操作数字节,则另一个操作数隐含在AL中,乘积在AX中;指令中的操作数为字,则另一个操作数隐含在AX中,乘积在DX、AX中,其中DX作为存放乘积的高位扩展。
MUL:
只对CF、OF有定义。
乘积的高半部分不为0,则CF=OF=1;否则CF=OF=0。
CF=OF=1表示结果的高半部分包含乘积的有效位,代表乘积的长度扩展;CF=OF=0代表乘积的长度没有扩展。
源操作数不能为立即数。
IMUL:
格式与功能上与MUL类似,不同的是,MUL要求两乘数都为带符号数(补码),且乘积也是补码表示的数。
除法指令:
DIV、IDIV、CBW、CWD。
特点:
无符号数的除法DIV与带符号数的除法IDIV,被除数隐含在累加器AX(字节除)或DX和AX(字除)中。
在除法运算中,如果除数是8位的,则要求被除数是16位的;除数是16位的,则要求被除数是32位的。
除法指令对所有状态标志均无定义。
DIV:
对于字节除法,所得商存于AL,余数存于AH;对于字除法,商存于AX,余数存于DX。
若除数为0,则在部产生一个类型0的中断。
IDIV:
与DIV指令相同,只是操作数是带符号数的补码,商和余数也是补码。
其中,商可能为正或负,余数总是与被除数的符号相同,为正或负。
除法指令的寻址方式与乘法指令相同,其目的操作数必须存放在AX中,或DX与AX中。
注意:
源操作数不能为立即数。
CBW(ConvertBytetoWord):
字节扩展指令。
对标志位无影响,功能:
把AL中的符号扩展到AH中。
AL<80H,则扩展后(AH)=00H;否则扩展后(AH)=0FFH。
CWD(ConvertWordtoDoubleWord):
字扩展指令。
对标志位无影响,功能:
将AX中的符号扩展到DX中。
AX<8000H,则扩展后(DX)=0000H;否则扩展后(DX)=FFFFH。
BCD码调整指令:
AAA、DAA、AAS、DAS、AAM、AAD。
AAA:
加法的非压缩BCD码调整指令(ASCII码调整)。
仅影响CF和AF。
DAA:
加法的压缩BCD码调整指令(十进制加法调整)。
仅OF无定义。
AAS:
减法的非压缩BCD码调整指令。
仅影响CF和AF。
DAS:
减法的压缩BCD码调整指令。
仅OF无定义。
AAM:
乘法的非压缩BCD码调整指令。
仅影响PF、SF、ZF。
AAD:
除法的非压缩型BCD码调整指令。
仅影响PF、SF、ZF。
逻辑运算与移位指令
需要对字节或字数据的各个二进制位进行操作时,可采用二进制位操作类指令。
逻辑运算类指令:
AND、OR、NOT、XOR、TEST。
AND:
逻辑与。
格式:
ANDdst,src。
两个操作数的对应位进行运算,与运算的结果送回到目的操作数。
常用于对指定位进行清零。
OR:
逻辑或。
格式:
ORdst,src。
两个操作数按位进行或运算,结果送回目的操作数。
常用于对指定位进行置1操作。
XOR:
逻辑异或。
XORdst,src。