第三章 80x86指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使转换检测缓冲器TLB的32个表项中用m 指出的当前项清除。
二 80x86的指令系统
Pentium新增加的指令
(1) CMPXCHG8B m 8字节即64位比较指令 将EDX∶EAX中的8个字节与m所指的存储器中的 8个字节比较。
(2) RDTSC读时钟周期数指令 读取记录时钟周期数的 64 位计数器的值送 EDX : EAX。
二 80x86的指令系统
与调试寄存器有关的传送指令
MOV MOV DRn,EAX ;往调试寄存器DRn设置初值, DRn可为DR0~DR3、DR6、DR7 EBX,DR3;将调试寄存器DR3的值送到1个 寄存器 TRn,EAX ;往测试寄存器送一个32位值, TRn可为TR6或TR7 EBX,TRn;将测试寄存器TRn的值送到 寄存器,这里为EBX
将片内Cache中的内容清除,并使外部 电路清除外部Cache中的内容。
二 80x86的指令系统
(5) WBINVD Cache清除和回写指令 将片内 Cache 中的内容清除,并外部电 路将外部 Cache 中的数据回写到主存, 再清除外部Cache中的内容。
(6) INVLPG m TLB项清除指令
二 80x86的指令系统
(3)PUSH
还可将立即数推入堆栈 (4)PUSHAD 将EAX、ECX、EDX、EBX、ESP、 EBP、ESI、EDI推入堆栈
二 80x86的指令系统
(2) 累加器传送指令 包括: IN OUT XLAT XLATB
二 80x86的指令系统
(3) 标志传送指令
在 LAHF 、 SAHF 、 PUSHF 、 POP 基 础上,增加了: PUSHFD POPFD
FADD ST,ST(3)
;ST<——ST+ST(3)
初始化时,ST=0,第一次压栈后ST=0-1=7 mod 8
浮点运算指令及汇编语言程序设计
浮点指令简介
约定: real32:内存中的32位短实数 real64:内存中的64位长实数 mem16:内存中的16位整数 mem32:内存中的32位整数 mem64:内存中的64位整数 memBCD:内存中的BCD码 st(j):第j个浮点寄存器 st(0):栈顶
浮点运算指令及汇编语言程序设计
浮点数据格式
31
符号位 阶码
23
有 效 数 字
0
单精度数
63
符号位 阶码
51
有 效 数 字
0
双精度数
79
符号位 阶
64 63
码
0
有 效 数 字
扩展精度数
1
阶码采用移码表示——实际阶码+偏置量: 32位偏置量7FH 64位偏置量3FFH 80位偏置量3FFFH
浮点运算指令及汇编语言程序设计
与测试寄存器有关的传送指令
MOV MOV
二 80x86的指令系统
支持高级语言的指令
BOUND 如: BOUND EBX,MEM_DWORD ENTER 如: ENTER 48,3 LEAVE
二 80x86的指令系统
系统设置和测试指令
CLTS
功能:清除机器状态字中的任务切换标志TS。
SGDT/SLDT/SIDT
(2) CMPXCHG r/m, r 32位比较指令 将目的寄存器或存储器中数和累加器中数比较, 如等则ZF为1,并将源操作数送目的操作数;否 则ZF为0,并将目的操作数送累加器。
二 80x86的指令系统
(3) XADD r/m, r 字交换加法指令 将源操作数和目的操作数相加,结果 送目的操作数处,而目的操作数送源 操作数处。 (4) INVD Cache清除指令
二 80x86的指令系统
SMSW存储机器状态字指令 将机器状态字MSW存入内存2字节中。 ARPL调整请求特权级指令 这条指令调整选择子的RPL字段。
二 80x86的指令系统
80486新增加的指令 (1) BSWAP r双字交换指令
将指定的32位寄存器中双字第31~24位与第7~ 0位交换,第23~16位与第15~8位交换。
二 80x86的指令系统
逻辑指令
运算指令 移位指令
二 80x86的指令系统
串操作指令 包括(B/W/D) MOVS CMPS SCAS LODS STOS
此外,增加了
INS OUTS
二 80x86的指令系统 转移、循环和调用指令 条件转移指令的相对转 移地址不受范围限制
二 80x86的指令系统 循环控制指令包括: LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE
一 80x86的寻址方式
(7) 基址加带比例因子的变址寻址方式 如: MOV ECX,[EDI*8][EAX]
(8) 带位移量的基址加变址寻址方式 如: ADD EDX,[ESI][EBP+100H]
一 80x86的寻址方式
(9) 带位移量的基址加带比例因子的 变址寻址方式 如: MOV EAX,[EDI*4][EBP+80] ; EDI 的内容乘 4 ,加 EBP 的内 容,再加80即有效地址
二 80x86的指令系统
(4) 地址传送指令
实现6字节地址指针的传送 如: LDS EBX,MEMLOC LES EDI,MEMLOC LSS ESP,MEMLOC LFS EDX,MEMLOC LGS ESI,MEMLOC
二 80x86的指令系统
(5) 数据类型转换指令
在CBW 、CWD 指令外,增加了 2条指令。 即: CWDE ;将AX中的字进行高位扩展, 成为EAX中的双字 CDQ ;将EAX中的双字进行高位扩 展,得到EDX和EAX中的4字
(3) CPUID读取CPU的标识等有关信息 获得Pentium处理器的类型等有关信息。
二 80x86的指令系统
(4) RDMSR读取模式专用寄存器的指令 Pentium模式专用寄存器中的值。 (5) WRMSR 写入模式专用寄存器的指令
将EDX∶EAX中64位数写入模式专用寄存器。
(6) RSM 复位到系统管理模式
二 80x86的指令系统
算术运算指令 ① 乘法运算指令 MUL、IMUL 功能:
AL、AX或EAX存放操作数并保存乘积低半部分, 另一个操作数为寄存器和存储器,也可为立 即数
乘积的高半部分在AH或EAX。
Fra Baidu bibliotek
二 80x86的指令系统
②除法运算指令DIV和IDIV 功能: 用AX、DX+AX或者EDX+EAX存放被除数, 除数的长度为被除数的一半, 商放在原存放被除数的寄存器的低半部分, 余数放在高半部分。
浮点运算指令及汇编语言程序设计
浮点数定义伪指令 DD DQ DT 11.2 11.2 11.2
11.2 11.2 11.2
REAL4 REAL8 REAL10
MASM
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构 8个80位的数值寄存器 3个16位寄存器(控制寄存器、 状态寄存器、标记寄存器) 5个错误指针寄存器
一 80x86的寻址方式
(3) 基址寻址方式
如: MOV
ECX,[EAX+24]
;由EAX中内容加24组成有效地址
(4) 变址寻址方式
如: ADD EAX,[ESI],5
;ESI的内容加5组成有效地址
一 80x86的寻址方式
(5) 带比例因子的变址寻址方式 如: IMUL EBX,[ESI*4+7] (6) 基址变址寻址方式 如: MOV EAX,[ESI][EBX]
浮点运算指令及汇编语言程序设计
浮点指令简介
•数据装入
内存中的浮点数装入栈顶—— FLD FLD real32/real64 浮点寄存器的值装入栈顶——FLD FLD st(j) 内存中的整数装入栈顶 ——FILD FILD mem16/mem32/mem64 内存中的BCD码装入栈顶 ——FBLD FBLD memBCD
二 80x86的指令系统
位扫描
向前位扫描: 向后位扫描: BSF 目标操作数,源操作数 BSR 目标操作数,源操作数
对源操作数进行扫描,将遇到的第一个1所 在的位置送目标操作数,并将ZF清0。 如果源操作数为0,则目标操作数不变,且 ZF置1
MOV EAX, 60000000H BSF EBX,EAX
浮点运算指令及汇编语言程序设计
浮点指令简介
•装入常数 FLDZ FLD1 FLDPI FLDL2E FLDL2T FLDLG2 FLDLN2 ;装入0.0 ;装入1.0 ;装入π ;装入log2(e) ;装入log2(10) ;装入log10(2) ;装入loge(10)
二 80x86的指令系统
中断指令
中断指令包括: INT n 增加了 IRETD 功能:从堆栈中先弹出4个字节装入EIP,再弹 出2个字节装入CS。 INTO IRET
二 80x86的指令系统
标志指令 标志指令包括: CLC STC CMC CLD STD CLI STI
二 80x86的指令系统
二 80x86的指令系统
1 80386指令
80386的指令系统比之8086: 扩展了数据宽度 对存储器寻址方式也进行了扩充 增加了少量指令。
二 80x86的指令系统
数据传送指令 (1)通用传送指令 MOVZX和MOVSX 如:MOVZX AX,BL MOVSX AX,BL (2)交换指令XCHG 如: XCHG EAX,EDI ;寄存器和寄存器进行双字交换 XCHG ESI,MEM_DWORD ;寄存器和内存进行双字交换
(7) MOV CR4,R32
(8) MOV R32,CR4
浮点运算指令及汇编语言程序设计
浮点运算指令
浮点运算指令及汇编语言程序设计
浮点数据格式
格式: 尾数 移码指数 符号位
类型:
短浮点数,32位单精度——1位符号,8位指数,23位尾数 长浮点数,64位双精度——1位符号,11位指数,52位尾数 临时浮点数,80位扩展精度——1位符号,15位指数,64位尾数
第三章 80X86指令系统(补)
1 80x86的寻址方式和指令系统
一 二 三 四
80x86的寻址方式 80x86的指令系统 浮点运算指令简介 MMX技术简介
一 80x86的寻址方式
(1) 直接寻址方式
如:
INC WORD PTR [500]
;字的有效地址为500
(2) 寄存器间接寻址方式
如:
MOV [ECX],EDX ;ECX指出有效地址
二 80x86的指令系统
LOCK前缀和可使用LOCK前缀的指令 特点: 32位系统不允许LOCK前缀用于重复串 操作指令 对可以接受LOCK前缀的指令作了限制
二 80x86的指令系统
处理器控制和特权指令
除HLT、WAIT、ESC、NOP外,增加了: 与控制寄存器有关的传送指令, 如: MOV CRn,EAX ;往CRn中设置一个32位值,其 中CRn可为CR0、CR2、CR3 MOV EBX,CRn ;将CRn的值送寄存器,其中 CRn可为CR0、CR2或CR3
分别将:
全局描述符表寄存器
局部描述符表寄存器
中断描述符表寄存器 的内容送到存储器中
二 80x86的指令系统
LTR STR LAR LSL
LGDT/LLDT/LIDT
二 80x86的指令系统
VERR/VERW检测段类型指令 VERR检测一个选择子所对应的段是否可读 VERW检测一个选择子所对应的段是否可写 LMSW装入机器状态字指令 将存储器中2字节送到机器状态字MSW。
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构
•浮点数值寄存器 80位临时实数 R0 R1
R2
R3 R4 R5 R6
R7
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构
8个寄存器按堆栈方式使用,压栈时栈顶减1,出栈 时栈顶加1。栈顶用ST或用ST(0)表示,ST(n)表 示栈顶加n的寄存器
浮点数据格式
例:将-12.5转换成单精度浮点数
1 10000010 10010000000000000000000
C1 48 00 00 H 例:将浮点数431B4000H转换成十进制数 0 10000110 00110110100000000000000 1.00110110127= 10011011.01 =155.25
位处理指令
位处理指令包括:
位测试 BTS ,BTR, BTC, BT 位扫描 BSF, BSR
二 80x86的指令系统
位测试 位测试: 位测试置0: 位测试置1: 位测试取反: BT BTR BTS BTC 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数
测试目标操作数中由源操作数指定的位,将 其值送CF标志 MOV AX, 1FF0H BTS AX, 24
二 80x86的指令系统
Pentium新增加的指令
(1) CMPXCHG8B m 8字节即64位比较指令 将EDX∶EAX中的8个字节与m所指的存储器中的 8个字节比较。
(2) RDTSC读时钟周期数指令 读取记录时钟周期数的 64 位计数器的值送 EDX : EAX。
二 80x86的指令系统
与调试寄存器有关的传送指令
MOV MOV DRn,EAX ;往调试寄存器DRn设置初值, DRn可为DR0~DR3、DR6、DR7 EBX,DR3;将调试寄存器DR3的值送到1个 寄存器 TRn,EAX ;往测试寄存器送一个32位值, TRn可为TR6或TR7 EBX,TRn;将测试寄存器TRn的值送到 寄存器,这里为EBX
将片内Cache中的内容清除,并使外部 电路清除外部Cache中的内容。
二 80x86的指令系统
(5) WBINVD Cache清除和回写指令 将片内 Cache 中的内容清除,并外部电 路将外部 Cache 中的数据回写到主存, 再清除外部Cache中的内容。
(6) INVLPG m TLB项清除指令
二 80x86的指令系统
(3)PUSH
还可将立即数推入堆栈 (4)PUSHAD 将EAX、ECX、EDX、EBX、ESP、 EBP、ESI、EDI推入堆栈
二 80x86的指令系统
(2) 累加器传送指令 包括: IN OUT XLAT XLATB
二 80x86的指令系统
(3) 标志传送指令
在 LAHF 、 SAHF 、 PUSHF 、 POP 基 础上,增加了: PUSHFD POPFD
FADD ST,ST(3)
;ST<——ST+ST(3)
初始化时,ST=0,第一次压栈后ST=0-1=7 mod 8
浮点运算指令及汇编语言程序设计
浮点指令简介
约定: real32:内存中的32位短实数 real64:内存中的64位长实数 mem16:内存中的16位整数 mem32:内存中的32位整数 mem64:内存中的64位整数 memBCD:内存中的BCD码 st(j):第j个浮点寄存器 st(0):栈顶
浮点运算指令及汇编语言程序设计
浮点数据格式
31
符号位 阶码
23
有 效 数 字
0
单精度数
63
符号位 阶码
51
有 效 数 字
0
双精度数
79
符号位 阶
64 63
码
0
有 效 数 字
扩展精度数
1
阶码采用移码表示——实际阶码+偏置量: 32位偏置量7FH 64位偏置量3FFH 80位偏置量3FFFH
浮点运算指令及汇编语言程序设计
与测试寄存器有关的传送指令
MOV MOV
二 80x86的指令系统
支持高级语言的指令
BOUND 如: BOUND EBX,MEM_DWORD ENTER 如: ENTER 48,3 LEAVE
二 80x86的指令系统
系统设置和测试指令
CLTS
功能:清除机器状态字中的任务切换标志TS。
SGDT/SLDT/SIDT
(2) CMPXCHG r/m, r 32位比较指令 将目的寄存器或存储器中数和累加器中数比较, 如等则ZF为1,并将源操作数送目的操作数;否 则ZF为0,并将目的操作数送累加器。
二 80x86的指令系统
(3) XADD r/m, r 字交换加法指令 将源操作数和目的操作数相加,结果 送目的操作数处,而目的操作数送源 操作数处。 (4) INVD Cache清除指令
二 80x86的指令系统
SMSW存储机器状态字指令 将机器状态字MSW存入内存2字节中。 ARPL调整请求特权级指令 这条指令调整选择子的RPL字段。
二 80x86的指令系统
80486新增加的指令 (1) BSWAP r双字交换指令
将指定的32位寄存器中双字第31~24位与第7~ 0位交换,第23~16位与第15~8位交换。
二 80x86的指令系统
逻辑指令
运算指令 移位指令
二 80x86的指令系统
串操作指令 包括(B/W/D) MOVS CMPS SCAS LODS STOS
此外,增加了
INS OUTS
二 80x86的指令系统 转移、循环和调用指令 条件转移指令的相对转 移地址不受范围限制
二 80x86的指令系统 循环控制指令包括: LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE
一 80x86的寻址方式
(7) 基址加带比例因子的变址寻址方式 如: MOV ECX,[EDI*8][EAX]
(8) 带位移量的基址加变址寻址方式 如: ADD EDX,[ESI][EBP+100H]
一 80x86的寻址方式
(9) 带位移量的基址加带比例因子的 变址寻址方式 如: MOV EAX,[EDI*4][EBP+80] ; EDI 的内容乘 4 ,加 EBP 的内 容,再加80即有效地址
二 80x86的指令系统
(4) 地址传送指令
实现6字节地址指针的传送 如: LDS EBX,MEMLOC LES EDI,MEMLOC LSS ESP,MEMLOC LFS EDX,MEMLOC LGS ESI,MEMLOC
二 80x86的指令系统
(5) 数据类型转换指令
在CBW 、CWD 指令外,增加了 2条指令。 即: CWDE ;将AX中的字进行高位扩展, 成为EAX中的双字 CDQ ;将EAX中的双字进行高位扩 展,得到EDX和EAX中的4字
(3) CPUID读取CPU的标识等有关信息 获得Pentium处理器的类型等有关信息。
二 80x86的指令系统
(4) RDMSR读取模式专用寄存器的指令 Pentium模式专用寄存器中的值。 (5) WRMSR 写入模式专用寄存器的指令
将EDX∶EAX中64位数写入模式专用寄存器。
(6) RSM 复位到系统管理模式
二 80x86的指令系统
算术运算指令 ① 乘法运算指令 MUL、IMUL 功能:
AL、AX或EAX存放操作数并保存乘积低半部分, 另一个操作数为寄存器和存储器,也可为立 即数
乘积的高半部分在AH或EAX。
Fra Baidu bibliotek
二 80x86的指令系统
②除法运算指令DIV和IDIV 功能: 用AX、DX+AX或者EDX+EAX存放被除数, 除数的长度为被除数的一半, 商放在原存放被除数的寄存器的低半部分, 余数放在高半部分。
浮点运算指令及汇编语言程序设计
浮点数定义伪指令 DD DQ DT 11.2 11.2 11.2
11.2 11.2 11.2
REAL4 REAL8 REAL10
MASM
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构 8个80位的数值寄存器 3个16位寄存器(控制寄存器、 状态寄存器、标记寄存器) 5个错误指针寄存器
一 80x86的寻址方式
(3) 基址寻址方式
如: MOV
ECX,[EAX+24]
;由EAX中内容加24组成有效地址
(4) 变址寻址方式
如: ADD EAX,[ESI],5
;ESI的内容加5组成有效地址
一 80x86的寻址方式
(5) 带比例因子的变址寻址方式 如: IMUL EBX,[ESI*4+7] (6) 基址变址寻址方式 如: MOV EAX,[ESI][EBX]
浮点运算指令及汇编语言程序设计
浮点指令简介
•数据装入
内存中的浮点数装入栈顶—— FLD FLD real32/real64 浮点寄存器的值装入栈顶——FLD FLD st(j) 内存中的整数装入栈顶 ——FILD FILD mem16/mem32/mem64 内存中的BCD码装入栈顶 ——FBLD FBLD memBCD
二 80x86的指令系统
位扫描
向前位扫描: 向后位扫描: BSF 目标操作数,源操作数 BSR 目标操作数,源操作数
对源操作数进行扫描,将遇到的第一个1所 在的位置送目标操作数,并将ZF清0。 如果源操作数为0,则目标操作数不变,且 ZF置1
MOV EAX, 60000000H BSF EBX,EAX
浮点运算指令及汇编语言程序设计
浮点指令简介
•装入常数 FLDZ FLD1 FLDPI FLDL2E FLDL2T FLDLG2 FLDLN2 ;装入0.0 ;装入1.0 ;装入π ;装入log2(e) ;装入log2(10) ;装入log10(2) ;装入loge(10)
二 80x86的指令系统
中断指令
中断指令包括: INT n 增加了 IRETD 功能:从堆栈中先弹出4个字节装入EIP,再弹 出2个字节装入CS。 INTO IRET
二 80x86的指令系统
标志指令 标志指令包括: CLC STC CMC CLD STD CLI STI
二 80x86的指令系统
二 80x86的指令系统
1 80386指令
80386的指令系统比之8086: 扩展了数据宽度 对存储器寻址方式也进行了扩充 增加了少量指令。
二 80x86的指令系统
数据传送指令 (1)通用传送指令 MOVZX和MOVSX 如:MOVZX AX,BL MOVSX AX,BL (2)交换指令XCHG 如: XCHG EAX,EDI ;寄存器和寄存器进行双字交换 XCHG ESI,MEM_DWORD ;寄存器和内存进行双字交换
(7) MOV CR4,R32
(8) MOV R32,CR4
浮点运算指令及汇编语言程序设计
浮点运算指令
浮点运算指令及汇编语言程序设计
浮点数据格式
格式: 尾数 移码指数 符号位
类型:
短浮点数,32位单精度——1位符号,8位指数,23位尾数 长浮点数,64位双精度——1位符号,11位指数,52位尾数 临时浮点数,80位扩展精度——1位符号,15位指数,64位尾数
第三章 80X86指令系统(补)
1 80x86的寻址方式和指令系统
一 二 三 四
80x86的寻址方式 80x86的指令系统 浮点运算指令简介 MMX技术简介
一 80x86的寻址方式
(1) 直接寻址方式
如:
INC WORD PTR [500]
;字的有效地址为500
(2) 寄存器间接寻址方式
如:
MOV [ECX],EDX ;ECX指出有效地址
二 80x86的指令系统
LOCK前缀和可使用LOCK前缀的指令 特点: 32位系统不允许LOCK前缀用于重复串 操作指令 对可以接受LOCK前缀的指令作了限制
二 80x86的指令系统
处理器控制和特权指令
除HLT、WAIT、ESC、NOP外,增加了: 与控制寄存器有关的传送指令, 如: MOV CRn,EAX ;往CRn中设置一个32位值,其 中CRn可为CR0、CR2、CR3 MOV EBX,CRn ;将CRn的值送寄存器,其中 CRn可为CR0、CR2或CR3
分别将:
全局描述符表寄存器
局部描述符表寄存器
中断描述符表寄存器 的内容送到存储器中
二 80x86的指令系统
LTR STR LAR LSL
LGDT/LLDT/LIDT
二 80x86的指令系统
VERR/VERW检测段类型指令 VERR检测一个选择子所对应的段是否可读 VERW检测一个选择子所对应的段是否可写 LMSW装入机器状态字指令 将存储器中2字节送到机器状态字MSW。
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构
•浮点数值寄存器 80位临时实数 R0 R1
R2
R3 R4 R5 R6
R7
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构
8个寄存器按堆栈方式使用,压栈时栈顶减1,出栈 时栈顶加1。栈顶用ST或用ST(0)表示,ST(n)表 示栈顶加n的寄存器
浮点数据格式
例:将-12.5转换成单精度浮点数
1 10000010 10010000000000000000000
C1 48 00 00 H 例:将浮点数431B4000H转换成十进制数 0 10000110 00110110100000000000000 1.00110110127= 10011011.01 =155.25
位处理指令
位处理指令包括:
位测试 BTS ,BTR, BTC, BT 位扫描 BSF, BSR
二 80x86的指令系统
位测试 位测试: 位测试置0: 位测试置1: 位测试取反: BT BTR BTS BTC 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数
测试目标操作数中由源操作数指定的位,将 其值送CF标志 MOV AX, 1FF0H BTS AX, 24