微机原理课件 8086/8088的指令系统_第1页
微机原理课件 8086/8088的指令系统_第2页
微机原理课件 8086/8088的指令系统_第3页
微机原理课件 8086/8088的指令系统_第4页
微机原理课件 8086/8088的指令系统_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、主要内容 第四章 80868088的指令系统,第四章 80868088 CPU指令系统,主要内容: 指令的操作数、操作码、寻址方式 指令的功能、格式、用法等,8086/8088 CPU寻址方式 第四章 80868088的指令系统,一、寻址方式 指令的一般格式: 计算机中的指令由操作码字段和操作数字段组成。,操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。,操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。,寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻

2、找操作数有效地址的方法。,8086/8088 CPU寻址方式 第四章 80868088的指令系统,立即寻址,寄存器寻址,存储器寻址,8086/8088 CPU寻址方式 第四章 80868088的指令系统,1立即寻址(Immediate Addressing) 所提供的操作数直接包含在指令中。 它紧跟在操作码的后面,与操作码一起放在代码段区域中。 例如:MOV AX,3000H MOV 2000H,1AH,立即寻址主要用来给寄存器或存储器赋初值。,8086/8088 CPU寻址方式 第四章 80868088的指令系统,2寄存器寻址(Register Addressing) 操作数包含在CPU的内

3、部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH,3、存储器寻址(Memory Addressing),访问存储单元需要其段基址和段内偏移量(即有效地址EA)。 根据有效地址的不同,存储器寻址方式分为直接寻址、寄存器间接寻址,8086/8088 CPU寻址方式 第四章 80868088的指令系统,立即寻址,寄存器寻址,存储器寻址,8086/8088 CPU寻址方式 第四章 80868088的指令系统,1)直接寻址(Direct Addressing) 操作数地址的16位偏移量直接包含在指令中。 它与操作码一起存放在代码段区域,操作数一般在数据段区域中

4、,它的地址为数据段寄存器DS加上这16位地址偏移量。,例如: MOV AX,DS:2000H;MOV AX,2000H ;数据段,MOV AX,VALUE; VALUE是符号地址 MOV BX,ES:3000H ;段超越,操作数在附加段 即绝对地址(ES)*163000H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,2)寄存器间接寻址(Register Relative Addressing) 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。 可以分成两种情况:,以SI、DI、BX间接寻址,则通常操作数在现行数据段

