《微机原理与接口技术实用教程.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术实用教程.ppt(55页珍藏版)》请在三一办公上搜索。
1、第3章 80X86的寻址方式 及指令系统,2023/7/1,微机原理,2,本章要点,及各类指令的功能和用法,80X86系统的各种寻址方式,80X86的指令系统构成,2023/7/1,微机原理,3,定义:,程序:让计算机完成某种操作的命令,所有指令的集合 称为指令系统。指令用助记符表示,汇编语言程序经过编译连接后,指令助记符转换为二进制代码,即指令代码,或称为机器码,可以由CPU执行。指令代码需要事先存放在微机系统的内部存储器中由CS寄存器中的内容所指定的代码段中。,2023/7/1,微机原理,4,指令的一般格式:操作助记符 目的操作数(或其位置),源操作数(或其位置)dst src,例如:MO
2、VAX,SI对应的机器码是8BH,04H MOVAX,ES:SI对应的机器码是26H,8BH,04H,2023/7/1,微机原理,5,3.1 8086的寻址方式(addressing mode),寻址方式:指令中给出的操作数的表示(或存放)方式,如果操作数存放在存储器中,CPU必须先计算出操作数的物理地址,寄存器间接寻址,直接寻址,寄存器寻址,隐含寻址,基址变址相对寻址,基址变址寻址,寄存器相对寻址,立即寻址,寻址方式,2023/7/1,微机原理,6,立即寻址:操作数(8位或16位)出现在指令中,与指令代码一起存放在存储器的代码段中。,例:MOV AX,6000H MOV AH,60H MOV
3、 AL,00H,2023/7/1,微机原理,7,寄存器寻址:操作数放在CPU内部的寄存器中,可为8位或16位寄存器,由指令给出。,例:MOV AX,BX MOV AH,BH,2023/7/1,微机原理,8,直接寻址:操作数放在存储器的数据段(其段地址由DS中的内容决定)中,其有效地址(偏移地址 直接用偏(位)移量表示在指令中,占2个字节。偏 移量常用disp表示,是有效地址的一部分或全部,可以8位也可以16位。例:MOVAX,DS:0100H,2023/7/1,微机原理,9,寄存器间接寻址:操作数在存储单元中,其有效由BXSI或DI中的内容给出表示为:(BX)EA=(SI)(DI)寄存器BXS
4、I或DI在指令中给出。例:MOVAX,SI,2023/7/1,微机原理,10,寄存器相对寻址:操作数在存储器中,其有效地址是位移量(可8位或者16位)与变址或基址寄存器之和,Disp与寄存器在指令中给出。,例:MOV AX,5BX 也可写成 MOV AX,BX5,2023/7/1,微机原理,11,基址变址寻址:操作数在存储器中,偏移地址由基址寄存器和变址寄存器中的内容相加确定。,例:MOVAX,BXDI,2023/7/1,微机原理,12,基址变址相对寻址:寄存器相对寻址与基址变址寻址 方式的结合。,disp与寄存器均在指令中给出。例:MOV AX,5BPSI,2023/7/1,微机原理,13,
5、隐含寻址:指令本身隐含了操作数的地址,例如:字符串操作指令MOVS,源操作数由DS:SI寄存器间接寻址,目的操作数由ES:DI寄存器间接寻址。,以各种类型访问存储器时,存储单元地址的组成:,2023/7/1,微机原理,14,3.2 8086/8088的指令系统,a,除SAHF外不影响标志位,SAHF是将AH 内容送到 标志寄存器的低8位;b,不能用CS作为目的操作数;c,源操作数和目的操作数不能同时在存储器中,即:不能在一条指令中实现数据在存储器中的传送。,3.2.1 数据传送指令,2023/7/1,微机原理,15,.数据传送,由 源-目的例:MOVAX,BX;寄存器寻址 MOVDL,AL;寄
6、存器寻址 MOVAX,02;源操作数用立即寻址 MOVSI,BX;源操作数寄存器间接寻址 MOV AL,4DI;源操作数用寄存器相对寻址 MOV AX,BX+2;源操作数用寄存器相对寻址 MOV BXDI,DX;目的操作数用基址加变址寻址,1、MOV指令:数据传送(复制),2023/7/1,微机原理,16,立即数、代码段寄存器CS只能作源操作数。IP寄存器不能作源操作数或目的操作数。MOV指令不能在两个存储单元之间直接传 送数据,也不能在两个段寄存器之间直接 传送数据。两个操作数的类型属性要一致。,注意事项!,2023/7/1,微机原理,17,.堆栈操作指令:堆栈:是以后进先出规则保存信息的一
7、种存储机构。(1)8086中堆栈段地址在SS寄存器中,堆栈当前偏移地址在SP寄存器中,SP称为堆栈指针。SP的初值代表了堆栈区的大小,若 SP=0100H,有右图所示:(2)堆栈操作方式:以字为单位进行操作,高字节在高地址,低字节在低地址。,2023/7/1,微机原理,18,(3)堆栈操作指令a、压入指令:PUSH例:PUSHAX 如果 AX=1234H,则该指令执行后的结果:SP00FEH,(00FFH)12H,(00FEH)34H,b、弹出指令:POP例:POPBX,2023/7/1,微机原理,19,.字节或字交换指令:寄存器之间或寄存器与存储器之间内容交换。XCHG OPR1,OPR2;
8、(OPR1)(OPR2)例:xchg ax,cx,2023/7/1,微机原理,20,.字节转换指令:常用于查表。格式:XLAT 转换表 即:XLAT;(BX+AL)AL,BX的内容是表的首地 址,AL的内容是表内的序号。采用隐含寻址方式。功能:将一个字节从一种代码转换成另一种代码。XLAT指令是通过查表方式来完成翻译功能的,因此,执行该指令之前,必须建立好一张翻译表,该表的最大容量为256个字节。,2023/7/1,微机原理,21,INA,port;数据从 port 端口输入到AL或AX OUTport,A;数据从AL或AX输出到 port 端口1)A是AL(8位输入输出)或AX(16位输入输
9、出)2)port 是外设的端口地址,可以是8位立即数表示的直接 地址,也可以用DX寄存器的内容作为端口地址。例:INAL,3FH MOVDX,3FHOUTDX,AX,2、输入输出指令(I/O指令),2023/7/1,微机原理,22,SAHF,PUSHF,POPF,标志送AH指令功能是:将标志寄存器中的SF、ZF、AF、PF传送至AH的指定位,空位没有定义,AH送标志位寄存器低字节指令。影响标志位,但对OF、DF、IF无影响,标志入栈指令修改堆栈指针不影响标志位,标志出栈指令修改堆栈指针影响标志位,3、地址目标传送指令,LEA,2023/7/1,微机原理,23,4、标志传送指令,标志送AH指令L
10、AHF,AH送标志寄存器低字节指令SAHF,标志入栈指令PUSHF,标志出栈指令POPF,2023/7/1,微机原理,24,3.2.2 算术运算类指令,1.加法与减法指令 a,影响标志位 b,只能有一个操作数在存储器中 c,目的操作数不能采用立即寻址方法,ADDDST,SRC;DSTDST+SRCADC DST,SRC;DSTDST+SRC+CFSUB DST,SRC;DSTDST-SRCSBB DST,SRC;DSTDST-SRC-CFNEG DST;DST0-DST,即取补,2023/7/1,微机原理,25,ADDAX,SI;完成16位数据的加法运算;SRC在存储器中;DST是CPU中的A
11、X寄存器,例:,SBBCX,DATA1;完成16位数据的减法运算;SRC在存储器中;DST是CPU中的CX寄存器,例:,2023/7/1,微机原理,26,2.比较指令CMPDST,SRC;DST-SRC,结果不保留;只影响标志位例:CMPAX,BX,a、作为无符号数时,比较后的大小由CF和ZF决定:ZF=1:则 AX=BX ZF=0,CF=0:则 AX BX ZF=0,CF=1:则 AX BX,b、作为带符号数时,比较后的大小由SF、ZF和OF决定:ZF=1:则 AX=BX OF 异或 SF=0:则 AX BX OF 异或 SF=1:则 AX BX,2023/7/1,微机原理,27,例:MOV
12、AX,003AH;0000 0000 0011 1010 MOVBX,8003H;1000 0000 0000 0011 CMPAX,BX;1000 0000 0011 0111影响标志位:CF=1,OF=1,ZF=0,SF=1,PF=0,AF=0作为无符号数时,CF=1,则 AX BX 003AH小于8003H作为带符号数时,OF 异或 SF=0,则 AXBX 正数大于负数,2023/7/1,微机原理,28,3.增量减量指令影响除CF以外的所有状态标志,只有一个操作数DST,可以是8位也可以是16位操作数。常用来修改计数器的计数指针。INC DST;DST+1 DSTDEC DST;DST-
13、1 DST例:INCAX;AX+1 AX,2023/7/1,微机原理,29,4、乘法与除法指令只有一个操作数SRC,且不可以是立即数。,IMUL SRC;符号数的乘法;字节运算时,ALSRC AX;字运算时,AXSRC DX与AXMUL SRC;无符号数的乘法,其它同上IDIV SRC;符号数除法;字节运算时:AXSRC的商AL;AXSRC的余数AH;字运算时:DX:AXSRC的商AX;DX:AXSRC的余数DXDIV SRC;无符号数除法,其它同上,2023/7/1,微机原理,30,(1)乘法运算后,标志位的使用:CF=OF=1,说明结果为一个字或双字。CF=OF=0,说明结果为一个字节或字
14、,无符号数时,高字(高字节)全为0;符号数时,高字(高字节)仅是低字(低字节)的符号扩展(2)除法结果的标志位无意义。(3)除数为0或商溢出时,除法结果无意义,并引起溢出中断。,注意:,2023/7/1,微机原理,31,5,符号扩展指令CBW;将AL中的字节数符号扩展成AX中的字.CWD;将AX中的字符号扩展成DX与AX中的双字.,扩展时:正数扩0,负数扩1,已知 AL=85H,BX=0345H,求BXAL的和执行CBW;85H是负数,得到 AX=0FF85H ADDAX,BX;0FF85H+0345H=02CAH 得到 AX02CAH,例,2023/7/1,微机原理,32,6,BCD数调整指
15、令 操作数使用隐含寻址,且规定为AL或AX,(1)针对组合BCD数,组合BCD数的加法调整指令,半字节1位BCD相加,超过9或有进位,要加6调整,低半字节调整后有进位,高半字节再调整。表示为:若 AL&0FH9 或 AF=1,则 AL+6AL,1 AF 若 AL&0F0H90H 或 CF=1,则 AL+60HAL,1CF,DAA,2023/7/1,微机原理,33,(1)针对组合BCD数,组合BCD数的减法调整指令,半字节1位BCD相减,有借位,要减6调整。表示为:若 AL&0FH9 或 AF=1,则 AL-6AL,1 AF若 AL9FH 或 CF=1,则 AL-60HAL,1 CF,DAS,2
16、023/7/1,微机原理,34,(1)针对分离BCD数,AAA,分离BCD数的加法调整指令,只取低半字节,其余同组合BCD数。表示为:若 AL AFCF,AL&0FHAL(只取低4位),2023/7/1,微机原理,35,(1)针对分离BCD数,AAS,分离BCD数的减法调整指令,只取低半字节,其余同组合BCD数。表示为:若 AL AFCF,AL&0FHAL(只取低4位),2023/7/1,微机原理,36,(1)针对分离BCD数,AAM,分离BCD数的乘法调整指令,两个BCD数相乘,结果在AL中,除以10后商在AH中,余数在AL中。表示为:AL/0AHAH(商)AL MOD 0AHAL(余),2
17、023/7/1,微机原理,37,(1)针对分离BCD数,AAD,分离BCD的除法调整指令,先将两个BCD码转为一字节二进制(用高位*10+低位),得到被除数放于AL中,并把AH清零,运算后,商-AL,余数-AH表示为:AH*0AH+ALAL,0AH;先调整再做除法,商到AL中,余数到AH中。,2023/7/1,微机原理,38,3.2.3 位操作指令,1、逻辑运算类指令:参与运算的操作数可以是字节或字ANDDST,SRC;DSTSRCDST,清CF、OF;根据结果置SF、ZF和PF,标志AF不定ORDST,SRC;DSTSRCDST,标志位设置同上XORDST,SRC;DST 异或SRC-DST
18、,标志位设置同上TEST DST,SRC;DSTSRC,仅置标志位,标志位设置同上NOTDST;DST中各位取反DST,不影响标志位,2023/7/1,微机原理,39,OR CL,03H;置位CL的D0、D1AND AL,0F5H;清AL的D1、D3XOR AH,0FH;AH的低半字节取反TEST AL,02H;判断AL的D1是否为0,;是,ZF=1,否则,ZF=0XOR AL,TEST_CODE;当AL与TEST_CODE相同时,ZF=1,否则,ZF=0,逻辑运算指令经常用来对寄存器或存储单元的某些位进行置位(1)或者清零(0)的操作。,例:,2023/7/1,微机原理,40,2、移位指令:
19、按位进行从左到右或从右到左的移位。以下 CNT 表示移位的次数。SHR DST,CNT;逻辑右移SHL/SAL DST,CNT;逻辑/算术左移SAR DST,CNT;算术右移,2023/7/1,微机原理,41,3、循环移位指令:RORDST,CNT;循环右移ROLDST,CNT;循环左移RCR DST,CNT;带进位循环右移RCL DST,CNT;带进位循环左移,a,移位指令影响AF外的各状态标志位.b,循环移位指令只影响CF、OFc,CNT可以为立即数1或者寄存器CL(预先设置移位次数):当CNT=1时,OF=0表示移位前后DST的最高位相同,OF=1,表示不同;当CNT1时,OF无意义.,
20、2023/7/1,微机原理,42,(1)串传送:(DS:SI)(ES:DI),隐含寻址,不影响标志位。MOVSW;字传送:SI2SI,DI2DIMOVSB;字节传送:SI1SI,DI1DI(2)串比较:(DS:SI)(ES:DI),隐含寻址,仅影响标志位。CMPSW;字比较:SI2SI,DI2DICMPSB;字节比较:SI1SI,DI1DI(3)串扫描:隐含寻址,仅影响标志位。SCASW;字扫描:AX(ES:DI),DI2DISCASB;字节扫描:AL(ES:DI),DI1DI,3.2.4 串操作指令与重复前缀,2023/7/1,微机原理,43,(4)串取出:隐含寻址,不影响标志位。LODSW
21、;字取出:(DS:SI)AX,SI2SILODSB;字节取出:(DS:SI)AL,SI1SI(5)串存储:隐含寻址,不影响标志位。STOSW;字存储:AX(ES:DI),DI2 DISTOSB;字节存储:AL(ES:DI),DI1 DI,2023/7/1,微机原理,44,6、串操作可以加重复前缀使得其连续执行多次REP MINST;当 CX0 时,重复执行MINST,且CX1CX;MINST是MOVS或STOS指令REPE/REPZ CINST;当 CX0 且 ZF=1 时,重复执行CINST;且CX1 CX,CINST是CMPS或SCASREPNE/REPNZ CINST;当 CX0 且 Z
22、F=0 时,重复执行CINST;且CX1 CX,CINST是CMPS或SCAS,2023/7/1,微机原理,45,串操作类指令可以与重复前缀配合使用,从而操作得以重复执行,并在条件符合时停止执行。,无,LODS,REPE/REPZ REPNE/REPNZ,SCAS,REPE/REPZ REPNE/REPNZ,CMPS,REP,MOVS,可添加的重复前缀,REP,STOS,串操作指令,2023/7/1,微机原理,46,转移类指令可以改变代码段寄存器CS与指令指针IP的值或仅改变IP的值,从而可以以改变指令执行的顺序,以满足程序分支或跳转的需要。,3.2.5 控制转移指令,1.无条件转移、调用和返
23、回指令,(1)无条件转移指令JMP格式:JMP OPRD;OPRD是转移的目的地址功能:转移到目的地址所指示的指令去执行。,2023/7/1,微机原理,47,直接转移,短程转移,近程转移,远程转移,JMP SHORT OPRD;IP=IP+8位位移量,目的地址与JMP指令所处地址的距离在-128127范围之内。,近程转移:JMP NEAR PTR OPRD IP=IP+16位位移量,NEAR可省略,目的地址与JMP指令处于同一地址段范围之内。,JMP FAR PTR OPRD IP=OPRD的段内位移量CS=OPRD所在段地址。,直接转移的3种形式:,2023/7/1,微机原理,48,间接转移
24、指令的目的地址可以由存储器或寄存器给出,有以下2种形式:段内间接转移:JMP WORD PTR OPRD;IP=EA(由OPRD的寻址方式确定)例如:JMP WORD PTRBX;IP=DS16+BXJMP WORD PTR BX;IP=BX 段间间接转移:JMP DWORD PTR OPRD;IP=EA,CS=EA+2该指令指定的双字节地址指针的第一个字单元内容送IP,第二个字单元内容送CS。例如:JMP DWORD PTR BX+SI,2023/7/1,微机原理,49,(2)调用和返回 功能:调用CALL指令用来调用一个过程或子程序。,调用指令格式如下:,段内调用:CALL NEAR PT
25、R OPRD操作:SP=SP-2,(SP+1,SP)=IP,IP=IP+16位位移量 CALL指令首先将当前IP内容压入堆栈。当执行RET指令后,再从堆栈中取出一个字放入IP中。,2023/7/1,微机原理,50,段间调用:CALL FAR PTR OPRD操作:SP=SP-2,(SP+1,SP)=CS;SP=SP-2,(SP+1,SP)=IP;IP=EA;CS=EA+2CALL指令先把CS压入堆栈,再把IP压入堆栈。当执行RET指令而返回时,从堆栈中取出一个字放入IP中,然后从堆栈中再取出第二个字放入CS中,作为段间返回地址。返回指令有如下格式:RET;SP=(SP+1),SP),SP=SP
26、+2RET n;SP=(SP+1),SP),SP=SP+2 SP=SP+nRET n指令要求n为偶数,当RET正常返回后,再做SP=SP+n操作。,2023/7/1,微机原理,51,2.条件转移指令,8086/8088提供了多条不同的条件转移指令,它们根据标志寄存器中各标志位的状态,决定程序是否进行转移。条件转移指令的目的地址必须在现行的代码段(CS)内,并且以当前指针寄存器IP内容为基准,其位移必须在+127-128的范围之内。,2023/7/1,微机原理,52,3.循环控制指令,对于需要重复进行的操作,微机系统可用循环程序结构来进行,8086/8088系统为了简化程序设计,设置了一组循环指令,这组指令主要对CX或标志位ZF进行测试,确定是否循环,指令均不影响任何标志位。,2023/7/1,微机原理,53,3.2.6 标志处理和CPU控制类指令,CF,CF,CF,1.标志处理指令,2023/7/1,微机原理,54,2 外部同步指令,外部同步指令,(1)ESC指令,(2)等待指令WAIT,(3)封锁总线指令LOCK,2023/7/1,微机原理,55,3.4 小 结,本章需要掌握的知识点,常用的8寻址方式,指令中所需的源操作数和目的操作数需采用一定的寻址方式给出,6大类指令,