32
第第第 第第第 Pentium Pentium 第第第第第第第第第第第第第第第第3.1 第第 3.2 Pentium 第第第第第第第第第 3.3 第第 第第第 3.4 第第第第第第 3.5 第第第第第第 3.6 第第第第第 3.7 第第第第第第 3.8 第第第第第第 第第第第 3.9 第第第第第第 3.10 MMX 第第第第

第三章 Pentium 微处理器的指令系统

Embed Size (px)

DESCRIPTION

第三章 Pentium 微处理器的指令系统. 3.1 概述 3.2 Pentium 微处理器的寻址方式 3.3 数据传送指令 3.4 算术运算指令 3.5 逻辑运算指令 3.6 串操作指令 3.7 程序控制指令 3.8 保护模式的系统控制指令 3.9 浮点运算指令 3.10 MMX 指令简介. 3.1 概述. 指令是微处理器执行某种操作的命令,微处理器全部指令的集合称为指令系统。 指令有两种书写格式:机器指令和符号指令。 符号指令是用规定的助记符和规定的书写格式书写的指令。符号指令的书写格式为: 操作码助记符 操作数助记符 - PowerPoint PPT Presentation

Citation preview

第三章 第三章 PentiumPentium 微处理器的指令系统微处理器的指令系统3.1 概述3.2 Pentium 微处理器的寻址方式3.3 数据传送指令3.4 算术运算指令3.5 逻辑运算指令3.6 串操作指令3.7 程序控制指令3.8 保护模式的系统控制指令3.9 浮点运算指令3.10 MMX 指令简介

3.1 概述

•指令是微处理器执行某种操作的命令,微处理器全部指令的集合称为指令系统。

•指令有两种书写格式:机器指令和符号指令。

•符号指令是用规定的助记符和规定的书写格式书写的指令。符号指令的书写格式为:

操作码助记符 操作数助记符

MOV AL, 1 10110000 00000001

3.2 Pentium 微处理器的寻址方式

寻址方式:寻找指令中操作数地址的方式。

操作数有三种可能的存放方式:•直接包含在指令中 立即数 立即数寻址•包含在某个寄存器中 寄存器操作数 寄存器寻址•在内存中 存储器操作数(内存操作数) 存储器寻址

内存实际地址由两部分组成:存储单元所在段的基地址 / 段内偏移地址(偏移量)

MOV ES:[3000H], AL

段内偏移地址可以由如下四个部分组成(称为偏移地址四元素):

•基址寄存器内容•变址寄存器内容•比例因子•位移量

由四元素组合形成的偏移地址称为有效地址 EA:EA= 基址 +( 变址比例因子 )+ 位移量

对于实模式( 16 位寻址):基址寄存器: BX,BP变址寄存器: SI,DI比例因子: 0,1位移量: 0,8,16 位

对于保护模式( 32 位寻址):基址寄存器:任何 32 位通用寄存器变址寄存器:除 ESP 外的任何 32 位通用寄存器比例因子: 1,2,4,8位移量: 0,8,32 位

由四元素可组合出 9 种存储器寻址方式。Pentium 微处理器共有 11 种寻址方式:

1. 立即数寻址操作数作为立即数直接存在指令中,可为字节、字、双字

MOV ECX, 12345678H 低地址

高地址

CS 段

操作码78H

56H

34H

12H

78H56H34H12HECX

2. 寄存器寻址操作数包含在指令规定的 8 位、 16 位、 32 位寄存器中

MOV ECX, EDX

78H56H34H12H

ECX

78H56H34H12H

EDX

寄存器寻址由于无需从存储器中取操作数,故执行速度快

3. 直接寻址指令中的操作数部分直接给出操作数的有效地址EA ,操作数可以是 16 位或 32 位整数,操作数默认在 DS 段中

MOV AX, [3000H]

低地址

高地址

CS 段操作码

00H

30H

34H

12H34H12HAX

DS 段50000

53000

DS 5000 0

