48086/8088的指令系统_第1页
48086/8088的指令系统_第2页
48086/8088的指令系统_第3页
48086/8088的指令系统_第4页
48086/8088的指令系统_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、主要内容 第四章 80868088的指令系统第四章第四章 808680868088 CPU8088 CPU指令系统指令系统主要内容:指令的操作数、操作码、寻址方式指令的功能、格式、用法等一、寻址方式一、寻址方式指令:指示微处理器完成某项功能的命令。指令系统:指令的全体。指令的一般格式: 计算机中的指令由操作码字段和操作数字段组成。 操作码操作数1,操作数2(,);注释操作码:操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。操作数:操作数:指在指令执行操作的过程中所需要操作的数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有

2、关操作数的信息。源操作数、目的操作数寻址方式寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088 CPU寻址方式 第四章 80868088的指令系统立即寻址寄存器寻址存储器寻址8086/8088 CPU寻址方式 第四章 80868088的指令系统I/O端口寻址1立即寻址(立即寻址(Immediate Addressing) 所提供的操作数直接包含在指令中。 它紧跟在操作码的后面,与操作码一起放在代码段区域中。由于执行指令时不需要占用总线周期,所以指令执行速度最快。例如:MOV AX,3000H MOV 2000H,1AH立即寻址主要用来给寄存器或

3、存储器赋初值,不能用于目的操作数。8086/8088 CPU寻址方式 第四章 80868088的指令系统2寄存器寻址(寄存器寻址(Register Addressing)操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX、SP、BP、SI、DI等。不需要占用总线,执行速度较快。当寄存器是累加器AX时,执行速度会更快。例如:MOV DS,AXMOV AL,BH3、存储器寻址、存储器寻址(Memory Addressing)访问存储单元需要其段基址段基址和段内偏移量段内偏移量(即有效地址EA)。根据有效地址的不同,存储器寻址方式分为直接寻址、寄存器间接寻址8086/8088 CPU寻

4、址方式 第四章 80868088的指令系统立即寻址寄存器寻址存储器寻址直接寻址寄存器间接寻址8086/8088 CPU寻址方式 第四章 80868088的指令系统I/O端口寻址1 1)直接寻址()直接寻址(Direct AddressingDirect Addressing) 操作数地址的操作数地址的1616位偏移量直接包含在指令中。位偏移量直接包含在指令中。 它与操作码一起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。当操作数不在默认的DS中时,要明确指明段寄存器段超越前缀。例如: 设(DS)=3000H MOV AX,DS:2000H;MOV

5、 AX,2000H ;数据段MOV AX,VALUE; VALUE是符号地址MOV BX,ES:3000H ;段超越,操作数在附加段即绝对地址(ES)*163000H8086/8088 CPU寻址方式 第四章 80868088的指令系统2)寄存器间接寻址()寄存器间接寻址(Register Relative Addressing) 操作数是在存储器中,但是,操作数地址的操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下位偏移量包含在以下四个寄存器四个寄存器SI、DI、BP、BX之一中之一中。其中BP、BX称为基址寄存器,称为基址寄存器, SI、DI称为变址寄存器。称为变址寄存器。 可

6、以分成两种情况:以以SI、DI、BX间接寻址间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)*16加上SI、DI、BX中的16位偏移量,为操作数的地址, 例如: MOV AX, SI 操作数地址是:(DS)*16+(SI)以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,BP 操作数地址是:(SS)*16+(BP)8086/8088 CPU寻址方式 第四章 80868088的指令系统立即寻址寄存器寻址存储器寻址直接寻址间接寻址相对基址变址寻址方式基址变址寻址方式 相对基址寻址方式 相对变址寻址方式8

7、086/8088 CPU寻址方式 第四章 80868088的指令系统相对寻址方式I/O端口寻址寄存器间接寻址方式(1)相对基址寻址方式 (Relative Based Addressing) 相对基址寻址方式的操作数的有效地址是基址寄存器中内容和指令中给定的8位或16位偏移量disp之和。对寄存器BX,段寄存器用DS。物理地址 = (DS) * 16 + (BX) + disp如 MOV AX,COUNT BX 或 MOV AX,COUNT+BX ,其中COUNT为16位偏移量的符号地址。若DS=2000H,BX=2000H,COUNT=4000H。物理地址=20000H+2000H+4000

