微处理器原理及应用---第三章 寻址方式与指令系统.ppt

上传人:罗晋 文档编号:9336235 上传时间:2021-02-19 格式:PPT 页数:91 大小:454KB
返回 下载 相关 举报
微处理器原理及应用---第三章 寻址方式与指令系统.ppt_第1页
第1页 / 共91页
微处理器原理及应用---第三章 寻址方式与指令系统.ppt_第2页
第2页 / 共91页
微处理器原理及应用---第三章 寻址方式与指令系统.ppt_第3页
第3页 / 共91页
微处理器原理及应用---第三章 寻址方式与指令系统.ppt_第4页
第4页 / 共91页
微处理器原理及应用---第三章 寻址方式与指令系统.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《微处理器原理及应用---第三章 寻址方式与指令系统.ppt》由会员分享,可在线阅读,更多相关《微处理器原理及应用---第三章 寻址方式与指令系统.ppt(91页珍藏版)》请在三一文库上搜索。

1、第三章 寻址方式与指令系统 3.1 数据类型及其存储规则 3.1.1基本数据类型及存储 一个存储单元一个字节占用内存的一个地址。 基本数据类型:字、双字、四字、双四字 字两个相邻字节组成的16位二进制; 4个相邻字节组成的32位二进制数; 四字8个相邻字节组成的64位二进制数; 16个相邻字节组成的128位二进制数。,图3.2 基本数据类型存储规律,3.1.2 数字数据类型 数据类型包含:无符号整数、带符号整数和浮点数。 1无符号整数(范围:02n-1) 2带符号整数(范围:2n-1 +2n-1-1) 带符号整数是用2的补码表示的二进制值。规定操作数的最高位为符号位。 3浮点数 浮点数据类型可

2、分为三种:单精度浮点、双精度浮点和双扩展的精度浮点。,3.1.3指针数据类型 在实方式下有两种类型的指针:近指针(16位)和远指针(32位),3.1.4字符串、位及位串数据类型 字符串包括字节串、字串和双字串。 它们分别是字节、字和双字的相邻序列。,图3.4 字节、字、双字字符串数据类型,3.2 计算机指令格式,指令包括两部分:指令操作码部分和地址码部分。 指令操作码部分是给出该指令应完成何种操作。 地址码部分是用来描述该指令的操作对象。 指令格式可分为:零地址指令、一地址指令、二地址指令和三地址指令。 零地址指令:只有操作码部分,而没有操作数的指令; 一地址指令:只有目的操作数的单操作数指令

3、; 二地址指令:有两个地址指出两个操作数的地址; 三地址指令优点:操作结束后,原两个操作数的内容均未被破坏; 缺点:增加一个地址后,使得指令码加长,增加了存储空间,取指时间变长。,3.2.1 指令的助记符格式 助记符格式可用以下通式表示: L:op D1, D2, D3 其中:L是标号,在标识符后面跟有冒号(:) op是助记符,具有相同功能的指令操作码的保留名 例如:,3.2.2 80 x86指令编码格式 指令编码格式包含操作码和操作数两部分。 操作码表示计算机执行什么操作。 操作数指明参与操作的数的本身,或规定了操作数的地址。 图 3.5 8086 CPU指令编码的一般形式 1)操作码字节

4、它是指令的第一字节,规定指令的操作类型,是指令的必选字节,字节内容如下: D7 D6 D5 D4 D3 D2 D1 D0,OP:表示指令操作码, D:表示指令中数据传送的方向。 W:表示操作数类型。 2)寻址方式字节。它是指令的第二字节,规定操作数的寻址方式。是指令的可选字节,字节内容如下: D7 D6 D5 D4 D3 D2 D1 D0 MOD:表示方式域,D7、D6位能表示4种不同的方式。 REG:表示寄存器域,D5、D4、D3位能表示8种不同的寄存器。 R/M:表示寄存器存储器域,D2、D1、D0位能表示8种不同的寄存器存储器。,表3-1 mod与rm域所组合的寻址方式,3) 偏移量字节