300053000

+

如果操作数在 DS 以外的其他段( CS,SS,ES,FS,GS )中,指令中必须指明段寄存器

MOV AX, FS:[3000H]

低地址

高地址

CS 段操作码

00H

30H

34H

12H34H12HAX

FS 段20000

23000

FS 2000 0

300023000

+

4. 寄存器间接寻址操作数地址的偏移量(有效地址 EA )存放在寄存器中16 位寻址:偏移地址放在 SI,DI,BP,BX 中

以 SI,DI, BX 间接寻址,默认操作数在 DS 段中

MOV AX, [SI]

以 BP 间接寻址,默认操作数在 SS 段中

MOV AX, [BP]32 位寻址:偏移地址放在 8 个 32 位通用寄存器中

除 ESP,EBP 默认段寄存器为 SS 外,其余均默认段寄存器为 DSMOV EAX, [ESP]

低地址

高地址

CS 段操作码

34H

12H34H12HAX

SS 段70000

73000

SS 7000 0

300073000

+

MOV AX, [BP]

BP

5. 基址寻址EA=[ 基址寄存器 ]+ 位移量16 位寻址: BP,BX 为基址寄存器

BX , DS 为默认段寄存器BP , SS 为默认段寄存器

32 位寻址: 8 个 32 位通用寄存器均可作为基址寄存器,除 ESP,EBP 默认段寄存器为 SS 外,其余均默认段寄存器为 DS

MOV EAX, [BX+24]MOV DX, [EAX+1500]

低地址

高地址

CS 段操作码

00H

15H

34H

12H34H12HAX

FS 段70000

73500

BX

150073500

+

MOV DX, [BX+1500]

DS 7000 0

2000

6. 变址寻址EA=[ 变址寄存器 ]+ 位移量16 位寻址: SI,DI 为基址寄存器 , DS 为默认段寄存器

32 位寻址:除 ESP 外其余 7 个 32 位通用寄存器均可作为变址寄存器, EBP 默认 SS 为段寄存器,其余均默认段寄存器为 DS

MOV AH, [SI+5]

变址寻址适用于对一维数组的元素进行操作。

7. 比例变址寻址

EA=[ 变址寄存器 ] 比例因子 + 位移量

只适用于 32 位寻址 MOV EAX, [ESI*4+50]

比例变址寻址适用于一维数组操作,当数组元素大小为 2/4/8 字节时,它更方便、有效

8. 基址加变址寻址

EA=[ 基址寄存器 ]+[ 变址寄存器 ]

适用于 16 位和 32 位寻址 MOV AX, [BX+SI] MOV EAX, [EDX+EBP]

基址加变址寻址主要用于二维数组操作和二重循环

9. 基址加比例变址寻址

EA=[ 变址寄存器 ] 比例因子 +[ 基址寄存器 ]

只适用于 32 位寻址 MOV EAX, [EDX*8+EAX]

适用于数组元素大小为 2/4/8 字节时二维数组操作

10. 带位移的基址加变址寻址

EA=[ 基址寄存器 ]+[ 变址寄存器 ]+ 位移量

适用于 16 位和 32 位寻址 MOV AX, [BX+SI+50] MOV EAX, [EDX+EBP+0FFFF000H]

主要用于二维数组操作 , 位移量为数组起始地址

11. 带位移的基址加比例变址寻址

EA=[ 变址寄存器 ] 比例因子 +[ 基址寄存器 ]+ 位移量

只适用于 32 位寻址 MOV AX, [BX+SI+50] MOV EAX, [EDX+EBP+0FFFF000H]适用于数组元素大小为 2/4/8 字节时二维数组操作 ,位移量为数组起始地址

3.3 数据传送指令执行后不影响标志位,源操作数不变

1. 通用数据传送指令•MOV 目标操作数, 源操作数1 )源操作数可以是 8/16/32 位的立即数、寄存器操作数、内存操作数。目标操作数不允许为立即数,其余同源操作数。源、目不能同时为内存操作数。2 )源、目操作数类型必须匹配