8、H=26000H指令执行结果AX=1234H8086/8088 CPU寻址方式 第四章 80868088的指令系统(2)相对变址寻址方式(Relative Index Addressing) 相对变址寻址的操作数的有效地址是变址寄存器中内容和指令中给定的8位或16位偏移量disp之和。这种寻址方式的段寄存器用DS,即物理地址= (DS) 16 + (SI) + disp物理地址= (DS) 16 + (DI) + disp如MOV AX,COUNT SI 或MOV AX,COUNT+SI若DS=2000H,SI=2000H,COUNT=4000H。物理地址=20000H+2000H+4000H

9、=26000H指令执行结果 AX=1234H8086/8088 CPU寻址方式 第四章 80868088的指令系统(3)基址变址寻址方式 (Based Indexed Addressing) 基址变址寻址的操作数的有效地址是一个基址寄存器与一个变址寄存器的内容之和。若基址寄存器为BX,则段寄存器用DS;若基址寄存器为BP,则段寄存器用SS。物理地址=(DS) 16+(BX)+(SI)(或DI)物理地址=(SS) 16+(BP)+(SI)(或DI)如MOV AX,BX DI 或MOV AX,BX+DI若DS=2000H,BX=2000H,DI=3000H。物理地址=20000H+2000H+30

10、00H=25000H8086/8088 CPU寻址方式 第四章 80868088的指令系统(4)相对基址变址寻址方式(Relative Based Indexed Addressing) 相对基址变址寻址的操作数的有效地址是一个基址寄存器与一个变址寄存器的内容以及8位或16位偏移量disp之和。当其中的基址寄存器为BX时,则段寄存器为DS;而当基址寄存器为BP时,则段寄存器为SS。物理地址= (DS) 16 + (BX) + (SI)(或DI)+ 8位(16位)偏移量disp物理地址= (SS) 16 + (BP) + (SI)(或DI)+ 8位(16位)偏移量disp如MOV AX,BX+S

11、I+COUNT若DS=2000H,BX=3000H,SI=1000H,COUNT=4000H。物理地址=20000H+3000H+1000H+4000H=28000H8086/8088 CPU寻址方式 第四章 80868088的指令系统立即寻址寄存器寻址存储器寻址直接寻址间接寻址相对基址变址寻址方式基址变址寻址方式 相对基址寻址方式 相对变址寻址方式8086/8088 CPU寻址方式 第四章 80868088的指令系统I/O 端口寻址寄存器间接寻址方式8086采用独立编址的I/O端口时,可有64K个字节端口或32K个字端口,用专门的输入指令IN和输出指令OUT访问。直接端口寻址方式适用于访问地

12、址000FFH的端口。例如:IN AL,80H表示由地址为80H的端口读取一个字节数据到AL中。2. 间接端口寻址方式适用于访问地址0000FFFFH的全部端口,在输入/输出指令中,用DX存放16位的端口地址。例如: MOVDX,2000INAL,DX表示由DX确定的2000H端口读取一个字节数据到AL中。8086/8088 CPU寻址方式 第四章 80868088的指令系统I/O端口寻址:独立编址、与存储器统一编址从以上讨论可知:(1)除了立即寻址和寄存器寻址外,其它寻址方式的操作数都来自存储区(除代码段以外的存储区)。通过不同的方式寻找到操作数的地址。(2)只有BX、BP、SI、DI可在方

13、括号 内出现。(3) BX或BP可单独出现在 内,也可以与SI或DI或常数一起出现在 内,不允许BX和BP同时出现在一个 内。(4) SI或DI可单独出现在 内,也可以与BX或BP或常数一起出现在 内,不允许SI或DI同时出现在一个 内。(5)一个 内包括多个内容时,它们只能作加法运算。(6)若 内包含BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用段寄存器DS提供段基址。8086/8088 CPU寻址方式 第四章 80868088的指令系统习题:习题: 指出下列指令的源操作数的寻址方式和存储器操作数的指出下列指令的源操作数的寻址方式和存储器操作数的PA(实际地址)(实际地址) 假设