5、 是指令的第三、四字节,是指令的可选字节, 给出了存储器操作数的偏移量。 4) 立即数字节 是指令的可选字节,给出了指令的立即数。 3.3 8086CPU的寻址方式 寻址方式寻找指令或操作数存放地址的方法。 两种寻址方式:一种是用来对操作数进行寻址;另一种是 用来对转移地址或调用地址进行寻址,即 对指令地址进行寻址。,3.3.1 操作数的寻址方式 1、 立即寻址 立即数寻址特点:指令执行速度快。 立即数只能是整数,且只能作为源操作数。,图3-6立即数寻址过程,2、 寄存器寻址方式 寄存器寻址方式的优点:不但可以减少指令码的长度,而且由 于操作数已存于寄存器中,执行速度 较快。 寄存器既能作为源

6、操作数,又能作为目的操作数。 例如: MOV AX,CX 该指令将CX(源操作数)的内容传送到AX寄存器(目的操作数)中,其中源操作数CX,目的操作数AX都是寄存器寻址方式。 3、 存储器寻址 指令给出了操作数在数据区中的地址信息。 五种不同的存储器寻址方式:,(1)直接寻址方式 例如: MOV AX,7834H 该指令将有效地址EA=8064H单元中的内容传送到AX寄存器中。若(DS)=2000H,则该指令源操作数的存储单元的物理地址为20000H7834H=27834H。,(2)寄存器间接寻址 操作数存放在存储单元中。 注意两点:一是寄存器中的内容是操作数的有效地址,而不是 操作数本身;

7、二是只能用CPU中的基址寄存器BX、BP或变址寄存器 DI、SI来间接寻址。 如果指令前面没有用前缀指令指明操作数在哪一段,则通常默认段寄存器为DS。即: 物理地址=DS10H+EA=DS10H+ 或 物理地址=SS10H+BP,例如: MOV AX,DI,(3)寄存器相对寻址 操作数存放在存储单元中 物理地址=DS10H+EA= DS10H+ 或 物理地址=SS10H+BP 例如: MOV BX,DI+10H,基址寻址用BX、BP为基址寄存器进行寻址 变址寻址用SI、DI为变址寄存器进行寻址,(4)基址加变址寻址方式 操作数存放在存储单元中 物理地址= DS10H+EA=DS10H+ 或 物

8、理地址= SS10H+ 例如: ADD AX,BX+SI,(5)相对的基址和变址寻址方式 操作数存放在存储单元中 物理地址=DS10H+EA=DS10H+ 或 物理地址=SS10H +,例如:MOV AH,BXSI2468H,4、 IO端口寻址 操作数在IO端口中。 两种编址方式:与存储器统一编址方式 独立的IO空间编址方式 与存储器统一编址方式,上述五种存储器寻址方式均可采用。 独立的IO空间编址方式则对IO端口有两种寻址方式: (l)直接端口寻址方式 端口地址的寻址范围是 0 0FFH,端口地址直接由指令给出。 (2) 间接端口寻址方式 端口地址的寻址范围是 0 0FFFFH,端口地址由D

9、X寄存器给出。,3.3.2 指令地址的寻址方式 指令地址的寻址方式以下4种: (1) 段内直接寻址方式 转移的指令地址是由当前的IP内容和指令中规定的8位或16位偏移量之和给出。,(2) 段内间接寻址方式 转移的指令地址是由用寄存器或一个字存储单元的内容给出。,图3-13段内间接寻址方式过程,(3) 段间直接寻址方式 转移的指令地址是由指令码字节直接给出。,(4) 段间间接寻址方式 转移的指令地址由一个双字存储单元的内容给出。,图3-15段间间接寻址方式过程,3.4 8086指令系统 指令系统按功能可分为6类: 数据传送类指令; 算术运算类指令; 逻辑运算与移位类指令; 字符串指令; 控制转移