5、区域中,即数据段寄存器(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的指令系统,立即寻址,寄存器寻址,存储器寻址,直接寻址,寄存器间接寻址,8086/8088 CPU寻址方式 第四章 80868088的指令系统,(1)相对基址寻址方式 (Relative Based A

6、ddressing) 相对基址寻址方式的操作数的有效地址是基址寄存器中内容和指令中给定的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+4000H=26000H 指令执行结果AX=1234H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,(1)相对基址寻址方式 (Relati

7、ve Based Addressing) 相对基址寻址方式的操作数的有效地址是基址寄存器中内容和指令中给定的8位或16位偏移量disp之和。,对寄存器BP,段寄存器用SS。 物理地址 =(SS) 16+(BP)+ disp 如MOV AX,COUNT BP 或MOV AX,COUNT+BP 若SS=3000H,BP=2000H,COUNT=4000H, 物理地址=30000H+2000H+4000H=36000H 指令执行结果AX=5678H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,(2)相对变址寻址方式(Relative Index Addressing) 相

8、对变址寻址的操作数的有效地址是变址寄存器中内容和指令中给定的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=26000H 指令执行结果 AX=1234H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,(3)基址变址寻址方式 (Based Indexed Addr

9、essing) 基址变址寻址的操作数的有效地址是一个基址寄存器与一个变址寄存器的内容之和。 若基址寄存器为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+3000H=25000H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,(4)相对基址变址寻址方式(Relative Based Index

10、ed 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+SI+COUNT 若DS=2000H,BX=3000H,SI=1000H,COUNT=4000H。 物理地址=20000H+3000H+1000H+4

11、000H=28000H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,立即寻址,寄存器寻址,存储器寻址,直接寻址,寄存器间接寻址,8086/8088 CPU寻址方式 第四章 80868088的指令系统,I/O 端口寻址,8086采用独立编址的I/O端口时,可有64K个字节端口或32K个字端口,用专门的输入指令IN和输出指令OUT访问。 直接端口寻址方式 适用于访问地址00FFH的端口。 例如:IN AL,80H 表示由地址为80H的端口读取一个字节数据到AL中。 2. 间接端口寻址方式 适用于访问地址0000FFFFH的全部端口,在输入/输出指令中,用DX存放16位的

12、端口地址。 例如:MOVDX,2000 INAL,DX 表示由DX确定的2000H端口读取一个字节数据到AL中。,8086/8088 CPU寻址方式 第四章 80868088的指令系统,I/O端口寻址,从以上讨论可知: (1)除了立即寻址和寄存器寻址外,其它寻址方式的操作数都来自存储区(除代码段以外的存储区)。通过不同的方式寻找到操作数的地址。 (2)只有BX、BP、SI、DI可在方括号 内出现。 (3) BX或BP可单独出现在 内,也可以与SI或DI或常数一起出现在 内,不允许BX和BP同时出现在一个 内。 (4) SI或DI可单独出现在 内,也可以与BX或BP或常数一起出现在 内,不允许S

13、I或DI同时出现在一个 内。 (5)一个 内包括多个内容时,它们只能作加法运算。 (6)若 内包含BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用段寄存器DS提供段基址。,8086/8088 CPU寻址方式 第四章 80868088的指令系统,习题: 指出下列指令的源操作数的寻址方式和存储器操作数的PA(实际地址) 假设当前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=23000

14、H MOV AX,BP 寄存器寻址 MOV AL,TABSI 相对变址寻址 PA=2000H*16+0500H+0F0H=205F0H MOV AL,BPDI 变址基址寻址 PA=4000H*16+1000H+0A00H=41A00H MOV AL,TABBXSI 相对基址变址 PA=2000H*10H+3000H+0500H+00F0H=235F0H,8086/8088 CPU寻址方式 第四章 80868088的指令系统,数据传送指令,运算指令,逻辑运算,算术运算,串操作指令,控制转移指令,处理器控制指令,数据传送指令 第四章 80868088的指令系统,8086指令中包含133条基本指令,

15、从功能上可以分为以下6类:,数据传送指令 第四章 80868088的指令系统,指令中出现的这些符号所代表的含义: Flags 标志位 reg R 通用寄存器组 src S 源操作数 dest D 目的操作数 data N 立即数 mem M 存储器 ADR(src) 源操作数的地址 存储单元的内容 OPRD 操作数 seg SR 段寄存器(CS、DS、ES、SS) port 端口 Bit 位 Byte B 字节 Word W 字,通用数据传送指令,累加器专用指令,输入输出指令 换码指令,目标地址传送指令,标志位传送指令,传送指令 堆栈操作指令 交换指令,有效地址传送指令 DS传送指令 ES传送

16、指令,标志位送AH指令 AH送FR指令 FR入出栈指令,数据传送指令分类,4.3 数据传送指令 第四章 80868088的指令系统,格式:MOV D,S,;SD, ;B/W,其中R包括8个数据寄存器;SR为4个段寄存器;M为存储器,可以是存储器寻址中的任一种。,2。立即数只能做源操作数。 3。两操作数的位数必须相同。 4。两操作数中最多只能有一个是存储器寻址方式。,4.3 数据传送指令 第四章 80868088的指令系统,交换指令,格式:XCHG D,S,;DS,B/W,D,S:R (不包括SR)、M,例:XCHG AL,BL XCHG CX,SP,使用交换指令时,必须注意: 1)段寄存器不能

17、作为交换指令的操作数。 2)两个操作数中,必须有一个是寄存器操作数,而不允许两个都是存储器操作数。 3)立即数不能作为交换指令的操作数。 4)交换指令不影响标志位。,4.3 数据传送指令 第四章 80868088的指令系统,格式:IN AL,n IN AX,n IN AL,DX IN AX,DX,格式:OUT n , AL OUT n , AX OUT DX,AL OUT DX,AX,例:IN AL,08H,输入输出指令,使用输入输出指令时,应注意: 1)输入输出指令只能通过累加器AL或AX来传送数据。 2)输入输出指令的字或字节传送操作的选用,取决于外设端口的宽度。 3)直接寻址的输入输出指

