第3章 8086 8088指令系统_第1页
第3章 8086 8088指令系统_第2页
第3章 8086 8088指令系统_第3页
第3章 8086 8088指令系统_第4页
第3章 8086 8088指令系统_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第3 3章章 8086/8088 8086/8088指令系统指令系统指令指令是计算机执行某种操作的命令。是计算机执行某种操作的命令。指令系统指令系统是该计算机所有指令的集合,是该计算机所有指令的集合,它是综合反映计算机性能的重要因素,它是综合反映计算机性能的重要因素,不仅直接影响机器的硬件结构,还影响不仅直接影响机器的硬件结构,还影响机器的系统软件及机器的适用范围。机器的系统软件及机器的适用范围。一般,计算机的一般,计算机的CPUCPU不同,其使用的指令不同,其使用的指令系统就不同。系统就不同。8086/80888086/8088指令系统的特点指令系统的特点2030401020533.13

2、.1指令格式与寻址方式指令格式与寻址方式v3.1.13.1.1指令格式指令格式操作码操作码 操作数操作数 操作码指示计算机执行具体的操作; 操作数用来指出操作码所需操作数的来源和操作结果的去向,即给出操作数或操作数的地址,并指出操作结果存放地址。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数。43.1.2 3.1.2 寻址方式寻址方式v包括:包括:操作数操作数的寻址方式和的寻址方式和指令指令的寻址方式。的寻址方式。v指令通常顺序存放,因此,指令寻址只要通过对指指令通常顺序存放,因此,指令寻址只要通过对指令指针令指针IPIP内容自动加内容自动加1 1,便可

3、形成下一条指令地址。,便可形成下一条指令地址。v当遇到转移或调用指令时,按照转移目标修改当遇到转移或调用指令时,按照转移目标修改IPIP或或CSCS,因此,指令的寻址主要是转移指令和调用指令因此,指令的寻址主要是转移指令和调用指令的转移目的地址的形成方式,这里先讨论操作数的的转移目的地址的形成方式,这里先讨论操作数的寻址方式寻址方式5操作数是指令的操作对象。操作数是指令的操作对象。8086/80888086/8088指令系统中的指令系统中的操作数存在形式有操作数存在形式有4 4种:种:l 立即数操作数:出现在指令中的常数。立即数操作数:出现在指令中的常数。l 寄存器操作数:指令中给出寄存器的符

4、号,操作数在寄存器寄存器操作数:指令中给出寄存器的符号,操作数在寄存器中。中。 l 存储器操作数:指令中给出存储器的地址形式,操作数在存存储器操作数:指令中给出存储器的地址形式,操作数在存储器中。储器中。l I/O I/O操作数:指令中要操作的数来自或送到操作数:指令中要操作的数来自或送到I/OI/O端口。端口。68086/8088的操作数寻址方式v1 1、隐含寻址、隐含寻址指令中不指明操作数,但隐含在操作码中。如:指令中不指明操作数,但隐含在操作码中。如:乘法,其指令开工是单操作数指令乘法,其指令开工是单操作数指令( (MUL MUL srcsrc) ),只指示了源操作数只指示了源操作数sr

