NEW03第三章80x86指令系统.ppt

上传人:小飞机 文档编号:6512991 上传时间:2023-11-08 格式:PPT 页数:73 大小:508.50KB
返回 下载 相关 举报
NEW03第三章80x86指令系统.ppt_第1页
第1页 / 共73页
NEW03第三章80x86指令系统.ppt_第2页
第2页 / 共73页
NEW03第三章80x86指令系统.ppt_第3页
第3页 / 共73页
NEW03第三章80x86指令系统.ppt_第4页
第4页 / 共73页
NEW03第三章80x86指令系统.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《NEW03第三章80x86指令系统.ppt》由会员分享,可在线阅读,更多相关《NEW03第三章80x86指令系统.ppt(73页珍藏版)》请在三一办公上搜索。

1、第3章 8086/8088指令系统,3.1 8086/8088指令格式与寻址方式3.2 数据传送类指令3.3 算数运算类指令3.4 逻辑运算与移位指令3.5 串操作类指令3.6 控制转移类指令3.7 标志处理和处理器控制类指令,3.1 8086/8088指令格式与寻址方式,机器指令,操作码,地址码,操作数或操作数的地址,表示该指令所要完成的操作,都是二进制代码,3.1.1 指令的基本格式,汇编语言:符号化了的机器语言,用助记符代替机 器语言的二进制代码。,2.8086/8088汇编语言指令,例:MOV AL,80H,3.1.2 指令的寻址方式,指令的寻址方式,顺序寻址方式,跳转寻址方式,3.1

2、.3 8086/8088操作数的寻址方式,立即数可以是8位、16位 立即数只能是整数,不能是小数、变量或其它类型的数据立即数只能作为源操作数,2.寄存器寻址,操作数在8位、16位(或32位)通用寄存器中,寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP AH、AL、BH、BL、CH、CL、DH、DL,在一条指令中,可以对源操作数采用寄存器寻址,也可以对目标操作数采用寄存器寻址,还可以两者都采用寄存器寻址方式,386以上,3.存储器寻址,存储器寻址,直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址,操作数的逻辑地址包含在指令中,(1)直接寻址,假设DS=5000H,地址

3、为51070H字存储单元的内容是6789H。,注意:立即数寻址和直接寻址的书写格式,直接寻址的地址要放在方括号中,例:MOV AX,VALUE 或 MOV AX,VALUE,符号地址,(2)寄存器间接寻址,操作数在存储器中,操作数的逻辑地址由寄存器提供寄存器的内容是段内的偏移地址。,BX、BP、SI、DI 之一,注:如果没有特殊说明,用寄存器SI、DI和BX间接寻址时,对应的段寄存器是DS。如果用寄存器BP间接寻址时,对应的段寄存器是SS。,再假设51234H字单元的内容是6789H,执行该条指令后(AX)=6789H,例2:MOV BP,CX 假设(SS)=4000H,(BP)=1234H,

4、(CX)=6789H,则:目的操作数的物理地址为41234H(SS)16+(BP)=41234H,执行该条指令后(41234)=89H,(41235)=67H,8位位移量16位位移量,(3)寄存器相对寻址,带位移量的寄存器间接寻址,逻辑地址=,BXBPSI DI,+,再假设548ACH字存储单元的内容是55AAH那么,执行该指令后,(AX)=55AAH,BX、BP和SI、DI寄存器组合起来进行间接寻址,有效地址EA(逻辑地址),BXBP,+,SIDI,一个基址寄存器的内容加上一个变址寄存器的内容。,=,(4)基址变址寻址,例:MOV AX,BX+SI,假设(DS)=1000H,(BX)=500

5、0H,(SI)=2000H则:有效地址为:7000H(BX)+(SI)物理地址为:17000H(DS)*16+有效地址,语句执行后(17000H)和(17001H)AX,(5)相对基址变址寻址,MOV AX,MASKBXSI MOV BH,4DIBPMOV BH,BP+DI+4,例:,基址变址寻址加上一个相对位移量,综合练习,假设:BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H 指令没有使用前缀。,直接寻址:有效地址=物理地址=,1B57H21000H+1B57H=22B57H,寄存器间接寻址(寄存器为BX):有效地址=物理地址=,0158H21000H+0158H=