18、令,寻址外设端口的范围为0255; 而间接寻址(DX)的输入输出指令,寻址的范围为065535。 4)输入输出指令不影响标志位。,4.3 数据传送指令 第四章 80868088的指令系统,堆栈操作指令 PUSH POP 有效地址传送指令 LEA 换码指令 XLAT DS传送指令 LDS ES传送指令 LES,传送指令 MOV D,S 交换指令 XCHG D, S 输入输出指令 IN AL/AX,PORT OUT PORT ,AL/AX,4.3 数据传送指令 第四章 80868088的指令系统,第四章 80868088 CPU指令系统,回顾:,本节主要内容:,4.3 数据传送指令,堆栈:在内存中

19、,开辟一段存储区,该区域是按照“先进后出”的原则来存放数据。,SP,SS,例:现有一个空的堆栈段,已知(SS)=1000H, (SP)=2000H,则存储器示意图如右。,堆栈操作指令,设置堆栈目的: 保存断点和保存当前寄存器的内容,4.3 数据传送指令 第四章 80868088的指令系统,例:现有一个空堆栈段,已知(SS)=1000H, (SP)=2000H,则存储器示意图如右。,两个关键点: 堆栈必须以字为单位操作,即字操作。 数据必须以规则字的方式存放。,若(AX)=1234H, (BX)=60ABH,则执行 PUSH AX PUSH BX ,POP BX POP AX,;(BX)=60A

20、BH,;(AX)=1234H,入栈(PUSH)操作 SP-2SP 按“规则字”方式入栈,出栈(POP)操作 按“规则字”方式出栈 SP+2SP,;(SP)=1FFCH,4.3 数据传送指令 第四章 80868088的指令系统,DATA_SEGSEGMENT XDW10 YDW0 DATA_SEGENDS STACK_SEG SEGMENT STACK STACK DW 2000H DUP (?) TOP LABEL WORD STACK_SEG ENDS CODE_SEGSEGMENT ASSUMECS:CODE_SEG,DS:DATA_SEG MAINPROCFAR START:MOVAX,

21、STACK_SEG ;建立堆栈段指针 MOVSS,AX LEASP, TOP PUSHDS SUBAX,AX PUSHAX MOVAX,DATA_SEG MOVDS,AX 。 RET MAINENDP CODE_SEGENDS ENDSTART,数据段,堆栈段,代码段,通过一个汇编语言程序,看堆栈段的是怎么建立?,SP,SS,4.3 数据传送指令 第四章 80868088的指令系统,有效地址传送指令,格式:LEA D,S,;将S的有效地址送到D,S:M D:R(16位),例:LEA BX,2000H 执行后,BX=2000H 区别于MOV BX,2000H,例:LEA BX,TAB (TAB=

22、2000H) 执行后,BX=2000H 区别于MOV BX,TAB,4.3 数据传送指令 第四章 80868088的指令系统,格式:XLAT,;BX+ALAL,换码指令,执行以下程序后, AL的内容是多少? LEA BX,TABLE MOV AX,03H ADD BX,AX MOV AL,BX,LEA BX,TABLE MOV AL,03H XLAT,执行完程序后,AL=9,XLAT指令的功能是:,执行XLAT的过程为: (BX)+(AL) 取(BX)+(AL)所指向的单元内容传送至AL。,把一种代码转换为另一种代码,4.3 数据传送指令 第四章 80868088的指令系统,格式:XLAT,;