5、csrc;另一操作数隐含为另一操作数隐含为ALAL或或AXAX。同样其乘积的存放地址也是隐含为同样其乘积的存放地址也是隐含为AXAX或或AXAX、DXDX。进栈、出栈指令进栈、出栈指令( (PUSH PUSH src,POPsrc,POP dstdst) ),另一个另一个操作数地址也是固定的即椎栈栈顶。隐含寻址的操作数地址也是固定的即椎栈栈顶。隐含寻址的指令,不需要计算有效地址指令,不需要计算有效地址EAEA,执行速度快,而执行速度快,而且大多为单字节指令,特别适合在微机中使用且大多为单字节指令,特别适合在微机中使用。7v2 2、立即数寻址、立即数寻址( (Immediate Addressi

6、ng)Immediate Addressing)这种寻址方式不需要根据地址寻找操作数,其执这种寻址方式不需要根据地址寻找操作数,其执行速度快,但由于操作数是指令的一部分,不能行速度快,但由于操作数是指令的一部分,不能修改,因此立即寻址方式只适用于提供常数,设修改,因此立即寻址方式只适用于提供常数,设定初始值。定初始值。使用立即寻址的指令主要用来给寄存器赋初值使用立即寻址的指令主要用来给寄存器赋初值89v3 3、寄存器(直接、寄存器(直接)寻址寻址( (Register Addressing)Register Addressing)操作数包含在操作数包含在CPUCPU内的某个寄存器中,指令中直接

7、给出该内的某个寄存器中,指令中直接给出该寄存器名。寄存器名。操作数对应的寄存器:操作数对应的寄存器:1616位:位:AXAX、BXBX、CXCX、DXDX、SISI、DIDI、SPSP和和BPBP;8 8位:位:ALAL、BLBL、CLCL、DLDL、AHAH、BHBH、CHCH、DHDH。10若操作数在存储器中,这时指令中给出的是若操作数在存储器中,这时指令中给出的是操作数所在单元的有效地址操作数所在单元的有效地址EA(EA(偏移地址偏移地址) )或或产生产生EAEA的计算方式。这类指令的执行过程如的计算方式。这类指令的执行过程如下下: :由执行部件由执行部件EUEU计算计算EAEA再由总线

8、接口部件再由总线接口部件BIUBIU根据:根据:PA=(PA=(操作数所在段的段首址操作数所在段的段首址16)+16)+EAEA,计算出物理地址计算出物理地址再执行总线周再执行总线周期,按物理地址访问存储器取出操作数送给期,按物理地址访问存储器取出操作数送给EUEU由由EUEU执行指令。执行指令。11v由于存储器组织是分段方式,对存储器的操作数寻由于存储器组织是分段方式,对存储器的操作数寻址,只能在一段内的址,只能在一段内的6464KBKB内寻址。内寻址。v操作数在什么段中,规定当前段寄存器为默认段寄操作数在什么段中,规定当前段寄存器为默认段寄存器。存器。v如果指令中某些操作数在其他段中,就应

9、在该操作如果指令中某些操作数在其他段中,就应在该操作数地址前使用数地址前使用段超越前缀段超越前缀指出段寄存器名。指出段寄存器名。12v8086/80888086/8088中默认段寄存器中默认段寄存器 允许超越的段寄存器如允许超越的段寄存器如下表示:下表示:存储器操作类型存储器操作类型默认段寄存器默认段寄存器允许超越的段寄存器允许超越的段寄存器偏移地址偏移地址取指令CS无IP堆栈操作SS无SP通用数据读写DSCS、ES、SSEABP基址寻址SSCS、ES、SSEA源数据串DSCS、ES、SSSI目的数据串ES无DI13v4 4、直接寻址、直接寻址( (Direct Addressing)Dire

10、ct Addressing)操作数放在存储器中,操作数放在存储器中,1616位位EAEA由指令直接给出,由指令直接给出,如果指令中没有段超越前缀指明操作数在哪个段,如果指令中没有段超越前缀指明操作数在哪个段,则默认为操作数在数据段。则默认为操作数在数据段。物理地址:物理地址:EADSPA1614 32 15注意:v1)1)直接寻址方式中,如果指令中的有效地址是一个直接寻址方式中,如果指令中的有效地址是一个1616位数,为了不与立即数寻址相混淆,书写时,位数,为了不与立即数寻址相混淆,书写时,EAEA用方括号用方括号 EAEA标识。如果有效地址是个符号地址,标识。如果有效地址是个符号地址,如如M