10、类指令; 处理器控制类指令。,3.4.1 数据传送类指令 分为4种: 通用数据传送指令 累加器专用传送指令 地址传送指令 标志传送指令。 1通用数据传送指令 (1)最基本的传送指令 格式: MOV 目的操作数,源操作数,举例: MOV BL,AL MOV DS,AX MOV DL,DI MOV BX,AX MOV DX,1000 MOV BH,120 MOV DX,1234H,(2)堆栈操作指令 堆栈是一种数据结构,是在内存中开辟了一个比较特殊的存储区,这个区域中数据的存取采用“后进先出”的原则。,1000,SS,0018,SP,60,50,40,30,20,10,10018,1001A,栈顶

11、,栈底,1000,SS,0016,SP,60,50,40,30,20,10,AB,CD,10018,1001A,栈顶,栈底,1000,SS,001A,SP,40,30,20,10,1001A,栈顶,栈底,10016,图3.168086系统椎栈及其操作 (a)堆栈原始状态 (b)执行push AX (c)执行POP AX (AX)=CDABH POP BX后的状态,(a) (b) (c),堆栈段8086CPU在存储器分段管理时,划分了一个专门的 堆栈区。 格式: PUSH 源操作数 POP 目的操作数 举例: PUSH BX PUSH ES PUSH DS PUSH SI POP AX POP

12、BX POSH DI,(3)交换指令 实现两个操作数之间进行直接交换,方便程序的编写。 格式: XCHG 目的操作数,源操作数 举例: XCHG AH,BL XCHG DX,BX XCHG 505H,AX,2累加器专用传送指令 累加器是8086CPU进行数据传输的核心。 有两类指令: 输入输出指令 换码指令 (1)输入输出指令工业控制中常用的指令 格式: IN AC,源操作数 OUT 目的操作数,AC 举例: IN AL,20H OUT DX,AX,(2)换码指令 该指令用来将一个代码值转换成相应的另一种代码值, 格式: XLAT,举例: 若要将十进制数09转换成共阳极LED显示的字形代码,则

13、列表如表3-2所示。,表3-2 十进制数09转换成LED显示的字形代码,3地址传送指令 它包括3条指令: 取有效地址指令LEA; 将地址指针装入DS指令LDS; 将地址指针装入ES指令LES。 格式: LEA 寄存器,源操作数 LDS 寄存器,源操作数 LES 寄存器,源操作数 举例: LEA AX, DI+1000 LEA AX,3721H LDS SI,2130H LES DI,SI,4标志传送指令 标志传送指令包括4条指令: 标志读取指令LAHF 标志设置指令SAHF 标志寄存器压入堆栈指令PUSHF 标志寄存器从堆栈弹出指令POPF 格式:LAHF SAHF PUSHF POPF,举例

14、: PUSHF POP BX PUSH CX POPF,图3-19 LAHF和SAHF指令传送操作,3.4.2 算术运算类指令 1加法指令 格式:ADD 目的操作数,源操作数 ADC 目的操作数,源操作数 INC 目的操作数 举例: ADD BL,15H ADD BX,SI ADC CX,BX INC DX,2减法指令 格式:SUB 目的操作数,源操作数 SBB 目的操作数,源操作数 DEC 目的操作数 NEG 目的操作数 CMP 目的操作数,源操作数,举例: SUB AX,BX SUB AH,110 SBBBX,AX DEC BX,3乘法指令 格式:MUL 源操作数 IMUL 源操作数 举例

15、: MUL DL IMUL BX,(a) (b) 图3-20乘法运算操作数及其运算结果间关系 (a)字节操作数 (b)字操作数,4除法指令 格式:DIV 源操作数 IDIV 源操作数 CBW CBD 举例: DIV DL IDIV BX MOV AL,72H CBW MOV AX,8600H CWD,AL,AH,商,余数,操作数,AX,8位,16位,AX,DX,商,余数,操作数,DX AX,16位,32位,(a) (b) 图3-21除法运算操作数及其运算结果存放关系 (a)字节操作数 (b)字操作数,5BCD码运算的调整指令 分为两类:组合式BCD码和分离式BCD码 格式: DAA AAA D