23、BX+ALAL,例:数字09对应的七段码为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。依次放在内存以TABLE开始的区域,当#05H端口(按键)输入一个数(09)时,要求CPU将其转换为七段码,再从#20H端口(显示)输出。,LEA BX,TABLE IN AL,05H XLAT OUT 20H,AL,换码指令,TABLE DB 40H,79H,24H30H,19H DB 12H,02H,78H,00H,18H,4.3 数据传送指令 第四章 80868088的指令系统,LDS,LES,格式:LDS D,S LES D,S,S:M,D:R(16位,不包括SR)

24、,;(S)D,(S+2)DS(ES),例:LDS SI,(2000H) 前:DS=2000H,(22000H)=4000H,(22002H)=3000H,后:SI=4000H,DS=3000H,4.3 数据传送指令 第四章 80868088的指令系统,标志位指令,1.读取标志指令LAHF,格式:LAHF,;将FR的低8位送到AH,FR,AH,3. 标志位入出栈指令PUSHF,POPF,4.3 数据传送指令 第四章 80868088的指令系统,算术运算指令,逻辑运算指令,加法指令 减法指令 乘法指令 除法指令 BCD码修正指令,逻辑指令 移位指令,运算指令,运算指令 第四章 80868088的指

25、令系统,加法指令,1。不带进位位的加法指令,格式:ADD D,S,;D+SD,B/W,D: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。,例: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=0 PF=0,OF=0,运算指令 第四章 80868088的指令系统,例:INC AX INC

26、BYTE PTRBX,加法指令,运算指令 第四章 80868088的指令系统,减法指令,1。不带借位位的减法指令,格式:SUB D,S,;D-SD,B/W,D:R,M;S:R,M,n,二者不能同时为M。,注意:指令的执行影响CF、OF、SF、ZF、PF、AF。,例: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,;0-DD,B/W

27、,D:R,M,注意:指令的执行影响OF、SF、ZF、PF、AF、CF。,注意:1。差不送到D; 2。指令的执行影响CF、OF、SF、ZF、PF、AF; 3。D,S的大小判断方法与D,S是否是有无符号数有关。,例: NEG WORD PTR BX 例: NEG AL 前:AL=10001011B 后:AL=01110101B CF=AF=1,SF=ZF=PF=OF=0,例: ADD AL,0 JNS L1 NEG AL OR AL,80H L1:,运算指令 第四章 80868088的指令系统,运算指令 第四章 80868088的指令系统,例 4-8 在从Block开始的内存缓冲器中有100个带符

28、号数的字,把其中最大值存放到MAX单元中。 MOVCX,99 LEABX,Block MOVAX,BX ADDBX,2 AGAIN:CMPAX,BX JGNEXT MOVAX,BX NEXT:ADDBX,2 DECCX JNZAGAIN MOVMAX,AX HLT,乘法指令,例:MUL BX IMUL BYTE PTR(3456H) MUL CL IMUL WORD PTR DI,运算指令 第四章 80868088的指令系统,除法指令,1。无符号数的除法指令,格式:DIV S,;B:AX/S(8位)=AL.AH, W: DX AX/S(16位) =AX.DX,例:DIV BX IDIV BYT

29、E PTR(3456H) DIV CL IDIV WORD PTR DI,2。有符号数的除法指令,格式:IDIV S,S:R,M,注意:标志位无意义.,例:9876H/2345H MOV AX,9876H CWD MOV SI,2345H IDIV SI,运算指令 第四章 80868088的指令系统,十进制修正指令,1。BCD加法的修正指令,格式:AAA DAA,2。BCD减法的修正指令,3。BCD乘法的修正指令,格式:AAM,格式:AAS DAS,4。BCD除法的修正指令,格式:AAD,注意:1。这六条指令中只有AAD是在除法指令执行前执行,其余都是在运算指令后修正。 2。只有AAD是对AX