11、OV AX,DATAMOV AX,DATA则不用则不用 。v2)2)如操作数不在数据段而在其他段如操作数不在数据段而在其他段( (堆栈段或附加堆栈段或附加段段) ),则用段超越前缀标识,如:,则用段超越前缀标识,如:MOV AXMOV AX,ESES:2100H2100H,该指令表明操作数在附加段,则该指令表明操作数在附加段,则PA=(ESPA=(ES16)+2100H16)+2100H16寄存器中给出操作数的寄存器中给出操作数的EA)()()(16DISIBXDSPA17 50 18BPSSPA1619 B0 20v6、寄存器相对寻址寄存器相对寻址间址寄存器仍可为间址寄存器仍可为BXBX、B

12、PBP、SISI和和DIDI。与寄存与寄存器间接寻址类似。器间接寻址类似。例:设(SS)=3000H,(BP)=8000HMOV AX,0100H BP则src的PA(SS)16 +(BP)+D=(3000H)16+8000H+0100H=38100H位位移量16/8)()()(16)(DISIBXDSPA21v7、基址变址寻址基址变址寻址srcsrc的的EAEA由指令中指定的一个基址寄存器由指令中指定的一个基址寄存器( (BXBX或或BP)BP)的内容和一个变址寄存器的内容和一个变址寄存器( (SISI或或DI)DI)内内容之和组成,即容之和组成,即根据基址寄存器是根据基址寄存器是BXBX还

13、是还是BPBP,确定操作数是确定操作数是在数据段在数据段( (DS)DS)还是在堆栈段还是在堆栈段( (SS)SS)。)()()()(DISIBPBXEA22v如如: :MOV AX,BX DIMOV AX,BX DI或写成或写成MOV AX,BX+DIMOV AX,BX+DI设设( (DS)=2000H,(BX)=0256H,(DI)=6694HDS)=2000H,(BX)=0256H,(DI)=6694H,则则PA=(DS)PA=(DS)16+(BX)+(DI)=268EAH16+(BX)+(DI)=268EAHv指令执行后,将把指令执行后,将把268268EAHEAH和和268268EB

14、HEBH两单元的内容送两单元的内容送到到AXAX中,即中,即( (AH)=3BH,(AL)=20HAH)=3BH,(AL)=20Hv由于基址寄存器和变址寄存器的内容都是可以修改,由于基址寄存器和变址寄存器的内容都是可以修改,因此,在处理二维数组和表格时用这种寻址方式较因此,在处理二维数组和表格时用这种寻址方式较为方便。为方便。23+ 30 243.2数据传送类指令数据传送类指令v8086/8088有有14种数据传送类指令,可以实现种数据传送类指令,可以实现CPU的的内部寄存器之间、内部寄存器之间、CPU与存储器之间、与存储器之间、CPU和和I/O端口之间的数据传送。端口之间的数据传送。v分为四

15、类:分为四类:通用数据传送指令通用数据传送指令地址传送指令地址传送指令状态标志传送指令状态标志传送指令I/O端口数据传送指令端口数据传送指令253.2.1通用数据传送指令通用数据传送指令可以实现寄存器之间,寄存器和存储器之间的字或字节可以实现寄存器之间,寄存器和存储器之间的字或字节的复制。的复制。格式:格式:MOV dst,src功能:将源操作数功能:将源操作数src传送到目的操作数传送到目的操作数dst中。中。例:例:MOV AL,35H;将立即数将立即数35H复制到复制到AL中中该指令中该指令中src可为可为8/16位通用寄存器、段寄存器、存储器位通用寄存器、段寄存器、存储器中的字或字节,

16、也可是立即数。中的字或字节,也可是立即数。dst不允许为立即数,其不允许为立即数,其他同源操作数。他同源操作数。1、基本传送指令、基本传送指令MOVMOV指令传送功能图解立即数段寄存器CS DS ES SS通用寄存器AX BX CX DXBP SP SI DI存储器27MOV的的6种具体格式种具体格式v通用寄存器间传送通用寄存器间传送MOVAL,BL;ALBLMOVAX,CX;AXCXv通用寄存器和段寄存器间传送通用寄存器和段寄存器间传送MOVDS,AX; DSAXMOVAX,ES; AXESv通用寄存器和存储单元间传送通用寄存器和存储单元间传送MOVAL,BX;AL (BX)MOV1400H

17、,BX; (1400H)BX28v段寄存器和存储单元之间的传送段寄存器和存储单元之间的传送MOVDS,3000H ;将将3000H和和3001H两字节单元的两字节单元的内容送到内容送到DSMOVBX+SI,CS ;CS的内容送到的内容送到BX+SI和和BX+SI+1所指的两个字节存储单元所指的两个字节存储单元v立即数送到通用寄存器立即数送到通用寄存器MOVAX,2F5AH ;立即数立即数2F5AH送到送到AXv立即数送到存储单元立即数送到存储单元MOVWORDPRTDX,0800H;立即数立即数0800H送到送到DX所指的字节所指的字节存储单元,存储单元,word ptr 说明是字说明是字操作

18、,操作, byte ptr 说明是字节操作说明是字节操作29MOV指令注意事项:指令注意事项:v1)MOV指令是双操作数指令,源和目的操作数的类指令是双操作数指令,源和目的操作数的类型必须一致,即或都为字,或都为字节。型必须一致,即或都为字,或都为字节。MOV AX,BL MOV AL,1000H v2)MOV指令中源和目的操作数不能同为存储器操作指令中源和目的操作数不能同为存储器操作数,即不允许在两个存储单元间直接传送,如需要数,即不允许在两个存储单元间直接传送,如需要需通过通用寄存器或存储单元需通过通用寄存器或存储单元MOVAL,DIMOVBX,AL30v3)不能用不能用CS作目的操作数,

19、即作目的操作数,即CS寄存器的内容不得寄存器的内容不得随意改变,随意改变,CS和和IP的值一般只能在转移指令时改变的值一般只能在转移指令时改变v4)不在段寄存器间直接传送数据不在段寄存器间直接传送数据v5)不允许用立即数作目的操作数不允许用立即数作目的操作数dstv6)不允许直接向段寄存器传送立即数,如果需要,不允许直接向段寄存器传送立即数,如果需要,则应通过通用寄存器或存储单元传送。则应通过通用寄存器或存储单元传送。312、堆栈操作指令、堆栈操作指令PUSH,POP堆栈是用来保存数据和地址的一个存储区,位于堆栈是用来保存数据和地址的一个存储区,位于堆栈段中。堆栈在存储区的位置由堆栈段寄存器堆

20、栈段中。堆栈在存储区的位置由堆栈段寄存器SS和堆栈指针和堆栈指针SP来规定,来规定,SS给出当前堆栈的段给出当前堆栈的段基址。基址。堆栈只有一个出入口,用堆栈只有一个出入口,用SP指示,指示,SP任何时候任何时候都指向当前堆栈的栈顶,而且堆栈操作总是字操都指向当前堆栈的栈顶,而且堆栈操作总是字操作。作。32在调用子程序或进行中断处理时,需要保存返回地址在调用子程序或进行中断处理时,需要保存返回地址以及数据以及数据(此过程称为保护现场此过程称为保护现场);子程序返回或中断;子程序返回或中断处理完毕返回时,必须恢复中断前的现场并回到原来处理完毕返回时,必须恢复中断前的现场并回到原来主程序,这些功能