16、AS AAS AAM AAD,举例: ADC AL,SI DAA ADD AL,DI AAA SUB AL,BX DAS MUL DL AAM AAD DIV BL,3.4.3 逻辑运算和移位指令 两组处理指令:逻辑运算指令和移位指令。 1逻辑运算指令 指令格式:AND 目的操作数,源操作数 OR 目的操作数,源操作数 NOT 目的操作数 XOR 目的操作数,源操作数 TEST 目的操作数,源操作数,举例: AND BL,0FH OR CX,BX+DI XOR AX,0FF00H TEST BX,8000H NOT DH 2移位指令 分为两大类:非循环移位指令和循环移位指令。,(1)非循环移位

17、指令 指令格式:SAL 目的操作数,计数值 SHL 目的操作数,计数值 SAR 目的操作数,计数值 SHR 目的操作数,计数值 举例: SAL AX,1 SHL AX,CL SAR WORD PTR SI,1 SHR DI,1,图3-22 非循环移位指令操作示意图 (a)SHL/SAL 算术左移 (b)SHR 逻辑右移 (c) SAR算术右移,(2)循环移位指令 指令格式:ROL 目的操作数,计数值 ROR 目的操作数,计数值 RCL 目的操作数,计数值 RCR 目的操作数,计数值 举例: ROL AX,1 ROR AH,CL RCL BYTE PTR BX,1 RCR BX,1,图3.23

18、循环移位移位指令操作示意图 (a)ROL不带进位循环左移 (b)ROR不带进位循环右移 (c)RCL带进位循环左移 (d)RCR带进位循环右移,3.4.4 串操作指令 串操作指令-用一条指令实现对一串字符或数据的操作。 串操作指令的特点: 通过加重复前缀来实现串操作,规定CX寄存器存放要处理的字符串的元素个数,即:字节数或字数。 可以对字节串进行操作,也可以对字串进行操作。 串操作时,SI和DI的增减规定由方向标志DF设定,当DF=1时,SI和DI作自动减量修改,当DF=0时,SI和DI作自动增量修改,对字节串操作增减量为1,对字串操作增减量为2。 重复的字符串处理过程可以被中断。 5条串操作

19、指令:串传送指令MOVS、串比较指令CMPS、串检索指 令SCAS、LODS串装入指令和串存储指令STOS。,3条重复前缀:重复前缀REP、相等时重复REPE和不相等时重复REPNE。 1指令的重复前缀 格式:REP 串操作指令 REPE 串操作指令 或 REPZ 串操作指令 REPNE 串操作指令 或 REPNZ 串操作指令,2字符串指令 (1)字符串传送指令 指令格式:MOVSB MOVSW 举例: MOV DS,2000H MOV ES,3000H CLD MOV CX,20 MOV SI,200H MOV DI,100H REP MOVSW,(2)字符串比较指令 指令格式:CMPSB

20、CMPSW 举例: 编程比较从逻辑地址2000H:100H开始的10个字节与逻辑地址4000H:200H开始的10个字节是否对应相等,相等则转DONE。 MOV DS,2000H MOV ES,4000H MOV DI, 200H MOV SI, 100H CLD,MOV CX,10 REPZ CMPSB JZ DONE RET DONE (3)字符串检索指令 指令格式:SCASW SCASB 功能:SCASB /SCASW在字符串中查找一个与已知数值 相同或不同的元素。,举例: 从逻辑地址9000H:100H开始的10个单元中如果有一个单元的内容为2CH,则BX加1。 MOV ES,9000

21、H MOV DI,100H CLD MOV CX,10 MOV AL,2CH REPNZ SCASB JNZ AAA INC BX AAA: ,(4) 取字符串指令 指令格式:LODSB LODSW 举例:将100H:20H单元开始10个字节的内容均加5。 CLD ;方向标志清0,SI递增 MOV CX,10 ;置计数初值10 MOV DS,100H ;置DS为100H MOV SI,20H ;置SI为20,作为初始地址指针 LL1: LODSB ;取1个字节到AL中,并使SI增1 ADD AL,5 ;加5处理 MOV S I,AL ;处理结果送回 DEC CX ;计数值减1 JNZ LL1