6、21158H,BX寄存器相对间接寻址:有效地址=物理地址=,0158H+1B57H=1CAFH21000H+1CAFH=22CAFH,综合练习,假设:BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H 指令没有使用前缀。,10A5H21000H+10A5H=220A5H,10A5H+1B57H=2BFCH21000H+2BFCH=23BFCH,0158H+10A5H=11FDH21000H+11FDH=221FDH,相对基址加变址的寻址(BX为基址寄存器,DI为变址寄存器),0158H+10A5H+1B57H=2D54H21000H+2D54H=23D54H,综合练习,有

7、效地址=物理地址=,假设:BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H 指令没有使用前缀。,3.2 数据传送类指令,3.2.1 通用数据传送指令,格式:MOV OPRD1,OPRD2,目的,源,功能:把一个字节或一个字从源操作数PORD2送至 目的操作数OPRD1,源操作数不改变。,注意:1、源和目的操作数的类型要一致,即同时为字节或同时为字2、不允许对IP,CS进行操作3、两个存储器操作数之间不允许直接进行信息传输4、两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋值5、目的操作数不能为立即寻址方式,例:,MOV AX,1000H,MOV AL

8、,E,MOV AX,2BPSI,;立即数送到AX,;立即数送到AL,E的ASCII码,如果BP换成BX?,判断对错,MOV 5,ALMOV BX,SIMOV DS,1000HMOV CS,AXMOV AX,DXMOV SI,SIMOV SI,AX,3.2.2 交换传送指令(XCHG),格式:XCHG OPRD1,OPRD2功能:操作数OPRD1的内容与操作数OPRD2的内容交换,例:XCHG AL,AH XCHG SI,BX XCHG AL,SI+3 XCHG DI+BX+3,DX,注意:1、两个存储器操作数不能互相交换2、段寄存器和立即数都不能作为操作数,假设:SS=5000H,SP=200

9、0H,00000H,52000H,FFFFFH,格式:PUSH OPRD,功能:SP-2,把源操作数 OPRD 的16位数 据压入堆栈,SP自动减2 将AX的内容传送到 SP指向的单元,1.入栈指令PUSH,50000H,3.2.3 堆栈指令,格式:POP OPRD功能:从堆栈中弹出 16位数据到目 的操作数OPRD,SP自动加2,2.出栈指令POP,可以是通用寄存器、段寄存器(CS除外)和字存储单元,执行指令 POP BX,3.2.4 有效地址传送指令,格式:LEA REG,OPRD,16位的通用寄存器,功能:把操作数的有效地址传送到操作数REG寄存器,例:LEA AX,2728H;执行后,

10、AX=2728H LEA BX,BP+SI;指令执行后,BX的内容为 BP+SI的值,注意:LEA 和 MOV 的区别,3.2.5 换码指令XLAT,格式:XLAT功能:完成一个字节的查表转换。把累加器AL中的值,转换成以BX为表基址的表中值,七段数码管,判断对错:,PUSH ALPOP CSXCHG DS,BXXCHG BX,SIPOP BHXCHG AX,1234H,3.2.6 标志寄存器传送指令,1.读取标志指令LAHF(Load AH with Flags),格式:LAHF功能:把标志寄存器的低8位对应的传送到寄存器AH,AH,MOV AH,0C1H,例:,AH,SF ZF AF PF

11、 CF,SAHF,FR的低8位,3.2.6 标志寄存器传送指令,3.2.7 输入/输出数据传送指令,1.输入指令 IN,格式:IN 累加器,端口地址功能:从一个端口读取一个字节或一个字,传送到AL或AX,端口地址可以直接给出或由DX寄存器间接给出,例:IN AL,50H;将50H端口的字节读入AL IN AX,70H;将70H、71H两端口的值读入AX IN AL,DX;从DX所指的端口中读取一个字节 IN AX,DX;从DX和DX+1所指的两个端口读取一个字,注意:外部设备最多可有65536个I/O端口(0000FFFFH),只有前256个端口可在指令中直接给出(00FFH),2.输出指令O

12、UT,格式:OUT 端口地址,累加器功能:将AL中的一个字节或AX中的一个字输出到指定端口,例:OUT 70H,AL OUT DX,AL,传送类指令不影响标志位,判断对错:,OUT 258,ALOUT DX,BLIN AL,1234HIN AL,BHOUT 120,ALOUT DX,ALIN AL,80HIN AL,DX,3.3 算术运算类指令,3.3.1 加法指令,1.加法指令ADD,格式:ADD OPRD1,OPRD2功能:两个操作数相加,结果送至目的操作数OPRD1,例:ADD AL,50H;AL的内容和50H相加,结果AL中 ADD CX,1000H;CX的内容和1000H相加,结果放