21、要通过堆栈来实现。保护现场由入主程序,这些功能要通过堆栈来实现。保护现场由入栈指令栈指令PUSH,恢复现场由出栈指令恢复现场由出栈指令POP完成。完成。v1)PUSH格式:格式:PUSHsrc功能:将功能:将src压入堆栈,压入堆栈,src可为可为16位的通用寄存器、段位的通用寄存器、段寄存器或存储单元。寄存器或存储单元。33例:例:PUSH AXPUSH DS指令执行过程:指令执行过程:v(SP)(SP)-2v为什么为什么“-”且且“2”?v(SP)=src的低的低8位位(SP)+1)=src的高的高8位位例例: (AX)=2207HPUSH AX如右图示。如右图示。指令执行前堆栈段(SP)

22、(AX)=2207H指令执行后堆栈段(SP)入栈方向0722低地址低地址PUSHAX指令操作过程示意图34v2)POP格式:格式:POP dst功能:将当前功能:将当前SP所指的栈顶部的一个字数据弹出所指的栈顶部的一个字数据弹出送到送到dst所指的所指的16位的通用寄存器、段寄存器位的通用寄存器、段寄存器(CS除外除外)或字存储单元。或字存储单元。例:例:POP AXPOP DS指令执行过程与指令执行过程与PUSH相反。相反。35使用堆栈指令时注意:使用堆栈指令时注意:v1)src和和dst可以为可以为16位通用寄存器、段寄存器或存储单元中位通用寄存器、段寄存器或存储单元中的的16位字数据,但

23、不能为立即数,位字数据,但不能为立即数,CS不能为不能为dst,但可以为但可以为src。v2)每次执行每次执行PUSH时,时,SP自动减自动减2,使,使SP向低址方向移动,向低址方向移动,再将再将src压栈,且高字节先入栈;执行压栈,且高字节先入栈;执行POP时,时,SP自动加自动加2,使使SP向高地址方向移动。向高地址方向移动。v3)使用堆栈操作保存多个寄存器内容或恢复时,要按使用堆栈操作保存多个寄存器内容或恢复时,要按“先进先进后出后出”的原则组织。的原则组织。3637 指令格式:指令格式:XLAT OPXLAT OP 指令功能:将指令功能:将BXBX的内容和的内容和ALAL的内容相加作为

24、有效地址的内容相加作为有效地址EAEA, 在一个表格中找出此单元中的内容并传送至在一个表格中找出此单元中的内容并传送至ALAL中。中。即即: (: (AL)(BX)+(AL)AL)(BX)+(AL)38XLAT举例举例v已知十进制已知十进制09的七段的七段LED显示码分别为显示码分别为40H、79H、24H、30H、19H、12H、02H、78H、00H、18H。试用试用XLAT指令求数字指令求数字6的七段显示码的七段显示码v程序代码如下:程序代码如下:vTABLEDB40H,79H,24H,30H,19H DB12H,02H,78H,00H,18H MOVAL,6 MOVBX,OFFSETT

25、ABLE XLATTABLE;查表得查表得(AL)=02H393.2.2 地址传送指令地址传送指令用于传送地址码,将操作数的段基址或用于传送地址码,将操作数的段基址或EA传传送到指定的寄存器中。送到指定的寄存器中。1、取有效地址指令、取有效地址指令LEA(Load Effective Address:有效地址送寄存器有效地址送寄存器)l格式:格式:LEA dst,srcl功能:将功能:将src的有效地址的有效地址EA送到送到dst所指寄存器所指寄存器lsrc必须是在存储单元地址,必须是在存储单元地址,dst必须是必须是16位通用寄位通用寄存器。注:存器。注:该指令传送地址,而不是数据该指令传送

26、地址,而不是数据。40v例:设例:设(DS)=1000H,(SI)=3000H, (14000H)=7788HLEA BX,SI+1000H ;执行后执行后(BX)=4000HMOV BX, SI+1000H;执行后执行后(BX)=7788HvLEA AX,TABLEMOV AX,OFFSET TABLE41v2、将双字地址指针送、将双字地址指针送DS和一个寄存器指令和一个寄存器指令LDS (Load DS with pointer:指针送寄存器和指针送寄存器和DS)格式:格式:LDS dst,src功能:把功能:把src指定的指定的4个存储单元中存放的个存储单元中存放的32位地址指针位地址指

27、针(一个一个16位的段基址和一个位的段基址和一个16位的偏移地址位的偏移地址)传送到两个传送到两个16位的寄存器,其中两个低位字节的内容位的寄存器,其中两个低位字节的内容(偏移地址偏移地址)送送dst指示的寄存器中,后两个高位字节单元中的内容指示的寄存器中,后两个高位字节单元中的内容(段基址段基址)送入送入DS。42v例:设例:设(DS)=3200H,(33550H)=3A78H,(33552H)=1998HvLDSSI,1550Hsrc指定的指定的PA=(DS)16+1550=33550H,所以执行指令后所以执行指令后(SI)=3A78H,(DS)=1998H43v3、将双字地址指针送到、将

