《微机原理与接口技术复习笔记(17页).doc》由会员分享,可在线阅读,更多相关《微机原理与接口技术复习笔记(17页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-程序(program):实现特定应用的数据定义和指令序列。其中,数据是计算机自动计算的对象,而指令(instruction)是指挥计算机执行各种基本操作的指令,一条指令对应一种基本操作。冯诺依曼结构:计算机必须具备的5个基本部分:算术逻辑单元、存储器、控制单元、输入设备、输出设备。算术逻辑单元实现数据处理,而数据处理是计算机最根本的功能。存储器用以暂存原始数据、中间结果、最终处理结果及程序。控制单元:实现指令的执行,根据指令控制算术逻辑单元的操作及各部分之间的数据传送。现代计算机:普遍采用的是以存储器为中心的冯诺依曼结构。算术逻辑单元存储器控制单元输入设备输出设备计算机5个部分之间的关系,两
2、种信息流:数据流:以存储器为中心,其他部分之间的数据传送都要经过存储器的暂存中转。输入设备输入的原始数据和程序(计算机中各部分之间传送的信息广义上都是数据)要暂存在存储器;控制单元从存储器读取指令;算术逻辑单元从存储器得到原始数据,处理后的结果再存回存储器;输出设备输出从存储器传送来的最终处理结果。数据流表征了配合数据处理和程序执行所必须的操作数据传送。控制流:以控制单元为中心。控制单元从存储器读取指令(数据流),根据指令译码产生发向其他部分的控制信号(控制流),指挥算术逻辑单元的数据处理,协调各部分之间的数据传送(数据流)。控制流表征了计算机自动计算的实现程序执行。微机在结构上两个显著特点:
3、一是采用CPU,二是各组成部件之间采用总线连接。存储器CPUI/O接口I/O接口时钟输入设备输出设备微机结构时序脉冲的频率就是CPU的工作频率。时钟周期:时序脉冲的周期。时钟周期是微机的最小定时单位。总线周期:CPU访问一次总线的时间即为总线周期。由四个时钟周期构成。指令周期:执行一条指令的时间即为指令周期。指令周期由若干时钟周期够成。指令周期包括取指周期和执行周期,执行周期包括译码、取操作数、数据处理和存操作数等若干基本操作。微机的组成结构:1、 总线:是连接各部件的一组公共信号线;2、 CPU:算术逻辑单元与控制逻辑单元合称为CPU,即中央处理器;3、 存储器:存储数据和程序;4、 I/O
4、接口:输入/输出设备与总线之间的缓冲电路。在外设侧以输入/输出设备通信标准信号实现数据交换,在总线侧则与存储器类似,被CPU通过总线标准信号访问。在微机结构中,CPU与输入/输出设备不相关,双方可以独立发展。寻址:CPU从存储器取指令时,必须发出指令所在存储器单元的地址,程序计数器就是暂存在这个地址的寄存器。CPU根据指令访问存储器单元或I/O接口中的数据时,也必须发出相应的地址,地址寄存器就是暂存在这个地方。地址总线从CPU向存储器和I/O接口的译码电路传送地址。译码电路对地址译码之后,即可定位到相应的存储器单元或I/O端口。总线的功能:地址总线:用于CPU寻址存储器和I/O端口,针对采用独
5、立寻址方式和存储器单元数目,定义为8位宽度。(功能是从CPU向存储器和I/O接口的译码电路传送地址。)数据总线:是各部件之间数据传送的公共通道。控制总线:用于CPU控制单元控制数据总线上的传送过程。三类信号线不是独立作用的,协调完成数据的传送:CPU首先通过地址总线和M/IO信号线寻址存储器单元或I/O端口,然后通过RD或WR控制线确定数据传送的方向,最后被选通的寄存器与CPU通过数据总线实现数据传送。数据传送是要实现的目的,数据总线是传送通道,地址总线定位数据的所在,控制总线控制数据的传送方向,三总线协调作用,共同实现数据传输的目的。数据传输的一端一定是CPU内部的寄存器,由控制单元在CPU
6、内部直接控制,且同一时刻只能有一个CPU工作。模型机的指令集:共8条。2条数据处理指令(加法和减法操作),2条存储器访问指令,2条输入/输出访问指令,1条流程控制指令(无条件转移)和1条空操作指令。伪指令:用于向汇编程序指示存储器分配的汇编命令(directive)。操作系统:一种控制硬件和调度软件全面管理计算机资源的程序。执行指令:包括取指令和译码发出控制信号两个阶段。后一阶段是通过指令译码器和控制逻辑电路对设计的指令集实现译码,并转换成相应的控制信号。程序计数器(PC):是控制单元中的一个重要寄存器。其内容是控制单元要执行的下一字节指令的地址,控制单元根据这个地址从存储器去的一字节指令后,
7、就对程序计数器加1,始终指示下一字节指令的地址,这样控制单元就可以不断取得指令(取指令后自加1)。I/O接口的数据传送方式:1、查询方式(Query):不需增加额外的硬件,CPU输入或输出数据时,必须先查询相应I/O接口是否就绪,若就绪则进行数据传送,否则继续查询直到满足条件。(耗时)2、中断方式(Interrupt):当相应I/O接口满足数据传送条件时主动向CPU发出申请,由CPU中断当前执行的程序,调用一个相应的子程序完成数据传送,子程序返回后继续执行被中断的程序。(CPU运行效率高,但I/O接口想CPU申请的信号需要占用CPU引脚,而响应此过程也需要一定的CPU开销,还有可能增加硬件)3
8、、DMA方式(Direct Memory Access):DMA方式是通过增加一个硬件(DMA控制器)来专门完成I/O接口与存储器的直接数据交换。DMA控制器发出地址信号、控制信号,而采用DMA方式时,CPU要出让总线控制权,这时,CPU可以继续执行当前程序,但不能访问总线,还可能影响到对中断的响应。微处理器:算术逻辑单元和控制逻辑单元,以及暂存数据和指令的寄存器组(Register Set)、高速缓冲存储器(Cache)等特殊寄存器,这些部件集中在一片大规模或超大规模集成电路芯片上。(通常,微处理器不包含程序存储单元)微机:以微处理器为核心,配以大规模集成电路的只读存储器ROM、读写存储器R
9、AM、输入/输出接口及总线。(微机已具有独立运行的能力)微机系统:硬件和软件的集合。8086微处理器是字长16位的定点微处理器,内部寄存器、算术逻辑单元和外部数据引脚均为16位,支持8位和16位的符号数/无符号数的算术运算和数据传送。提供20位地址引脚(存储周期20位地址有效;I/O周期16位地址有效),可寻址1M存储器空间和64K I/O地址空间。流水线:分段寻址:把整个存储器地址分为若干段,存储器单元的定位被分解为所在的段和在段内的偏移,一次,存储器单元的地址由两部分组成:段地址和偏移地址。段地址和偏移地址通常记为segment:offset。段地址定位断的位置,由8086内专门的段寄存器
10、提供。偏移地址定位存储器单元在段内的位置,如果是取指操作,偏移地址由指令指针寄器提供;如果是指令执行中访问存储器操作数,偏移地址在指令中指出。物理存储器:连接在系统总线上实际存在的存储器。物理地址:为了寻址物理存储器,微处理器向系统地址总线发出的地址。物理地址是寻址物理存储器的线性地址,线性是指连续而有序的意思。8086的分段地址称为逻辑地址。要访问系统总线上的物理存储器,逻辑地址必须转换为物理地址,所以逻辑地址只存在于8086中,即逻辑地址对物理存储器是透明的。总线接口单元BIU段寄存器:段寄存器组:CS、SS、DS、ES。CS(Code Segment):保存代码段的段地址,代码段用于存储
11、程序的指令。SS(Stack Segment):保存堆栈段的段地址,堆栈段用于形成堆栈区。DS(Data Segment):保存数据段的段地址,数据段用于暂存原始数据和处理后的中间结果及最终结果。ES(Extra Segment):保存扩展段的段地址,扩展段与数据段类似,一般情况下,数据段用于存储局部变量,扩展段用于存储全局变量。地址加法器:将执行单元提供的16位费重定位地址重定位为20位的存储器物理地址,用于存储器接口访问总线上实际存无的物理存储器。工作分两步:1.将段寄存器提供的16位段地址左移4位,得到20位的段首地址。2.20位段首地址再加上16位的偏移地址,即可得到20位的物理地址。
12、指令指针寄存器:存储代码段内的偏移地址,与CS仪器构成取指所需的程序计数器。程序计数器由总线接口单元自动改变,始终指向顺序存储的下一字节指令。除控制程序流指令可以改变程序计数器外,其他指令都不能直接修改程序计数器。(8086复位后,CS全部置位而IP全部复位,程序计数器的值为FFFFH:0000H,转换为物理地址为FFFF0H)存储器接口:指令流字节队列:执行单元EU控制器:从指令流字节队列顺序读取指令,根据指令译码控制8086中其他部分进行相应的操作,以实现指令要求的功能。控制器根据要求修改程序计数器的内容之后,必须等待总线接口单元清空指令流字节队列,并按修改后的程序计数器内容重新取指填充指
13、令流字节队列后,控制器才能继续从指令流字节队列取指令。算术逻辑单元:这个16位算术逻辑单元,根据控制器的控制,可完成8位或16位的二进制算术运算和逻辑运算,实现对数据的处理。标志寄存器:标志寄存器设计为16位,实际使用9位,其中6位用于存放算术逻辑单元运算后的结果特征,称为状态标志;CF(Carry Flag):进位/借位标志。(最高位)PF(Parity Flag):奇偶标志。(置位位的个数,为偶则PF=1,表示为PE;为奇则PD=0,表示为PO)AF(Auxiliary Carry Flag):辅助进位/借位标志,用于BCD加法的调整。(运算的低四位产生了进位或借位,AF=1,表示为AC;
14、否则AF=0,表示为NA)ZF(Zero Flag):零标志。(运算结果为0,则标志置位;否则复位)SF(Sign Flag):符号标志,用于标志符号的正负。(运算结果最高位为1,则标志置位,表示为NG;否则标志复位,表示为PL)OF(Overflow Flag):溢出标志,用于标志符号数的运算结果是否超出表达范围(无符号数的溢出以CF标志)。(双高异或判别)另外3位通过人为设置,用以控制8086的3种特定操作,称为控制标志。TF(Trap Flag):陷阱标志,也称为单步标志,用于程序的单步执行调试。IF(Interrupt Flag):中断标志。(IF=1,表示为EI,即允许响应可屏蔽中断
15、的请求;IF=0,表示为DI,即禁止响应可屏蔽中断的请求)DF(Direction Flag):方向标志。(DF=1,表示为DN,即down,串操作后地址指针自动减量;DF=0,表示为UP,即up,串操作后地址指针自动增量)通用寄存器组:是8086中暂存数据,指针的寄存器阵列,相比使用存储器,可以减少访问总线的次数,有利于提高数据处理速度。8086包含8个16位寄存器,使用上一般没有限制,但有些特定操作要求必须使用指定的寄存器。寄存器定义为:AX(Accumulator),累加寄存器;主要用于乘除运算和输入输出操作时存储操作数、优化移动操作。BX(Base),基寄存器;主要用于存储器间接寻址时
16、存储数据段的基地址。CX(Counter),计数寄存器;主要用于循环、重复、移位操作时存储计数值。DX(Data),数据寄存器;主要用于乘除运算时存储操作数、输入输出操作间接寻址时存储I/O地址。SP(Stack Pointer),堆栈指针寄存器;用于存储站定的偏移地址。BP(Base Pointer)基指针寄存器;主要用于存储器间接寻址时存储堆栈段的基地址。SI(Source Index),索引源寄存器;主要用于存储器间接寻址时存储索引地址、串操作时存储原串偏移地址。DI(Destination Index),目的索引寄存器 ;主要用于存储器间接寻址时存储索引地址、串操作时存储目的串偏移地址
17、。如果I/O端口中的是字数据时,最好分配偶地址存储。计算机中的指令由操作码和操作数两部分构成。操作码也称为指令码,说明计算机要执行哪种操作,是指令中不可缺少的部分;而操作数是参加本指令运算的数据,也就是各种操作的对象。为限制指令的长度,8086指令系统规定,一条指令的操作数最多只能有2个,且它们不能同时位于存储器中。根据指令的不同,操作数可以是1个,即单操作数,也可以是两个,即双操作数(源操作数和目的操作数)。有的指令还可以没有操作数或隐含操作数。基本数据类型:字节、字、双字。指令中的立即数是字符,则用单引号括起来。8086CPU的寻址方式(计算机中操作数地址的形成就是寻址方式)1、 操作数包
18、含在指令中,称为立即操作数。2、 操作数包含在CPU的某个内部寄存器中,称为寄存器操作数。3、 约定操作数事先存放在存储器中存放数据的某个单元,称为存储器操作数。立即数寻址:立即数只能作为源操作数,不能作为目的操作数。寄存器寻址:是指操作数就在CPU的内部寄存器中,那么寄存器名课在指令中指出。CS和IP不可直接由指令修改,exp:MOVAX,CS正确;MOVCS,BX错误;MOVAX,IP错误在一条指令中,可以对源操作数采用寄存器寻址,也可以对目的操作数进行寄存器寻址,还可以两者都用寄存器寻址方式。采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,而不需要访问存储器,因而速度很快。存储
19、器寻址:用存储器寻址的指令,操作数一般位于代码段之外的数据段、堆栈段或附加段的存储器中,指令中给出的是存储器单元的地址或生成存储器单元地址的信息。物理地址(PA)=(段寄存器)x 16 + 有效地址(EA)一条指令中,只能有一个存储器操作数,或者源操作数,或者目的操作数。存储器寻址分为直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址加变址寻址。1、 直接寻址:操作数在存储器中,存储单元的有效地址由指令直接指出。直接寻址,是在指令的操作码后直接给出操作数的16位偏移地址,因而直接寻址是对存储器进行访问时可采用的最简单的方式。2、 寄存器间接寻址:PA=16 x(DS)+ EA3、 寄存器相对寻
20、址: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所指的端口
21、中 MOVDX,330H;将端口地址送入DX INAL,DX;将DX所指的端口中的数据输入到AL中只能用DX作为I/O指令的间接寻址寄存器,不能用其他寄存器作为I/O指令的间接寻址。8086 CPU的指令按功能可分为:数据传送、算术运算、逻辑运算和移位、串操作、控制转移和处理器控制指令6种。数据传送指令:通用数据传送指令:MOV;格式:MOVdst,src数据交换指令:XCHG; 格式:XCHGdst,src;1)源操作数与目的操作数不能同时为内存单元;2)不能使用CS、IP作为操作数;3)不影响标志位。堆栈操作指令:PUSH、POP,在调用子程序时要保存返回地址;在中断处理过程中要保存断点地
22、址;进入子程序和中断处理后还要保留通用寄存器的值;子程序执行完毕和中断处理完毕返回时,又要恢复通用寄存器的值,并分别将返回地址或断点地址恢复到指令指针寄存器中。1)8086的堆栈操作都是字(16位)操作,不允许字节的堆栈操作,因此PUSHAH是错误的。2)堆栈指令中的操作数只能是存储器或寄存器操作数,而不能是立即数。3)堆栈操作指令中,有一个操作数是隐含的,这就是堆栈指针SP只是的栈顶存储单元。4)入栈时“先减后压”(SP先减2,在压入操作数),出栈时“先弹后加”(弹出操作数后,SP加2)。5)CS寄存器可以入栈,而出栈指令POPCS却是非法指令。因为8086 CPU指令系统不允许CS寄存器目
23、的操作数。执行POPCS将改变代码段寄存器CS的内容,会导致CPU从一个与程序无关的新段中去取下一条指令,从而使程序错误地运行。累加器专用传送指令:XLAT、IN、OUT。XLAT:换码指令,不影响标志位,也称为查表指令。查表结果送入“AL”。8086系统的I/O指令中有:直接寻址和寄存器间接寻址两种寻址方式,只能用累加器AL/AX与I/O端口进行数据传送。地址传送指令:LEA、LDS、LES。LEA:取有效地址指令。将一个任意寻址的存储器操作数的有效地址送给一个16位目标寄存器中,指令的源操作数必须是存储器操作数的地址,目的操作数必须是16位寄存器操作数。该指令常用来设置一个16位寄存器作为
24、地址指针。LDS:全地址指针传送指令。传送一个32位全地址指针到两个16位目标寄存器,地址指针包括一个段地址和一个偏移地址。首先从32位的双字存储单元取得低位字,作为全地址指针的偏移地址复制到一个指定的寄存器中(目的操作数中),再将高位字作为全地址指针的段地址复制到DS中。LES:全地址指针传送指令。与LDS指令功能类似,只是把DS换ES。操作时首先从32位的双字存储单元取低位字,作为全地址指针的偏移地址复制到一个指定的寄存器中(目的操作数中),再将高位字作为全地址指针的段地址复制到ES寄存器。LEA与LDS、LES允许的操作数类型相同,主要区别在于:LEA指令的目的操作数是16位偏移地址,而
25、LDS、LES指令的目的操作数是32位的全地址指针。标志寄存器传送指令:LAHF、SAHF、PUSHF、POPF。LAHF(Load AH From Flags):读取标志指令。指令格式:SAHF,该指令的执行不影响标志位。将寄存器中的低8位传送到AH中,包括5个状态标志SF、ZF、AF、PF、CF,其对应的位是第7、6、4、2、0,而第5、3、1位没有定义。SAHF(Store AH into Flags):设置标志指令。指令格式:SAHF,该指令执行时,标志位被新的值所替代。LAHF与SAHF刚好相反,执行时将AH寄存器的相应位送到标志寄存器的低8位,完成对5个状态标志位SF、ZF、AF、
26、PF、CF的设置。PUSHF(PUSH Flags):标志入栈指令。指令格式:PUSHF。POPF(POP Flags):标志出栈指令。PUSHF与POPF指令分别起保护标志和恢复标志的作用。算术运算类指令:无符号数与有符号数采用同一套加减法指令的条件:1、要求参与加减法运算的加数、被减数或减数必须同为无符号数或有符号数;2、要用不同的状态标志位检测无符号数或有符号数的运算结果是否溢出(CF/OF)。除INC/DEC指令不影响进位标志CF外,其他算术运算指令对OF、SF、ZF、AF、PF、CF均会产生影响。加法:ADD、ADC、INC。ADD:不带进位加。格式:ADDdst,src;注意: d
27、st不能为立即数,dst,src不能同为存储器操作数。ADC:带进位加。格式:ADCdst,src;注意:dst=dst+src+CF。ADC主要用于多字节运算。Exp:两个32位操作数1234A9A9H和5678C8C8H依次存在1000H开始的单元,低位在前高位在后,要求编程求和,结果仍然存在1000H开始的连续单元。1000HA9;MOVSI,1000H1001HA9;MOVDI,1004H1002H34;MOVAX,SI1003H12;ADDAX,DI1004HC8;MOVSI,AX1005HC8;MOVAX,SI+21006H78;ADCAX,DI+21007H56;MOVSI+2,
28、AXMOVWORD PTRSI+4,0ADCWORD PTRSI+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、
29、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位的,则要求被
30、除数是32位的。除法指令对所有状态标志均无定义。DIV:对于字节除法,所得商存于AL,余数存于AH;对于字除法,商存于AX,余数存于DX。若除数为0,则在内部产生一个类型0的中断。IDIV:与DIV指令相同,只是操作数是带符号数的补码,商和余数也是补码。其中,商可能为正或负,余数总是与被除数的符号相同,为正或负。除法指令的寻址方式与乘法指令相同,其目的操作数必须存放在AX中,或DX与AX中。注意:源操作数不能为立即数。CBW(Convert Byte to Word):字节扩展指令。对标志位无影响,功能:把AL中的符号扩展到AH中。AL80H,则扩展后(AH)=00H;否则扩展后(AH)=0F
31、FH。CWD(Convert Word to Double Word):字扩展指令。对标志位无影响,功能:将AX中的符号扩展到DX中。AX8000H,则扩展后(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:除
32、法的非压缩型BCD码调整指令。仅影响PF、SF、ZF。逻辑运算与移位指令需要对字节或字数据的各个二进制位进行操作时,可采用二进制位操作类指令。逻辑运算类指令:AND、OR、NOT、XOR、TEST。AND:逻辑与。格式:ANDdst,src。两个操作数的对应位进行运算,与运算的结果送回到目的操作数。常用于对指定位进行清零。OR:逻辑或。格式:ORdst,src。两个操作数按位进行或运算,结果送回目的操作数。常用于对指定位进行置1操作。XOR:逻辑异或。XORdst,src。两个操作数按位进行异或运算,结果送回目的操作数。注意:上述几种运算的目的操作数不能为立即数,两个操作数不能同时为存储器数。
33、TEST:测试指令。格式:TESTdst,src。将dst指定的内容按位做逻辑与运算,但不送回操作结果,只根据结果影响标志位。TEST指令的操作数寻址与AND指令相同。常用来检测操作数的某些位是1还是0。注意:上述指令对标志位的影响:标志位CF、OF复位,SF、PF和ZF由操作结果确定,AF未定义。NOT:逻辑非。格式:NOTdst。指定的寄存器或存储单元的内容按位取反。常用来对某个数做求反运算。非循环移位指令:SHL、SHR、SAL、SAR。SHL:逻辑左移指令。指令格式:SHLdst,CL;CL是移位的位数。功能:将操作数左移,CL指定移位位数,最高位移入进位标志CF,移动后空出的最低位补
34、0。注意:操作数dst可以位寄存器数或存储器数。当只移1位时,若符号位SF发生变化,则OF=1;否则OF=0。Exp:MOVBL,01110101 MOVCL,4 SHLBL,CL运算结果:(BL)=01010000,SF=0,CF=1,OF=1,ZF=0。SHR:逻辑右移指令。指令格式与SHL类相同。功能:将操作数右移,CL指定移位位数,最高位补0,最低位移入CF。SHR指令的操作数寻址方式也与SHL相同。当只移1位时,若移位后的符号位SF发生变化,则OF=1;否则OF=0。以上两种操作:标志位SF、ZF、PF根据移位结果置位。SAL:算数左移指令。与SHL指令功能相同,最高位移入标志位CF
35、,但SAL将操作数视为带符号数。移动后空出的低位补0。SAR:算术右移指令。与SHR指令功能相同,最低位移入标志位CF,但符号位保持不变。循环移位指令:ROL、ROR、RCL、RCR。ROL(Rotate Left):循环左移指令。最高位进入标志位CF并移入最低位,按一个闭环回路进行移位。目的操作数可以是寄存器数或存储器数。格式:RORdst,CL;CL是移位的位数。Exp:ROLAL,1 MOVCL,4 ROLAL,CL循环移位为1位时,若移位后的操作数的最高位不等于标志位CF,则溢出标志OF=1;否则OF=0.用来表示移位前后操作数的符号位是否发生改变(OF=0表示符号位为改变)。ROR(
36、Rotate Right)循环右移指令,与ROL指令的功能相似,仅移动方向相反,最低位进入标志位CF并移入最高位。只移1位时,移位后的操作数的最高位与次高位不相等,则溢出标志OF=1;否则OF=0。可由此判断移位前后操作数的符号位是否发生改变。RCL:带进位的循环左移指令。最高位移入标志位CF,CF移入最低位形成环路。循环移位为1位时,若移位后的操作数的最高位与标志位CF不相等,则溢出标志OF=1;否则OF=0。可由此判断移位前后操作数的符号位是否发生改变。RCR:带进位的循环右移指令。最低位移入标志位CF,CF移入最高位。形成环路。循环移位为1位时,若移位后的操作数的最高位与次高位不相等,则
37、溢出标志CF=1;否则OF=0。可由此判断移位前后操作数的符号位是否发生改变。串操作指令:是用一条指令实现对一串字符或数据的操作。串是存储器中一系列连续的字或字节,串操作就是针对这些字或字节进行的某种相同的操作。8086串操作特点:1) 所有串操作指令都用SI对DS段中的源操作数进行间接寻址,用DI对ES段中的目的操作数进行间接寻址,即目的串和源串地址分别有ES:DI和DS:SI提供。使用前应先设定好SI和DI的初值。2) 串操作指令执行时自动修改地址指针,地址指针的修改与方向标志DF有关。3) 若源串和目的串在同一段中,则把数据段基址DS和附加段基址ES设成相同的数字,即DS=ES,仍由SI
38、和DI分别指出源串和目的串的有效地址。4) 任何一条串操作指令,可在前面加一个“重复前缀”,通过它们来控制串操作指令的重复执行。5) 串操作指令是唯一的一组源操作数和目的操作数都在存储单元的指令。重复前缀:REP、REPZ(REPE)、REPNZ(REPNE)。功能是重复执行紧跟其后的串操作指令,不能单独使用,只能加在串操作指令前用来控制串操作的重复执行,且不影响标志位。REP:重复前缀(无条件重复)。执行操作时,(CX)=0,退出重复串操作;否则重复串操作。过程如下:1、 若(CX)=0,退出重复操作REP,否则往下执行;2、 修改CX,即CX=CX-1;3、 执行串操作一次,并修改SI、D
39、I,执行第1步。其中,DF=0,则SI、DI内容自动加1或加2;否则自动减1或2.用途:用于字串传送MOVS或保存字串STOS指令的的前缀。REPZ(REPE):相等重复前缀。若执行的操作为(CX)=0且ZF=1,重复串操作;否则,退出重复操作。用途:用于比较两个字符串,找出不同的字。REPZ(REPE)与串操作指令CMPS与SCAS配合。表示只有当两数相等时才继续比较;否则可提前结束串操作。REPNZ(REPNE):不相等重复前缀。执行的操作为(CX)=0且ZF=1,重复串操作;否则不重复。用途:在一个字串中,找到需要的字。也可用于比较两个字串,找出相同的字。REPNZ(REPNE)和串操作
40、指令CMPS与SCAS配合。表示只有当两书不相等时才继续比较;否则可提前结束串操作。串传送指令格式:MOVSB/MOVSW;用于字节/字的传送。操作:(ES:DI)(DS:SI);不影响标志位。该指令把数据段一SI为有效地址的源串中的字节或字传送到附加段以DI为有效地址的目的串中,同时自动修改SI和DI中的有效地址,使之指向下一个元素。串比较指令格式:CMPSB/CMPSW;源字节串比较或字串比较。(ES:EI)(DS:SI);6个标志位:AF、ZF、OF、PF、CF、SF反映了目的串与源串的关系。CMPS指令把由SI指定的数据段中源串的一个字节或字与DI指定的附加段目的串的一个字节或字相减,
41、但不回送结果,只是影响标志位。比较后按照DF的值修改地址指针SI和DI。SCAS:串扫描指令。格式:SCASB/SCASW;字节串或字串扫描。操作:把AL/AX的内容减去DI指定的目的串中的一个字节或字数据。不送运算结果,只根据结果影响标志位,并按照DF的值修改DI。用于从一个字串中查找一个与AL或AX中不同的字符,或查找一个相同的字符。LODS:读取串指令。格式:LODSB/LODSW。操作:把源串中的一个字节或字的数据送入AL或AX中,同时按照DF标志修改SI。该指令正常情况是不重复操作的,因为每重复一次操作,累加器的内容就会改写,但在软件设计中,该指令是十分有用的。STOS:存串指令。格
42、式:STOSB/STOSW。操作:把AL或AX中的一个字节或字的内容送入目的串所在单元,并按照DF的值修改DI。STOS指令常用于初始化某一缓冲区为同一数据。控制转移类指令:无条件转移指令、条件转移指令、循环控制指令、中断指令。JMP:无条件转移指令。可实现短、近、远转移,使用方便,包括段内直接转移、段内间接转移、段间直接转移、段间间接转移。CALL/RET:调用和返回指令。子程序完成功能之后,最后执行的一条指令必须是返回指令RET,返回地址由执行CALL调用指令时入栈保存的断点值提供。条件转移指令:满足条件,则转移到指定的目标地址;否则,继续执行该条件转移指令的下一条指令。条件转移分为:单个
43、状态条件转移、无符号条件转移、带符号条件转移3种。指令格式:JXTarget;X代表转移条件,条件成立,则转到标号Target处执行;否则顺序执行;Target是短目标地址。LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ:短目标标号。第四章:表达式:由若干操作数和运算符构成的有意义的组合序列。表达式可出现于源程序的任何地方,在汇编过程中可产生确定的值。表达式是常数、寄存器、标号、变量与运算符的组合。汇编时按优先规则对表达式进行计算,计算出具体数值,在运行时不能改变,而寄存器间接寻址的地址计算则是按照执行指令时寄存器的值先取指后计算的。运算符:算术运算符、逻辑运算符、关系运算符、分
44、析运算符、合成运算符。算术运算符:+、-、*、/、取模运算(MOD)。Exp:MOVAL,5 MOD 2;汇编后为MOVAL,1/是取商部分,只有整数部分,没有余数;而MOD只是取余数。逻辑运算符:AND、OR、XOR、NOT。逻辑运算符在两个操作数之间按位进行布尔运算,逻辑表达式只能对常数进行运算,所得结果也是常数。关系运算符:在两个无符号操作数之间进行大小关系比较,满足关系则返回全1,否则返回全0。包括:相等(EQ)、不相等(NE)、小于(LT)、大于(GT)、小于等于(LE)、大于等于(GE)。运算结果是一个逻辑值,即真或假。1)关系运算符只能对常数(或相当于常数)进行运算,且为无符号数
45、。2)关系为真,结果为全1;否则为全0。分析运算符:SEG、OFFSET、TYPE、LENGTH、SIZE。SEG:取变量或标号的段地址。OFFSET:取变量或标号偏移地址。TYPE:取变量的类型,对于变量类型返回值可以是1(字节)、2(字)、4(双字)、6(三字)、8(四字)、10(五字);对于标号类型,返回值可以是-1(NEAR)或-2(FAR)。LENGTH:取变量中元素的个数。若使用DUP( )定义的数组变量,结果为单元的个数;否则结果为1。SIZE:取所定义存储区的字节数(等于LENGTH*TYPE)。若使用DUP(),取所定义的变量或字节个数;没使用DUP( ),则取第1个数据的字
46、节数。合成运算符:对已定义的但个操作数重新生成段基地址、偏移量相同而类型不同的新操作数,主要介绍PTR、THIS。1) PTR:用来指定地址操作数的类型。格式为: PTR 类型:BYTE、WORD、DWORD、NEAR、FAR。功能:指定原存储器的操作数为新类型,新操作数的段基地址和偏移量与原操作数相同;PTR也可用来进行强制类型转换。THIS:指定“新类型”。格式为:THIS;代表新的操作数的类型即为式中指定的“新类型”。伪指令:符号定义伪指令、数据定义伪指令。符号定义伪指令:EQU、=。格式:EQU。用EQU定义的符号未清除前不能进行重定义。清除EQU定义可用:PURGE伪指令。格式:PURGE。用“=”定义的符号可在任何时候进行重定义,其他用法与EQU完全相同。两者均不占用存储空间,仅是给符号赋值在编译过程中完成。数据定义伪指令:数据定义伪指令操作数可以是常数、变量或表达式。常用的数据定义伪指令有:DB定义字节、DW定义字、DD定义双字、DQ定义4字、DT定义5字。Ex