13、在CX中 ADD DI,SI;DI和SI的内容相加,结果放在DI中 ADD BX+DI,AX;BX+DI和BX+DI+1两个存储单元和AX 相加,结果放在BX+DI和BX+DI+1所 指的存储单元中 ADD AX,BX+2000H;BX+2000H和BX+2001H所指的两个单元 的内容和AX的内容相加,结果在AX中,注意:两个操作数不能同时为存储器寻址方式,2.带进位加法指令ADC,格式:ADC OPRD1,OPRD2功能:两个操作数相加再加上进位标志CF,结果送至目 的操作数OPRD1,MOV SI,2000H;第一个数的首址MOV DI,3000H;第二个数的首址MOV AX,SI;第一

14、个数的低16位取到AX ADD AX,DI;两个数的低16位相加MOV SI,AX;低16位相加的结果送到2000H字单元MOV AX,SI+2;取第一个数的高16位到AX中ADC AX,DI+2;两个高16位数相加,再加CFMOV SI+2,AX;高16位的结果送到2002H和2003H单元,例:将两个四字节的无符号数相加,两个数分别放在2000H、3000H开始的单元,要求结果放在2000H开始的单元,MOV DI,2000HMOV SI,3000HMOV AX,SI ADD DI,AX MOV AX,SI+2ADC DI+2,AX,MOV DI,2000HMOV SI,3000HMOV

15、AX,SIADD DI,AX ADD SI,2 ADD DI,2 MOV AX,SIADC DI,AX,3.增量指令 INC,格式:INC OPRD功能:操作数OPRD的内容加1,结果送回OPRD,该指令结果不影响进位标志CF,影响其它的五个状态标志,例:INC AL;AL的内容加1 INC CX;CX的内容加1 INC BX;存储单元的内容加1,通用寄存器、存储器,3.3.2 减法指令,1.减法指令SUB,格式:SUB OPRD1,OPRD2功能:目的操作数减去源操作数,结果送到目的标操作 数,源操作数不变,执行结果影响标志寄存器,3.减量指令DEC,格式:DEC OPRD功能:操作数OPR

16、D的内容减1,并把结果送回OPRD,执行结果不影响CF,但影响其它五个状态标志,5.比较指令CMP,格式:CMP OPRD1,OPRD2功能:操作数OPRD1减去OPRD2,运算结果不送 到OPRD1但影响状态标志,注意:两个操作数本身都没有发生变化,3.3.3 乘法和除法指令,格式:MUL OPRD功能:字节:AX=AL*OPRD字:DX AX=AX*OPRD,有符号数乘法指令,乘法指令MUL和IMUL,例:假设(AL)=0B4H,(BL)=11H求执行MUL BL的乘积值 求执行IMUL BL 的乘积值,无符号数:(AL)=0B4H=190D(BL)=11H=17D,190D 17D,30

17、60D,3060D=0BF4H,执行 MUL BL 后(AX)=0BF4HAH0 CF=OF=1,0B4H=10110100B取补码=4CH=-76D,-1292D=-10100001100B=FAF4H(补码),除法指令DIV(IDIV),格式:DIV OPRD功能:字节:AX OPRD=AL AH字:DX AX OPRD=AX DX,除法指令对标志位的影响无定义,注意:如果除数为0,或者8位数除时商超过8位,或者 16位除时商超过16位,则认为是溢出,引起0号中断,有符号数除法指令,5.符号扩展指令,字节扩展指令CBW,格式:CBW功能:寄存器AL中的符号扩展到寄存器AH。若AL 的最高有

18、效位为0,则AH=0,否则AH=0FFH,字扩展指令CWD,格式:CWD功能:寄存器AX中的符号扩展到寄存器DX。若AX 的最高有效位为0,则DX=0,否则DX=0FFFFH,例:计算表达式的值:(X*Y+Z1024)/75,假设其中的X、Y、Z均为16位带符号数,分别放在名为XXX、YYY、ZZZ的变量单元中。,3.4 逻辑运算和位移指令,1.逻辑“与”指令AND,格式:AND OPRD1,OPRD2功能:两个操作数进行按位的逻辑“与”运算,结果送到 目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF,3.4.1 逻辑运算指令,2.逻辑“或”指令OR,格式:OR OPRD1,