28、双字地址指针送到ES和一个寄存器的和一个寄存器的指令指令LES(Load ES with pointer:指针送寄指针送寄存器和存器和ES)格式:格式:LES dst,src功能:与功能:与LDS基本相同,不同是将基本相同,不同是将src的后两个字的后两个字节单元内容送节单元内容送ESLES DI,3500H;执行后,将执行后,将3500H和和3501H两单元的内容送两单元的内容送DI,3502H,3503H的内容送的内容送ES443.2.3状态标志传送指令状态标志传送指令v1、标志寄存器、标志寄存器(PSW)低低8位送位送AH指令指令LAHF(Load AH with Flags)格式:格式

29、:LAHF功能功能: (AH)(PSW低字节低字节)v2、AH送送PSW低低8位指令位指令SAHF(Store AH into Flags)格式:格式:SAHF功能:功能: (PSW低字节低字节) (AH)45v3、PSW入栈指令入栈指令PUSHF(PUSH the Flags)格式:格式:PUSHF功能:功能: (SP) (SP)-2 (SP)+1, (SP)(PSW)v4、PSW出栈指令出栈指令POPF(POP the Flags)格式:格式:POPF功能:功能: (PSW) (SP)+1, (SP) (SP) (SP)+246(dst) (src),(ES)(src+2)DWLES ds

30、t,src取指针到ES(LES)(dst) (src),(DS)(src+2)DWLDS dst,src取指针到DS(LDS)将src的EA送dst-LEA dst,src取有效地址(LEA)地址传送(AL)(BX+AL)BXLAT换码(XLAT)(dst)(src)B,WXCHG dst,src交换(XCHG)从堆栈弹出字到dstWPOP dst出栈(POP)将src压入堆栈WPUSH src入栈(PUSH)(dst)(src)B,WMOV dst,src传送(MOV)通用传送操作说明操作说明操作数类型操作数类型指令格式指令格式名称名称类类数据传送类指令47操作说明操作说明操作数类型操作数类

31、型指令格式指令格式名称名称类类将AL/AX的内容输出到端口B,WOUT dst,AL(AX)输出(OUT)从端口输入字/字节到AL或AXB,WIN AL(AX),src输入(IN)I/O端口传送从堆栈弹出字到标志寄存器WPOPF标志弹出栈将标志寄存器内容压入堆栈WPUSHF标志压入栈将AH送入标志寄存器的低字节BSAHF(AH)存入标志将标志寄存器的低字节送入AHBLAHF取标志到AH标志寄存器传送482、堆栈操作指令、堆栈操作指令PUSH,POP堆栈是用来保存数据和地址的一个存储区,位于堆栈是用来保存数据和地址的一个存储区,位于堆栈段中。堆栈在存储区的位置由堆栈段寄存器堆栈段中。堆栈在存储区

32、的位置由堆栈段寄存器SS和堆栈指针和堆栈指针SP来规定,来规定,SS给出当前堆栈的段给出当前堆栈的段基址。基址。堆栈只有一个出入口,用堆栈只有一个出入口,用SP指示,指示,SP任何时候任何时候都指向当前堆栈的栈顶,而且堆栈操作总是字操都指向当前堆栈的栈顶,而且堆栈操作总是字操作。作。49在调用子程序或进行中断处理时,需要保存返回地址在调用子程序或进行中断处理时,需要保存返回地址以及数据以及数据(此过程称为保护现场此过程称为保护现场);子程序返回或中断;子程序返回或中断处理完毕返回时,必须恢复中断前的现场并回到原来处理完毕返回时,必须恢复中断前的现场并回到原来主程序,这些功能要通过堆栈来实现。保

33、护现场由入主程序,这些功能要通过堆栈来实现。保护现场由入栈指令栈指令PUSH,恢复现场由出栈指令恢复现场由出栈指令POP完成。完成。v1)PUSH格式:格式:PUSHsrc功能:将功能:将src压入堆栈,压入堆栈,src可为可为16位的通用寄存器、段位的通用寄存器、段寄存器或存储单元。寄存器或存储单元。50例:例:PUSH AXPUSH DS指令执行过程:指令执行过程:v(SP)(SP)-2v为什么为什么“-”且且“2”?v(SP)=src的低的低8位位(SP)+1)=src的高的高8位位例例: (AX)=2207HPUSH AX如右图示。如右图示。指令执行前堆栈段(SP)(AX)=2207H

34、指令执行后堆栈段(SP)入栈方向0722低地址低地址PUSHAX指令操作过程示意图51v2)POP格式:格式:POP dst功能:将当前功能:将当前SP所指的栈顶部的一个字数据弹出所指的栈顶部的一个字数据弹出送到送到dst所指的所指的16位的通用寄存器、段寄存器位的通用寄存器、段寄存器(CS除外除外)或字存储单元。或字存储单元。例:例:POP AXPOP DS指令执行过程与指令执行过程与PUSH相反。相反。52使用堆栈指令时注意:使用堆栈指令时注意:v1)src和和dst可以为可以为16位通用寄存器、段寄存器或存储单元中位通用寄存器、段寄存器或存储单元中的的16位字数据,但不能为立即数,位字数