14、当前CS=1000H,DS=2000H,SS=4000H,BX=3000H,BP=1000H ,SI=0500H,DI=0A00H,TAB=00F0H MOV AL,78H立即寻址MOV AL,BX寄存器间接寻址 PA=2000H*10H+3000H=23000HMOV AX,BP寄存器寻址MOV AL,TABSI相对变址寻址 PA=2000H*16+0500H+0F0H=205F0HMOV AL,BPDI变址基址寻址 PA=4000H*16+1000H+0A00H=41A00HMOV AL,TABBXSI相对基址变址 PA=2000H*10H+3000H+0500H+00F0H=235F0H

15、8086/8088 CPU寻址方式 第四章 80868088的指令系统数据传送指令运算指令逻辑运算算术运算串操作指令控制转移指令处理器控制指令数据传送指令 第四章 80868088的指令系统8086指令中包含133条基本指令,从功能上可以分为以下6类:数据传送指令 第四章 80868088的指令系统指令中出现的这些符号所代表的含义:Flags 标志位 reg R 通用寄存器组src S 源操作数dest D 目的操作数data N 立即数mem M 存储器ADR(src) 源操作数的地址 存储单元的内容OPRD 操作数seg SR 段寄存器(CS、DS、ES、SS)port 端口 Bit 位B

16、yte B 字节Word W 字 通用数据传送指令累加器专用指令输入输出指令换码指令目标地址传送指令标志位传送指令传送指令堆栈操作指令交换指令有效地址传送指令DS传送指令ES传送指令标志位送AH指令AH送FR指令FR入出栈指令数据传送指令 第四章 80868088的指令系统数据传送指令分类 格式:MOV D,S; D S ;B/WRMSRN说明:R包括8个数据寄存器;SR为4个段寄存器;M为存储器,可以是存储器寻址中的任一种;N表示立即数。WW1、代码段寄存器不能做目标操作数。2、立即数只能做源操作数。3、两操作数的位数必须相同。4、两操作数中最多只能有一个是存储器寻址方式。5、不能直接传送的

17、,可以通过寄存器转交。数据传送指令 第四章 80868088的指令系统注意:堆栈:在内存中,开辟一段存储区,该区域是按照“先进后出”的原则来存放数据。10000H . .11FFCH11FFDH11FFEH11FFFH12000HSPSS例:现有一个空的堆栈段,已知(SS)=1000H, (SP)=2000H,则存储器示意图如右。数据传送指令 第四章 80868088的指令系统堆栈操作指令 1.SP总是指向栈顶,在堆栈段的高地址2.SS总是指向栈底,在堆栈段的低地址3.每次操作总是一个字入栈、出栈4.栈操作总是对规则字例:现有一个空的堆栈段,已知(SS)=1000H,(SP)=2000H,则存

18、储器示意图如右。两个关键点:堆栈必须以字为单位操作,即字操作。数据必须以规则字的方式存放。若(AX)=1234H, (BX)=60ABH,则执行PUSH AXPUSH BX10000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS10000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS10000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS10000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS123410000H .12000H11FFFH11FFEH11FFDH11

19、FFCH .SPSS123410000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS1234AB60POP BXPOP AX;(AX)=60ABH10000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS1234AB6010000H .12000H11FFFH11FFEH11FFDH11FFCH .SPSS1234AB60;(BX)=1234H入栈(PUSH)操作:PUSH SRCSPSP-2按“规则字”方式入栈出栈(POP)操作:POP DEST按“规则字”方式出栈SPSP+2数据传送指令 第四章 80868088的指令系统堆栈操

20、作说明:CS不能作为POP的目的操作数;堆栈操作不影响标志位;一般情况下,PUSH与POP成对使用;堆栈操作主要用来保护现场和恢复现场。数据传送指令 第四章 80868088的指令系统交换指令格式:XCHG D, S;D S,B/WD,S:R (不包括SR 、N )、M例:XCHG AL,BL XCHG CX,SP数据传送指令 第四章 80868088的指令系统使用交换指令时,必须注意:1)段寄存器不能作为交换指令的操作数。2)两个操作数中,须有一个寄存器操作数,不能都是存储器操作数。3)立即数不能作为交换指令的操作数。4)交换指令不影响标志位。格式:IN AL, port IN AX, po