30、中的数据进行修正,其余都是对AL中的数据进行修正。,影响P、S、Z,不影响A、C、O。,影响P、S、Z,不影响A、C、O,影响C、A,对O、P、S、Z未定义。 影响C、A 、P、S、Z ,对O未定义。,影响C、A,对O、P、S、Z未定义。 影响C、A 、P、S、Z ,对O未定义。,运算指令 第四章 80868088的指令系统,1。逻辑非指令,格式:NOT D,2。逻辑与指令,3。逻辑或指令,格式:OR D,S,格式:AND D,S,;D:R、M,S:R、M、n,B/W,D:R、M,B/W,不影响标志位,影响S、Z、P,CF=OF=0,未对AF定义。,利用AND可以强行使目标操作数的某些位为零。

31、,;D:R、M,S:R、M、n,B/W,影响S、Z、P,CF=OF=0,未对AF定义。,利用OR可以强行使目标操作数的某些位为1。,逻辑运算指令,运算指令 第四章 80868088的指令系统,AND AL,0FH AND CX,0FF00H,OR AL,0FH OR AL,30H,4。逻辑异或指令,格式:XOR D,S,;D:R、M,S:R、M、n,B/W,影响S、Z、P,CF=OF=0,未对AF定义。,利用XOR可以强行使目标操作数的某些位为取反或两数是否相等。,5。测试指令,格式:TEST D,S,;D:R、M,S:R、M、n,B/W,影响S、Z、P,CF=OF=0,未对AF定义。,利用T

32、EST可以测试目标操作数的某些位的状态。,逻辑运算指令,运算指令 第四章 80868088的指令系统,XOR AL,0FH XOR CL,CL,TEST AL,80H TEST AL,0F0H,移位指令,1。逻辑算术左移指令,格式:SHL D,S SAL D,S,2。逻辑右移指令,3。算术右移指令,格式:SAR D,S,格式:SHR D,S,;D:R、M,S:1、CL,B/W,;D:R、M,S:1、CL,B/W,0,CF,CF,;D:R、M,S:1、CL,B/W,运算指令 第四章 80868088的指令系统,1。循环左移指令,格式:ROL D,S,2。循环右移指令,4。带进位位的循环右移指令,

33、格式:RCR D,S,格式:ROR D,S,CF,CF,CF,D:R、M,S:1、CL,B/W,循环指令,3。带进位位的循环左移指令,格式:RCL D,S,CF,这类指令只影响CF和OF,CF为最后一次送入的值,OF仅在循环一位时有效:循环前后符号位不同时OF=1,否则OF=0。,运算指令 第四章 80868088的指令系统,MOVAL,0FH SALAL,1 MOVBL,AL MOVCL,2 SALAL,CL ADDAL,BL MOVDATA,AL,;取数到AL中 ;乘2 ;保存 ;乘4 ;乘10(8+2) ;存结果,说明下面程序的功能:,功能:0FH*10DATA单元,运算指令 第四章 80868088的指令系统,程序控制转移指令,例420 假设x值存放在数据段1000H单元,函数y的值存放在1001H单元。 MOV AL,1000H CMP AL,0 JG BIG JLLOW DONE: MOV 1001H,AL HLT LOW :MOV AL,0FFH JMP DONE BIG: MOV AL,1 JMP DONE,程序控制转移指令 第四章 80868088的指令系统,例421 在数据段内以Block为首地址的100个字节数,试统计其正数和负数的个数,并分别将正数的个数放在DH中,负数的个数放在DL中。编程如下: MOV DX,0 MOV CX,100 LEA B

温馨提示

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

评论

0/150

提交评论