35、据,但不能为立即数,CS不能为不能为dst,但可以为但可以为src。v2)每次执行每次执行PUSH时,时,SP自动减自动减2,使,使SP向低址方向移动,向低址方向移动,再将再将src压栈,且高字节先入栈;执行压栈,且高字节先入栈;执行POP时,时,SP自动加自动加2,使使SP向高地址方向移动。向高地址方向移动。v3)使用堆栈操作保存多个寄存器内容或恢复时,要按使用堆栈操作保存多个寄存器内容或恢复时,要按“先进先进后出后出”的原则组织。的原则组织。53交换可在通用寄存器之间、通用寄存器和存储器之交换可在通用寄存器之间、通用寄存器和存储器之间进行。段寄存器不能作为本指令的操作数,而且两间进行。段寄

36、存器不能作为本指令的操作数,而且两个存储单元之间不能直接交换数据。个存储单元之间不能直接交换数据。54使用此指令时,应首先在数据段中预置一个表格。该表使用此指令时,应首先在数据段中预置一个表格。该表格的最大长度不能超过格的最大长度不能超过256256字节。表的起始地址的偏移量字节。表的起始地址的偏移量应事先装入应事先装入BXBX寄存器,寄存器,ALAL中存放查找对象在表中地址与表中存放查找对象在表中地址与表的起始地址相差的字节数。的起始地址相差的字节数。55XLAT举例举例v已知十进制已知十进制09的七段的七段LED显示码分别为显示码分别为40H、79H、24H、30H、19H、12H、02H

37、、78H、00H、18H。试用试用XLAT指令求数字指令求数字6的七段显示码的七段显示码v程序代码如下:程序代码如下:vTABLEDB40H,79H,24H,30H,19H DB12H,02H,78H,00H,18H MOVAL,6 MOVBX,OFFSETTABLE XLATTABLE;查表得查表得(AL)=02H563.2.2 地址传送指令地址传送指令用于传送地址码,将操作数的段基址或用于传送地址码,将操作数的段基址或EA传传送到指定的寄存器中。送到指定的寄存器中。1、取有效地址指令、取有效地址指令LEA(Load Effective Address:有效地址送寄存器有效地址送寄存器)l格

38、式:格式:LEA dst,srcl功能:将功能:将src的有效地址的有效地址EA送到送到dst所指寄存器所指寄存器lsrc必须是在存储单元地址,必须是在存储单元地址,dst必须是必须是16位通用寄存器。注:位通用寄存器。注:该指该指令传送地址,而不是数据令传送地址,而不是数据。57v例:设例:设(DS)=1000H,(SI)=3000H, (14000H)=7788HLEA BX,SI+1000H ;执行后执行后(BX)=4000HMOV BX, SI+1000H;执行后执行后(BX)=7788HvLEA AX,TABLEMOV AX,OFFSET TABLE58v2、将双字地址指针送、将双字

39、地址指针送DS和一个寄存器指令和一个寄存器指令LDS (Load DS with pointer:指针送寄存器和指针送寄存器和DS)格式:格式:LDS dst,src功能:把功能:把src指定的指定的4个存储单元中存放的个存储单元中存放的32位地址指针位地址指针(一个一个16位的段基址和一个位的段基址和一个16位的偏移地址位的偏移地址)传送到两个传送到两个16位的寄存器,其中两个低位字节的内容位的寄存器,其中两个低位字节的内容(偏移地址偏移地址)送送dst指示的寄存器中,后两个高位字节单元中的内容指示的寄存器中,后两个高位字节单元中的内容(段基址段基址)送入送入DS。59v例:设例:设(DS)

40、=3200H,(33550H)=3A78H,(33552H)=1998HvLDSSI,1550Hsrc指定的指定的PA=(DS)16+1550=33550H,所以执行指令后所以执行指令后(SI)=3A78H,(DS)=1998H60v3、将双字地址指针送到、将双字地址指针送到ES和一个寄存器的和一个寄存器的指令指令LES(Load ES with pointer:指针送寄指针送寄存器和存器和ES)格式:格式:LES dst,src功能:与功能:与LDS基本相同,不同是将基本相同,不同是将src的后两个字的后两个字节单元内容送节单元内容送ESLES DI,3500H;执行后,将执行后,将3500

41、H和和3501H两单元的内容送两单元的内容送DI,3502H,3503H的内容送的内容送ES613.2.3状态标志传送指令状态标志传送指令v1、标志寄存器、标志寄存器(PSW)低低8位送位送AH指令指令LAHF(Load AH with Flags)格式:格式:LAHF功能功能: (AH)(PSW低字节低字节)v2、AH送送PSW低低8位指令位指令SAHF(Store AH into Flags)格式:格式:SAHF功能:功能: (PSW低字节低字节) (AH)62v3、PSW入栈指令入栈指令PUSHF(PUSH the Flags)格式:格式:PUSHF功能:功能: (SP) (SP)-2

42、(SP)+1, (SP)(PSW)v4、PSW出栈指令出栈指令POPF(POP the Flags)格式:格式:POPF功能:功能: (PSW) (SP)+1, (SP) (SP) (SP)+263附:输入、输出专用指令vPC机里,所有机里,所有I/O端口与端口与CPU之间的通信都由之间的通信都由IN、OUT实现,外部设备端口使用实现,外部设备端口使用16位二进制编址,端位二进制编址,端口地址由口地址由0000HFFFFH,,其中前其中前256个端口个端口(00HFFH),可以使用直接端口寻址,由指令端口可以使用直接端口寻址,由指令端口号号PORT指明,当端口号大于指明,当端口号大于255时,