22、;如未处理完,转LL1 HLT ;暂停,(5)存字符串指令 指令格式:STOSB STOSW 举例: 将100H:20H开始的128个单元清0。 CLD ;清除方向标志,DI递增 MOV CX,0080H ;置计数初值128 MOV ES,100H ;置ES为100H MOV DI,20H ;置DI为20H,作为初始地址指针 XOR AL,AL ;AL清0 REP STOSB ;将128个字节清0,3.4.5 控制转移类指令 5种转移指令: 无条件跳转指令 条件跳转指令 循环控制指令 子程序调用和返回指令 中断指令 1无条件跳转指令 指令格式:JMP 目标地址,举例: JMP SHORT MU

23、LTI JMP NEAR PRT MULT2 JMP CX JMP FAR PTR MULT3 JMP DWORD PTR SI 2条件跳转指令 (1)简单条件跳转指令 指令格式: JC 目标地址 JNC 目标地址 JZ 目标地址 JNZ 目标地址 JS 目标地址 JNS 目标地址,JO 目标地址 JNO 目标地址 JP 目标地址 JNP 目标地址 JCXZ 目标地址 举例:用条件跳转指令实现程序的循环 MOV SI,1000H MOV DI,2000H MOV CX,100 KKK: MOVSB DEC CX JNZ KKK ,(2)带符号数条件跳转指令 指令格式: JG/JNLE 目标地址

24、 JGE/JNL 目标地址 JL/JNGE 目标地址 JLE/JNG 目标地址 举例:设有2个互不相等的带符号字节数存放在以100H单元为首地址的数据缓冲区中,试编程把较大的数送200H单元中。,(3)无符号数条件跳转指令 指令格式: JB/JNAE 目标地址 JNB/JAE 目标地址 JA/JNBE 目标地址 JNA/JBE 目标地址,MOV SI,100H ;首址100H送SI MOV AL,SI ;取第一个数据 CMP AL,SI+1 ;与第二个数相比较 JG L1 ;如果比第二个数大,转L1 MOV AL,SI+1 ;取第二个数 L1: MOV SI,200H ;将较大的数送至200H

25、 MOV SI,AL,3循环控制指令 指令格式: LOOP 目标地址 LOOPZLOOPE 目标地址 LOOPNZLOOPNE 目标地址 举例:编程求1+2+3+4+ +100 MOV CX,100 ;置循环计数初值100 MOV AX,0 ;求和寄存器AX清0, SUM:ADD AX,CX ;把CX计数值累加入AX LOOP SUM ;CX=CX-1, 当CX0时再循环 RET ;返回,结果在AX中,4子程序调用和返回指令 指令格式: CALL 目标地址 RET RET 参数 举例: CALL 200H CALL BX CALL 500H:600H CALL DWORD PTR BX RET

26、 4,5中断指令 3.4.6 处理器控制类指令 1标志操作指令 指令格式: STC CLC CMC STD CLD STI CLI,28086CPU与外部事件同步指令 指令格式:HLT WAIT ESC 外部操作码,源操作数 LOCK 指令 3空操作指令 指令格式:NOP 3.5 80X86的寻址方式及新增的指令 3.5.1 虚地址方式下的寻址方式,1立即数寻址方式 例如: MOV EAX,12345678H 2寄存器寻址方式 例如:MOV EAX,ECX 3存储器寻址方式 偏移量可以由下列公式计算得到: EA基址十变址比例因子十位移量 基址任何通用寄存器都可作为基址寄存器,其内容即为基址。

27、位移量在指令操作码后面的32位、16位或8位的数。 变址除了ESP寄存器外,任何通用寄存器都可以作为变址寄存器,其内容即为变址值。 比例因子变址寄存器的值可以乘以一个比例因子,比例因子可以是1,2,4或8。,9种存储器寻址方式 (1)直接寻址方式 例如:INC WORD PTR 1234567H (2)寄存器间接寻址方式 例如:MOV EBX,EAX MOV AX, ECX MOV BL,CX (3)基址寻址方式 例如:MOV ECX,EAX124 MOV DX,EBP12345H 与8086CPU不同之处: 位移量可以是32位, 任何一个通用寄存器均可,(4)变址寻址方式 例如: MOV E