19、OPRD2功能:两个操作数进行按位的逻辑“或”运算,结果送到 目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF,4.逻辑“异或”指令XOR,格式:XOR OPRD1,OPRD2功能:两个操作数进行按位的逻辑“异或”运算,结果送到 目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF,通常用于检测某位是否为1,但又不改变原来值的场合,1、检查AL中的D6位或D2位是否有一位为1,例:,2、要求屏蔽AL寄存器中的第6位和第4位,AND AL,0AFH 10101111B,3、要求AL寄存器中的第0位和第1位变反,XOR AL,03H 00000011B,3.4.2

20、移位指令,1.算数逻辑移位指令,格式:SAL OPRD,m;算术左移指令 SHL OPRD,m;逻辑左移指令 SAR OPRD,m;算术右移指令 SHR OPRD,m;逻辑右移指令,功能:操作数左或右移m位,Shift Arithmetic Left,SHift logic Right,m为1或为CL当要移多位时,移位位数需存放在CL寄存器中。,2.循环移位指令,ROL OPRD,m;循环左移指令ROR OPRD,m;循环右移指令RCL OPRD,m;带进位循环左移指令RCR OPRD,m;带进位循环右移指令,格式:,功能:操作数左或右循环移m位,m是 移位位数,为1或为CL,当要 移多位时,

21、移位位数需存放在 CL寄存器中。,只影响标志CF和OF,Rotate Right(lift),例:不用乘法指令,用移位指令编程实现 AL寄 存器的内容乘以10(假设结果仍然是8位),SAL AL,1;AL中的数左移1位(2)MOV BL,ALMOV CL,2SAL AL,CL;AL中的数再左移2位(8)ADD AL,BL;AL中的数10,3.5 串操作类指令,字符串:字符的一个序列,字符串操作的几点说明:,由变址寄存器SI指向源操作数(串)由变址寄存器DI指向目的操作数(串)规定源串放在当前数据段中,目的串放在当前附加段中,即:DS:SI 指向源串 ES:DI 指向目的串,3.5.1 重复前缀

22、,1.重复前缀REP,格式:REP 串操作指令,功能:重复后面的串操作指令,(CX)次,REP 后面一般跟MOVS或STOS,即:CX0 并且 ZF=1时,重复串操作指令,3.5.1 重复前缀,3.重复前缀REPNZ/REPNE,格式:REPNZ 串操作指令 或 REPNE 串操作指令,功能:重复后面的串操作指令,每重复一次CX1,重复一 直进行到CX为0 或串操作指令使零标志ZF为1 止,即:CX0 并且 ZF=0时,重复串操作指令,3.5.2 字符串指令,格式:MOVSB 或 MOVSW,功能:MOVSB(DS:SI)(ES:DI),然后根据方向标志DF 确定SI、DI 增 1 还是减 1

23、,若DF=1,SI、DI自动减1,若DF=0,SI、DI自动加1。,在执行MOVS前,必须确定方向,即DF置位或复位,MOVSW(DS:SI)(ES:DI),然后根据方向标志DF 确定SI、DI增 2 还是减 2,若DF=1,SI、DI自动减2,若DF=0,SI、DI自动加2。,1.字符串传送指令MOVS,2.字符串存指令 STOS,格式:STOSB 或 STOSW,功能:把累加器的值存到内存中,如果使用了重复前缀 REP,即对某个区域填充累加器的内容。,STOSB(字节存)AL(ES:DI)并根据DF执行DI=DI1,注意:字符串存指令不影响标志,STOSW(字存)AX(ES:DI)并根据D

24、F执行DI=DI1,3.字符串取指令LODS,格式:LODSB 或LODSW,功能:把内存中的值取到累加器,LODSB(取字节)(DS:SI)AL 并根据DF 执行DI=DI1,注意:字符串取指令不影响标志,LODSW(取字)(DS:SI)AX 并根据DF 执行DI=DI2,4.字符串扫描指令 SCAS,格式:SCASB 或SCASW,SCASB(字符串字节扫描)AL(ES:DI)影响有关标志位,并根据DF 执行 DI=DI1 DF=0时 DI=DI+1DF=1时 DI=DI-1,功能:,SCASW(字符串字扫描)AX(ES:DI)并根据DF 执行 DI=DI2,5.字符串比较指令CMPS,格