43、必须使用间接时,必须使用间接端口寻址,不是内存地址,由于外设端口地址并不端口寻址,不是内存地址,由于外设端口地址并不分段,因些这些地址为绝对地址,不需要使用段寄分段,因些这些地址为绝对地址,不需要使用段寄存器。存器。64(dst) (src),(ES)(src+2)DWLES dst,src取指针到ES(LES)(dst) (src),(DS)(src+2)DWLDS dst,src取指针到DS(LDS)将src的EA送dst-LEA dst,src取有效地址(LEA)地址传送(AL)(BX+AL)BXLAT换码(XLAT)(dst)(src)B,WXCHG dst,src交换(XCHG)从堆

44、栈弹出字到dstWPOP dst出栈(POP)将src压入堆栈WPUSH src入栈(PUSH)(dst)(src)B,WMOV dst,src传送(MOV)通用传送操作说明操作说明操作数类型操作数类型指令格式指令格式名称名称类类数据传送类指令65操作说明操作说明操作数类型操作数类型指令格式指令格式名称名称类类将AL/AX的内容输出到端口B,WOUT dst,AL(AX)输出(OUT)从端口输入字/字节到AL或AXB,WIN AL(AX),src输入(IN)I/O端口传送从堆栈弹出字到标志寄存器WPOPF标志弹出栈将标志寄存器内容压入堆栈WPUSHF标志压入栈将AH送入标志寄存器的低字节BSA

45、HF(AH)存入标志将标志寄存器的低字节送入AHBLAHF取标志到AH标志寄存器传送663.3算术运算指令v8086/8088指令系统提供的算术类运算指令包括加、减、乘、除4种基本运算指令,以及十进制数运算的各种调整指令。可以完成带符号或无符号的8位/16位二进制数的算术运算,也可以完成BCD码表示的十进制数的算术运算。v对于带符号数和无符号数,加减运算过程相同,而乘除运算过程完全不同。67v3.3.1加法运算指令v1、加法指令ADD格式:ADD dst,src功能: (dst)(dst)+(src)操作数可以是字或字节例:ADD AX,3A5FHADD AX,BX+1000HADD BX+D

46、I,AX68v2、带进位加指令ADC格式:ADCdst,src功能: (dst)(dst)+(src)+CF例:ADCAX,BX; (AX) (AX) +(BX)+CFADCAX,ADDRBX;将AX的内容和物理地址为DS: (ADDR+BX)的字存储单元的内容相加,再加进位C,结果送AX该命令为多字节数相加提供方便。69v例:目的操作数存放在DX和AX寄存器中,其中DX存放高位字。源操作数存放在BX、CX中,BX存放高位字。v执行指令前:(DX)=0002H,(AX)=0F365H(BX)=0005H,(CX)=0E024Hv指令序列:ADD AX,CXADC DX,BX70v第一条指令执行

47、后:(AX)=0D389HSF=1,ZF=0,CF=1,OF=0v第二条指令执行后:(DX)=0008HSF=0,ZF=0,CF=0,OF=0 1D389 E024 F365 00081(CF) 0005 0002 71v3、加1指令(增量指令)INC格式:INCdst功能: (dst)(dst)+1v4、压缩BCD码十进制数加法调整指令DAA格式:DAA功能:将两个压缩的BCD码十进制数相加后存入AL的结果,调整为正确的压缩的BCD码。72vDAA调整方法1)如果AL寄存器的低4位大于9或标志寄存器中的A F位为1,则AL寄存器的内容加6H,并将标志寄存器中的AF位置12)如果AL寄存器的高

48、4位大于9或标志寄存器中的CF位为1,则AL寄存器的内容加60H,并将标志寄存器中的CF位置173v例:求两个十进制数78+56的正确结果,可用以下程序段实现MOVAL,78HADDAL,56H;(AL)=CEHDAA;高、低位均为大于9,则(AL)(AL)+66H,并置AF1,CF1,则执行DAA后得CF=1 ,(AL)=34H74v5、非压缩BCD码十进制数加法调整指令AAA格式:AAA功能:在用ADD或ADC指令对两个非压缩BCD码十进制数相加之后(结果放AL中),用AAA指令对AL中的加法结果进行调整,使之成为一个正确的非压缩BCD码。75v调整过程:1)如AL寄存器低4位在09之间,

49、且AF0,则执行3);2)如AL寄存器的低4位在AF之间或AF1,则(AL)(AL)+6,(AH) (AH)+1,并将标志寄存器中的AF位置1;3)清除AL的高4位;4)AF位的值送CF位。76v例:ADDAL,CLAAAv如指令执行前: (AL)=00001001,(CL)=00001000。第一条指令执行后,(AL)=00010001,因AF=1,故AAA调整时,将AL的低4位加6,即为:00010111,然后高4位清零成为:00000111,且AH加1,则(AH)00000001,(AL)=00000111,得到两个非压缩十进制相加的正确结果17。773.3.2 减法指令v1、减法指令S