MOV BYTE PTR [BX], 12H3) 不能向段寄存器写立即数

MOV AX, 2000MOV DX, AX

4) 以 CS 为目标的一切传送指令都是非法的

•MOVSX 目标寄存器, 源操作数符号扩展传送指令MOV DL, -16MOVSX BX, DL

•MOVZX 目标寄存器, 源操作数零扩展传送指令MOV DL, -16MOVZX BX, DL

•XCHG 目标操作数, 源操作数交换指令,源、目不能同为内存操作数XCHG AX, [SI+0400H]

•BSWAP 32 位寄存器字节交换指令,MOV EAX, 12345678HBSWAP EAX

•XLAT 表头变量名查表指令,用来取表中某指定数的值

TABLE DB 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 MOV BX, OFFSET TABLE MOV AL, 5 XLAT TABLE

执行后 AL=53

•LAHF SAHF

标志寄存器传送指令

2. 堆栈操作指令•PUSH 源操作数进栈指令,先调整堆栈指针,再把源操作数压栈

PUSH AXPUSH DWORD PTR [SI+5]•POP 目标操作数出栈指令,先将栈顶 2/4 字节送目标操作数,再调整堆栈指针

POP AXPOP DWORD PTR [SI+5]

•PUSHF POPF16 位标志寄存器进栈 / 出栈指令

•PUSHFD POPFD32 位标志寄存器进栈 / 出栈指令

•PUSHA POPA16 位通用寄存器进栈 / 出栈指令

•PUSHAD POPAD32 位通用寄存器进栈 / 出栈指令

3. 目标地址传送指令•LEA 目标寄存器, 源操作数有效地址传送指令,源操作数为内存操作数,将内存单元的有效地址(而不是内容)传送到目标寄存器

LEA EAX, [SI+5]•LDS/LES/LFS/LGS/LSS 目标寄存器, 源操作数指针传送指令

ADDR DD 1A2B3C4DH LDS SI, ADDR

4. I/O 数据传送指令完成累加器和 I/O 端口之间的数据传送•IN 累加器,端口号端口号为 8 位时,直接寻址 , 最多可访问 256 个端口IN AX, PORT

端口地址为 16 位时,间接寻址,端口地址必须放在 DX 寄存器中,最多可访问 65536 个端口IN AL, DX

•OUT 端口号 , 累加器

3.4 算术运算指令加、减、乘、除,运算对象 8/16/32 位有符号 / 无符号整数,以及 BCD 码影响标志位1. 加法指令

•ADD 目标操作数, 源操作数源操作数 + 目标操作数—— > 目标操作数

•ADC 目标操作数, 源操作数源操作数 + 目标操作数 +CF——> 目标操作数

影响 A,C,O,P,S,Z6 个标志位•INC 目标操作数目标操作数 +1——> 目标操作数影响 A,O,P,S,Z5 个标志位

2. 减法指令•SUB 目标操作数, 源操作数目标操作数 - 源操作数—— > 目标操作数

•SBB 目标操作数, 源操作数目标操作数 - 源操作数 -CF——> 目标操作数

•DEC 目标操作数目标操作数 -1——> 目标操作数

•NEG 目标操作数0- 目标操作数—— > 目标操作数影响 A,C,O,P,S,Z6 个标志位

•CMP 目标操作数, 源操作数比较指令

3. 乘法指令•MUL 乘数无符号乘法

•IMUL 乘数有符号乘法

4. 除法指令•DIV 除数无符号除法

•IDIV 除数有符号除法

5. 十进制调整指令

•DAA加法的压缩 BDC 码调整指令

•AAA加法的非压缩 BDC 码调整指令

•DAS减法的压缩 BDC 码调整指令

•AAS减法的非压缩 BDC 码调整指令

•AAM乘法的非压缩 BDC 码调整指令

•AAD除法的非压缩 BDC 码调整指令