第三章 Pentium 微处理器的指令系统
-
Upload
dalton-beck -
Category
Documents
-
view
116 -
download
19
description
Transcript of 第三章 Pentium 微处理器的指令系统
第三章 第三章 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]
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 个标志位