21、rt IN AL, DX IN AX, DX格式:OUT port, AL OUT port, AX OUT DX, AL OUT DX, AX例:IN AL,08H数据传送指令 第四章 80868088的指令系统累加器专用指令:输入输出指令 使用输入输出指令时,应注意:1)输入输出指令只能通过累加器AL或AX来传送数据。2)输入输出指令的字或字节传送操作的选用,取决于外设端口的宽度。3)直接寻址的输入输出指令,寻址外设端口的范围为0255; 而间接寻址(通过DX)的输入输出指令,寻址的范围为065535。4)输入输出指令不影响标志位。5)注意MOV AX,DX 与 IN AX,DX中,DX的

22、寻址方式的不同。格式:XLAT ; AL BX+AL 数据传送指令 第四章 80868088的指令系统累加器专用指令:换码指令(查表指令)TABLE41090A19H10H89执行以下程序后,AL的内容是多少?LEA BX,TABLEMOV AX,03HADD BX,AXMOV AL,BXLEA BX,TABLEMOV AL,03HXLAT执行完程序后,AL=9XLAT指令的功能是:执行XLAT的过程为:(BX)+(AL)以DS为段基址,(BX)+(AL)之和为偏移地址得到20位物理地址。1.把该单元内容传送至AL。把一种代码转换为另一种代码 格式:XLAT ; ALBX+AL 例:数字09对

23、应的七段码为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。依次放在内存以TABLE开始的区域,当#05H端口(按键)输入一个数(09)时,要求CPU将其转换为七段码,再从#20H端口(显示)输出。LEA BX,TABLEIN AL,05HXLATOUT 20H,AL数据传送指令 第四章 80868088的指令系统换码指令TABLE247940300A12198900780218TABLE DB 40H,79H,24H30H,19H DB 12H,02H,78H,00H,18H目标地址传送指令:有效地址传送指令格式:LEA R,M;将M的有效地址送到RR :16

24、位通用寄存器例:LEA BX,2000H后,BX=2000H区别于MOV BX,2000H数据传送指令 第四章 80868088的指令系统例:LEA BX,TAB (TAB=2000H)后,BX=2000H区别于MOV BX,TAB数据段寄存器传送指令:LDS,LES格式:LDS R,M LES R,M R:16位,不包括SR;R M, DS(ES) M+2例:LDS SI,(2000H)前:DS=2000H,(22000H)=4000H,(22002H)=3000H后:SI=4000H,DS=3000H数据传送指令 第四章 80868088的指令系统标志位指令1.读取标志指令LAHF格式:L

25、AHF;将FR的低8位送到AHFRAH2.设置标志指令SAHF格式:SAHF;将AH送到FR的低8位FRAH3. 标志位入出栈指令PUSHF,POPF数据传送指令 第四章 80868088的指令系统算术运算指令逻辑运算指令加法指令减法指令乘法指令除法指令BCD码修正指令逻辑指令移位指令运算指令运算指令 第四章 80868088的指令系统加法指令1、不带进位位的加法指令格式:ADD D,S; DD+S ,B/WD:R,M;S:R,M,N,二者不能同时为M。例:ADD AX,BX ADD AL,2000H ADD BX,AL ADD BL,6H注意:指令的执行影响CF、OF、SF、ZF、PF、AF

26、。2、带进位位的加法指令(用于多字节(字)加法)格式:ADC D,S; DD+S+CF ,B/WD:R,M;S:R,M,N ,二者不能同时为M。注意:指令的执行影响CF、OF、SF、ZF、PF、AF。例:ADC AX,BX ADC AL,2000H ADC BX,AL ADC BL,6H例:ADD AL,BL前:AL=2EH,BL=45H后:AL=73H(01110011B)CF=0,AF=1,SF=0,ZF=0PF=0,OF=0运算指令 第四章 80868088的指令系统3、加1指令格式:INC D; DD+1 ,B/WS:R,M注意:指令的执行影响OF、SF、ZF、PF、AF;但不影响CF