25、式:CMPSB 或CMPSW,CMPSB(字符串字节比较)(DS:SI)(ES:DI)影响有关标志位,并根据DF 执行 DI=DI1,功能:,CMPSW(字符串字比较)(DS:SI)(ES:DI)影响有关标志位,并根据DF 执行 DI=DI2,用串传送指令把1000H单元的3个字节的数据传送到2000H单元,CLDMOV SI,1000HMOV DI,2000HMOVSBMOVSB MOVSB HLT,CLDMOV SI,1000HMOV DI,2000HMOV CX,03HREP MOVSBHLT,例1:,3.5.3 字符串指令举例,要求把当前数据段中偏移1000H开始的100个字节的数据传

26、送到2000H开始的单元中。,CLD PUSH DS POP ES;ES等于DSMOV SI,1000H;置源串指针初值MOV DI,2000H;置目的串指针初值MOV CX,100;重复次数REP MOVSB;每次传送一字节数据,例2:,在某字符串中查找是否存在“”字符(该字符串的首地址为1000H,长度为32个字节),如果存在把所在地址送入BX寄存器中,否则BX寄存器清0。,结果不为“0”,没找到,否则,找到了,地址为DI-1。,例3:,CLD;清方向标志DF LEA DI,1000H MOV CX,20H;传送32个数据 XOR AX,AX REP STOSW;将32个字清零 HLT,将

27、当前段1000H开始的64个单元清零,重复CX次,例4:,3.6 控制转移类指令,3.6.1 无条件转移指令,程序的寻址,代码段寄存器CS,程序指针寄存器 IP,直接转移:转移的地址信息直接出现在指令中间接转移:转移的目标地址信息间接存储于 某寄存器或某一内存单元,相对转移:以当前的IP值增加或减少某一个值绝对转移:以一个新的值完全代替当前的IP值,JMP SHORT L1JMP NEAR PTR L2JMP WORD PTR BXJMP WORD PTR BXJMP FAR L2JMP DWORD PTR BX,段内直接短转移,段内直接近转移,段内间接近转移,段间直接远转移,段间间接远转移,

28、3.6.2 调用和返回指令,1.段内直接调用与返回,格式:CALL 过程名,功能:调用当前段内的子程序操作:SPSP2,SPIP,IPIP+disp,子程序入口地址与当前地址的差值,格式:RET 操作:IP SP,SP SP+2,2.段内间接调用与返回,格式:CALL OPRD操作:SPSP2,SPIP,IP(OPRD)格式:RET 操作:IP SP,SP SP+2,16位通用寄存器或字存储器,3.段间直接调用与返回,格式:CALL 过程名,功能:调用其它代码段中的子程序操作:SPSP-2,SPCS,SPSP-2,SPIP IP过程入口地址的偏移量 CS过程入口地址的段值,远过程,格式:RET

29、 操作:IP SP,SP SP+2,CSSP,SPSP+2,4.段间间接调用与返回,格式:CALL OPRD操作:SPSP-2,SPCS,SPSP-2,SPIP IP(OPRD低),CS(OPRD高)格式:RET 操作:IP SP,SP SP+2,CSSP,SPSP+2,双字存储器操作数,3.6.3 条件转移指令,条件转移不影响标志,3.6.4 循环控制指令,1.计数循环指令LOOP,格式:LOOP 标号功能:寄存器CX的值减1,如果结果不等于0,则循环 至标号,否则顺序执行。,DEC CXJNZ 标号,3.不等于/结果不为0循环指令LOOPNE/LOOPNZ,格式:LOOPNE 标号 或 LOOPNZ 标号功能:寄存器CX的值减1,且判断只有在CX0,而且 标志ZF=0的条件下,才循环至标号,否则顺序执行。,3.7 标志处理和处理器控制类指令,1.对标志位操作指令,2.处理器控制类指令,(1)同步命令,(2)处理器暂停指令HLT,HLT;CPU进入暂停状态(在暂停状态不进行任何操作),1.在RESET线上有复位信号 2.在NMI线上有请求 3.在中断允许情况下,在INTR线上有请求,脱离暂停的条件,所以,HLT指令常在程序中为了等待中断而使用。,(3)空操作指令NOP,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号