当前位置:文档之家› 第三章 80x86指令系统

第三章 80x86指令系统


(3) CPUID读取CPU的标识等有关信息 获得Pentium处理器的类型等有关信息。
二 80x86的指令系统
(4) RDMSR读取模式专用寄存器的指令 Pentium模式专用寄存器中的值。 (5) WRMSR 写入模式专用寄存器的指令
将EDX∶EAX中64位数写入模式专用寄存器。
(6) RSM 复位到系统管理模式
二 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
(2) CMPXCHG r/m, r 32位比较指令 将目的寄存器或存储器中数和累加器中数比较, 如等则ZF为1,并将源操作数送目的操作数;否 则ZF为0,并将目的操作数送累加器。
二 80x86的指令系统
(3) XADD r/m, r 字交换加法指令 将源操作数和目的操作数相加,结果 送目的操作数处,而目的操作数送源 操作数处。 (4) INVD Cache清除指令
一 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]
二 80x86的指令系统
逻辑指令
运算指令 移位指令
二 80x86的指令系统
串操作指令 包括(B/W/D) MOVS CMPS SCAS LODS STOS
此外,增加了
INS OUTS
二 80x86的指令系统 转移、循环和调用指令 条件转移指令的相对转 移地址不受范围限制
二 80x86的指令系统 循环控制指令包括: LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE
Байду номын сангаас
二 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
二 80x86的指令系统
算术运算指令 ① 乘法运算指令 MUL、IMUL 功能:
AL、AX或EAX存放操作数并保存乘积低半部分, 另一个操作数为寄存器和存储器,也可为立 即数
乘积的高半部分在AH或EAX。
二 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个错误指针寄存器
使转换检测缓冲器TLB的32个表项中用m 指出的当前项清除。
二 80x86的指令系统
Pentium新增加的指令
(1) CMPXCHG8B m 8字节即64位比较指令 将EDX∶EAX中的8个字节与m所指的存储器中的 8个字节比较。
(2) RDTSC读时钟周期数指令 读取记录时钟周期数的 64 位计数器的值送 EDX : EAX。
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):栈顶
(7) MOV CR4,R32
(8) MOV R32,CR4
浮点运算指令及汇编语言程序设计
浮点运算指令
浮点运算指令及汇编语言程序设计
浮点数据格式
格式: 尾数 移码指数 符号位
类型:
短浮点数,32位单精度——1位符号,8位指数,23位尾数 长浮点数,64位双精度——1位符号,11位指数,52位尾数 临时浮点数,80位扩展精度——1位符号,15位指数,64位尾数
二 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的指令系统
(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字
与测试寄存器有关的传送指令
MOV MOV
二 80x86的指令系统
支持高级语言的指令
BOUND 如: BOUND EBX,MEM_DWORD ENTER 如: ENTER 48,3 LEAVE
二 80x86的指令系统
系统设置和测试指令
CLTS
功能:清除机器状态字中的任务切换标志TS。
SGDT/SLDT/SIDT
二 80x86的指令系统
中断指令
中断指令包括: INT n 增加了 IRETD 功能:从堆栈中先弹出4个字节装入EIP,再弹 出2个字节装入CS。 INTO IRET
二 80x86的指令系统
标志指令 标志指令包括: CLC STC CMC CLD STD CLI STI
二 80x86的指令系统
浮点数据格式
例:将-12.5转换成单精度浮点数
1 10000010 10010000000000000000000
C1 48 00 00 H 例:将浮点数431B4000H转换成十进制数 0 10000110 00110110100000000000000 1.00110110127= 10011011.01 =155.25
将片内Cache中的内容清除,并使外部 电路清除外部Cache中的内容。
二 80x86的指令系统
(5) WBINVD Cache清除和回写指令 将片内 Cache 中的内容清除,并外部电 路将外部 Cache 中的数据回写到主存, 再清除外部Cache中的内容。
(6) INVLPG m TLB项清除指令
一 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即有效地址
浮点运算指令及汇编语言程序设计
浮点指令简介
•装入常数 FLDZ FLD1 FLDPI FLDL2E FLDL2T FLDLG2 FLDLN2 ;装入0.0 ;装入1.0 ;装入π ;装入log2(e) ;装入log2(10) ;装入log10(2) ;装入loge(10)
浮点运算指令及汇编语言程序设计
浮点指令简介
•数据装入
内存中的浮点数装入栈顶—— FLD FLD real32/real64 浮点寄存器的值装入栈顶——FLD FLD st(j) 内存中的整数装入栈顶 ——FILD FILD mem16/mem32/mem64 内存中的BCD码装入栈顶 ——FBLD FBLD memBCD
二 80x86的指令系统
SMSW存储机器状态字指令 将机器状态字MSW存入内存2字节中。 ARPL调整请求特权级指令 这条指令调整选择子的RPL字段。
二 80x86的指令系统
80486新增加的指令 (1) BSWAP r双字交换指令
将指定的32位寄存器中双字第31~24位与第7~ 0位交换,第23~16位与第15~8位交换。
位处理指令
位处理指令包括:
位测试 BTS ,BTR, BTC, BT 位扫描 BSF, BSR
二 80x86的指令系统
位测试 位测试: 位测试置0: 位测试置1: 位测试取反: BT BTR BTS BTC 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数
相关主题