27、。例:INC AX INC BYTE PTRBX加法指令运算指令 第四章 80868088的指令系统减法指令1、不带借位位的减法指令格式:SUB D,S; DD-S ,B/WD:R,M;S:R,M,N,二者不能同时为M。注意:指令的执行影响CF、OF、SF、ZF、PF、AF。2、带借位位的减法指令(用于多字节(字)减法)格式:SBB D,S; DD-S-CF ,B/WD:R,M;S:R,M,N ,二者不能同时为M。注意:指令的执行影响CF、OF、SF、ZF、PF、AF。3、减1指令格式:DEC D; DD-1 ,B/WS:R,M注意:指令的执行影响OF、SF、ZF、PF、AF;但不影响CF。例

28、:SBB AX,BX SBB AL,3456H SBB BX,AL SBB BL,6H例:DEC AX DEC BYTE PTRBX例:SUB CX,DX SUB DL,2000H SUB SI,CH SUB AL,6H运算指令 第四章 80868088的指令系统减法指令之二4、求补指令格式:NEG D; DS;CF=1:DS; SF=1, DS 2) OF=1:SF=0,DS总结:OF SF=0, DS; OF SF=1, DS+运算指令 第四章 80868088的指令系统例 4-8 在从Block开始的内存缓冲器中有100个带符号数的字,把其中最大值存放到MAX单元中。 MOVCX,99

29、LEABX,Block MOVAX,BX ADDBX,2AGAIN:CMPAX,BX JGNEXT MOVAX,BXNEXT:ADDBX,2DECCXJNZAGAINMOVMAX,AXHLT乘法指令1、无符号数的乘法指令格式:MUL S;B: AXAL*S , W: DX、AX AX*S S:R,M注意:当乘积的高字(字节)为零时,CF=OF=0,否则CF=OF=1。例:MUL BX IMUL BYTE PTR(3456H) MUL CL IMUL WORD PTR DI AL AX S S AHAL DXAX2、有符号数的乘法指令格式:IMUL S;B: AX AL*S , W: DX、AX

30、 AX*S S:R,M注意:当乘积的高字(字节)为零(或全1)时,CF=OF=0,否则CF=OF=1。运算指令 第四章 80868088的指令系统除法指令1、无符号数的除法指令格式:DIV S;B:AX/S(8位)=AL.AH, W: DX AX/S(16位) =AX.DX例:DIV BX IDIV BYTE PTR(3456H) DIV CL IDIV WORD PTR DI2、有符号数的除法指令格式:IDIV SS:R,M注意:标志位无意义. AL AXS ) AHAL S ) DXAX S*AL S*AX AH DX 例:9876H/2345H MOV AX,9876H CWD MOV

31、SI,2345H IDIV SI3。扩展指令格式:CBW CWD; AX AL ;DX、AX CX,CX不等于0循环CX-1CX,CX0且ZF=1循环CX-1CX,CX0且ZF=0循环CX=0转移中断INT 中断类型nINTOIRET中断, SP-2SP, IP (SP) , SP-2SP,CS(SP) , (4n)CS:IP溢出时中断 SP-2SP,IP(SP) ,SP-2SP,CS(SP) , (10H)CS:IP中断返回程序控制转移指令 第四章 80868088的指令系统例424 计算以ARRAY1和ARRAY2为首地址的两个长度都为100个的字数组对应项之和,并把结果送至首地址为SUM的数据区中,且当两个数组中间对应项的和为0时,停止求和。其程序如下:MOV AX,0MOV SI,0FFFFHMOV CX,64HNOZERO:INC SIINC SIMOV AX,ARRAY1 SIADD AX,ARRAY2 SIMOV SUM SI,AXLOOPNZ NOZEROHLT程序控制转移指令 第四章 80868088的指令系统微处理器控制指令1、若STR是字符串的首地址,指出下列程序

温馨提示

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

评论

0/150

提交评论