50、UB格式:SUBdst,src功能: (dst)(dst)-(src)例:SUB AX,0200H;(AX)(AX)-0200HSUB BX,DI+100H;(BX)减去(DI+100H)字单元中的内容,结果放在BX中78v2、带借位的减法指令SBB格式:SBB dst,src功能: (dst)(dst)-(src)-CF例:SBBAX,2100H; (AX)(AX)-2100H-CF SBBAL,BL; (AL)(AL)-(BL)-CF该指令主要用于多字节数相减运算。 79v3、减1指令(减量指令)DEC格式:DECdst功能: (dst)(dst)-1v4、求补指令NEG格式:NEGdst

51、功能: (dst)0-(dst)0-(dst)0FFH- (dst) +1或0FFFFH - (dst) +180v5、比较指令CMP格式:格式:CMP dstCMP dst,src src 功能:用功能:用dstdst去减去减srcsrc,并根据所得的差设置有关标志位,为随并根据所得的差设置有关标志位,为随后的条件转移指令提供条件。后的条件转移指令提供条件。但并不保留该差值,所以,不会改变指令中的操作数。但并不保留该差值,所以,不会改变指令中的操作数。注意点:注意点:l l 影响标志寄存器影响标志寄存器AFAF、CFCF、PFPF、OFOF、ZFZF、SF SF 。l l 指令执行后,目的操

52、作数保持原值不变。指令执行后,目的操作数保持原值不变。816 6、压缩型、压缩型BCDBCD码十进制数减法的数调整指令:码十进制数减法的数调整指令:DAS DAS 指令格式:指令格式:DASDAS功能:对在功能:对在ALAL中两个压缩型中两个压缩型BCDBCD数相减的结果,调整成压缩型数相减的结果,调整成压缩型BCDBCD数在数在ALAL中。中。 注意点:注意点:l l 影响标志寄存器影响标志寄存器CFCF、PFPF、AFAF、ZFZF、SFSF,其中其中CF=1CF=1说明结果大于说明结果大于9999。l l 必须紧跟在减法指令之后且只能对必须紧跟在减法指令之后且只能对ALAL中的内容进行调

53、整。中的内容进行调整。 827 7、减法的非压缩型、减法的非压缩型BCDBCD数调整指令:数调整指令: AASAAS 指令格式:指令格式:AASAAS功能:对在功能:对在ALAL中两个非压缩型中两个非压缩型BCDBCD数相减的结果,调整成非压缩型数相减的结果,调整成非压缩型BCDBCD数在数在ALAL中。中。 注意点:注意点:l l 影响标志寄存器影响标志寄存器AFAF、CF CF l l 必须紧跟在减法指令之后且只能对必须紧跟在减法指令之后且只能对ALAL中的内容进行调整。中的内容进行调整。例:例:SUB ALSUB AL,BL BL ;ALAL和和BLBL中的非压缩中的非压缩BCDBCD数

54、相减数相减 AAS AAS ;调整调整ALAL为正确的非压缩为正确的非压缩BCDBCD数数83综合举例综合举例设x,y,z均为双精度数,分别存放于X,X+2;Y,Y+2;Z,Z+2的存储单元,用汇编指令实现: w x+y+24-zw存放于W,W+2单元.MOV AX , XMOV DX , X+2ADD AX , YADC DX , Y+2ADD AX , 24ADC DX , 0SUB AX , ZSBB DX , Z+2MOV W , AXMOV W+2 , DXX+Y+24-Z结果存入W,W+284三、乘法指令三、乘法指令 计算机的乘法指令分为无符号乘法指令和有符号乘法指令,计算机的乘法

55、指令分为无符号乘法指令和有符号乘法指令,他们的唯一区别就在于:数据的最高位是作为他们的唯一区别就在于:数据的最高位是作为“数值数值”参与运参与运算,还是作为算,还是作为“符号位符号位”参与运算。参与运算。 乘法指令的被乘数都是隐含操作数,乘数在指令中显式地乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。写出来。CPUCPU会根据乘数是会根据乘数是8 8位、还是位、还是1616位操作数,来自动选用位操作数,来自动选用被乘数:被乘数:ALAL、AXAX。851 1、无符号数乘法指令无符号数乘法指令 MULMUL 指令格式:指令格式:MUL MUL srcsrc功能:功能:AXAXALAL* *srcsrc(字节乘法)字节乘法); ; DXDX,AXAXAXAX* *srcsrc(字乘法)字乘法) 操作数:可以是通用寄存器、存储器,不能是立即数。操作数:可以是通用寄存器、存储器,不能是立即数。注意点:注意点: 影响标志寄存器影响标志寄存器CFCF和和OFOF(AFAF、PFPF、ZFZF、SF SF 无定义)无定义)字节乘:若乘积高字节乘:若乘积高8 8位位AH0AH0,则则CF=1CF=1,OF=1OF=1; ; 若乘积高若乘积高8 8位位AH=0AH=0,则则CF=0CF=0,OF=0OF=0;字乘:若乘积高

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论