28、AX,CNT EBP MOV EDX,CNTEAX 与8086CPU不同之处: 位移量可以是32位, 任何一个通用寄存器均可看成基址寄存器 (5)带比例因子的变址寻址方式 EA=变址寄存器内容*比例因子+位移量 其中:比例因子可以为1、2、4或8 例如: MOV EAX,CNTESI*4 MOV EAX,VAREDI*2,(6)基址加变址寻址方式 EA=基址寄存器内容+变址寄存器内容 例如1: MOV EAX,EBX EDI MOV EAX,ESP EBP 例如2: MOV EAX,EDX EBP MOV EAX,EBPEDX (7)带比例因子的变址再加基址寻址方式 EA=变址寄存器内容*比例

29、因子+基址 例如: MOV EBX,EDX*8 EBP MOV EAX,EDXEBP*2,(8)带位移量的基址加变址寻址方式 例如: ADD EDX,EDI EBP123H EA=基址寄存器内容+变址寄存器内容+位移量 (9)带比例因子的变址加基址加位移量的寻址方式 例如: MOV EAX,ESI* 8 EBP180H EA=基址寄存器内容+(变址寄存器内容比例因子)+ 位移量 注意:在实模式下,操作数和地址的默认长度是16位。,3.5.2 80286CPU新增指令 新增指令包括两个方面,一是增加了一些新功能指令,二是对一些原有指令增强了其功能。80286CPU新增指令见表3-3.3-4。下面

30、就其中一些常用指令进行介绍 1数据传送类指令 指令格式: PUSH 源操作数 PUSHA POPA 举例: PUSH -5,2算术运算类指令 指令格式: IMUL 寄存器,立即数 IMUL 寄存器1,寄存器2或存储器,立即数 举例: IMUL BX, 50 IMUL DI, BXTABLE, 3 IMUL BX, CX, 345H,3移位和循环移位指令 指令格式:SHL 目的操作数,COUNT SAL 目的操作数,COUNT SHR 目的操作数,COUNT SAR 目的操作数,COUNT ROL 目的操作数,COUNT ROR 目的操作数,COUNT RCL 目的操作数,COUNT RCR 目

31、的操作数,COUNT 举例: SHL DX,9,4串输入输出指令 指令格式:INSB INSW OUTSB OUTSW 举例:要从端口地址为125H的外设端口中输入 200个字节,存放在以逻辑地址2000H:100H为首址的内存单元中,则可采用如下串输入指令: CLD MOV ES,2000H LEA DI,100H MOV CX,200 MOV DX,125H REP INSB,5高级语言类指令 指令格式: BOUND 寄存器,存储器地址 ENTER 立即数1,立即数2 LEAVE 3.5.3 8038680486CPU新增指令 1数据传送类指令 指令格式:MOVSX 目的操作数,源操作数

32、MOVZX 目的操作数,源操作数,举例: MOV DX, 0FB20H MOVSX EAX, DX MOV CL,0FBH MOVZX AX,CL 2算术运算类 指令格式:XADD 目的操作数,源操作数,3逻辑运算与移位指令 指令格式: SHRD 第一操作数,第二操作数,第三操作数 SHLD 第一操作数,第二操作数,第三操作数 举例: 设CX中有内容为1234H,DX中有内容为5678H,则SHLD CX,DX, 7 指令是把DX左移 7位,移入 CX中,结果(CX)=1A2BH,4位操作类指令 指令格式:BT 第一操作数,第二操作数 BTC 第一操作数,第二操作数 BTR 第一操作数,第二操作数 BTS 第一操作数,第二操作数 BSF 目的寄存器,第二操作数 BSR 目的寄存器,第二操作数 举例: MOV CX, 6 BT BYTE PTR SI, CX,5根据条件,字节置“1”指令 指令格式:SETCC 目的操作数 举例: SETZ BL SETNZ BL SETNS BYTE PTRSI7 6Cache管理类指令 指令格式:INVD WBINVD INVLPG,表3-3 80286新增加指令,表3-4 80286增强功能指令,表3-5 80386新增加指令,表3-6 80386增强功能指令,表3-7 80486新增加指令,

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1