第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... ·...
Transcript of 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... ·...
第三章 80X86指令系统(补)
1 80x86的寻址方式和指令系统
一 80x86的寻址方式
二 80x86的指令系统
三 浮点运算指令简介
四 MMX技术简介
(1) 直接寻址方式
如:
INC WORD PTR [500]
;字的有效地址为500
(2) 寄存器间接寻址方式
如:
MOV [ECX],EDX ;ECX指出有效地址
一 80x86的寻址方式
一 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的寻址方式
(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的指令系统
1 80386指令
80386的指令系统比之8086:
扩展了数据宽度
对存储器寻址方式也进行了扩充
增加了少量指令。
数据传送指令
(1)通用传送指令 MOVZX和MOVSX
如:MOVZX AX,BL
MOVSX AX,BL
(2)交换指令XCHG
如:
XCHG EAX,EDI ;寄存器和寄存器进行双字交换
XCHG ESI,MEM_DWORD
;寄存器和内存进行双字交换
二 80x86的指令系统
二 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
二 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字
二 80x86的指令系统
算术运算指令
① 乘法运算指令 MUL、IMUL
功能:
AL、AX或EAX存放操作数并保存乘积低半部分,另一个操作数为寄存器和存储器,也可为立即数
乘积的高半部分在AH或EAX。
二 80x86的指令系统
②除法运算指令DIV和IDIV
功能:
用AX、DX+AX或者EDX+EAX存放被除数,
除数的长度为被除数的一半,
商放在原存放被除数的寄存器的低半部分,余数放在高半部分。
二 80x86的指令系统
逻辑指令运算指令
移位指令
二 80x86的指令系统
串操作指令包括(B/W/D)MOVS CMPS SCASLODS STOS此外,增加了
INSOUTS
二 80x86的指令系统
转移、循环和调用指令
条件转移指令的相对转移地址不受范围限制
二 80x86的指令系统
循环控制指令包括:
LOOP
LOOPZ/LOOPE
LOOPNZ/LOOPNE
二 80x86的指令系统
中断指令中断指令包括:
INT n INTO IRET
增加了
IRETD
功能:从堆栈中先弹出4个字节装入EIP,再弹出2个字节装入CS。
二 80x86的指令系统
标志指令
标志指令包括:
CLC STC CMC
CLD STD
CLI STI
二 80x86的指令系统
位处理指令位处理指令包括:
位测试
BTS ,BTR, BTC, BT
位扫描
BSF, BSR
位测试位测试: BT 目标操作数,源操作数位测试置0: BTR 目标操作数,源操作数位测试置1: BTS 目标操作数,源操作数位测试取反: BTC 目标操作数,源操作数
测试目标操作数中由源操作数指定的位,将其值送CF标志
MOV AX, 1FF0H
BTS AX, 24
二 80x86的指令系统
位扫描向前位扫描: BSF 目标操作数,源操作数向后位扫描: BSR 目标操作数,源操作数
对源操作数进行扫描,将遇到的第一个1所在的位置送目标操作数,并将ZF清0。如果源操作数为0,则目标操作数不变,且ZF置1
MOV EAX, 60000000H
BSF EBX,EAX
二 80x86的指令系统
LOCK前缀和可使用LOCK前缀的指令
特点:
32位系统不允许LOCK前缀用于重复串操作指令
对可以接受LOCK前缀的指令作了限制
二 80x86的指令系统
处理器控制和特权指令除HLT、WAIT、ESC、NOP外,增加了:与控制寄存器有关的传送指令,
如:MOV CRn,EAX ;往CRn中设置一个32位值,其
中CRn可为CR0、CR2、CR3MOV EBX,CRn ;将CRn的值送寄存器,其中
CRn可为CR0、CR2或CR3
二 80x86的指令系统
与调试寄存器有关的传送指令MOV DRn,EAX ;往调试寄存器DRn设置初值,
DRn可为DR0~DR3、DR6、DR7
MOV EBX,DR3;将调试寄存器DR3的值送到1个
寄存器
与测试寄存器有关的传送指令MOV TRn,EAX ;往测试寄存器送一个32位值,
TRn可为TR6或TR7
MOV EBX,TRn;将测试寄存器TRn的值送到
寄存器,这里为EBX
二 80x86的指令系统
支持高级语言的指令BOUND如:
BOUND EBX,MEM_DWORD
ENTER如:
ENTER 48,3
LEAVE
二 80x86的指令系统
系统设置和测试指令
CLTS
功能:清除机器状态字中的任务切换标志TS。
SGDT/SLDT/SIDT 分别将:
全局描述符表寄存器
局部描述符表寄存器
中断描述符表寄存器
的内容送到存储器中
二 80x86的指令系统
LTR
STR
LAR
LSL
LGDT/LLDT/LIDT
二 80x86的指令系统
二 80x86的指令系统
VERR/VERW检测段类型指令
VERR检测一个选择子所对应的段是否可读
VERW检测一个选择子所对应的段是否可写
LMSW装入机器状态字指令
将存储器中2字节送到机器状态字MSW。
SMSW存储机器状态字指令
将机器状态字MSW存入内存2字节中。
ARPL调整请求特权级指令
这条指令调整选择子的RPL字段。
二 80x86的指令系统
二 80x86的指令系统
80486新增加的指令
(1) BSWAP r双字交换指令
将指定的32位寄存器中双字第31~24位与第7~0位交换,第23~16位与第15~8位交换。
(2) CMPXCHG r/m, r 32位比较指令
将目的寄存器或存储器中数和累加器中数比较,如等则ZF为1,并将源操作数送目的操作数;否则ZF为0,并将目的操作数送累加器。
二 80x86的指令系统
(3) XADD r/m, r 字交换加法指令
将源操作数和目的操作数相加,结果送目的操作数处,而目的操作数送源操作数处。
(4) INVD Cache清除指令
将片内Cache中的内容清除,并使外部电路清除外部Cache中的内容。
二 80x86的指令系统
(5) WBINVD Cache清除和回写指令
将片内Cache中的内容清除,并外部电路将外部Cache中的数据回写到主存,再清除外部Cache中的内容。
(6) INVLPG m TLB项清除指令
使转换检测缓冲器TLB的32个表项中用m指出的当前项清除。
二 80x86的指令系统
Pentium新增加的指令(1) CMPXCHG8B m 8字节即64位比较指令
将EDX∶EAX中的8个字节与m所指的存储器中的8个字节比较。
(2) RDTSC读时钟周期数指令
读取记录时钟周期数的64位计数器的值送EDX:EAX。
(3) CPUID读取CPU的标识等有关信息
获得Pentium处理器的类型等有关信息。
二 80x86的指令系统
(4) RDMSR读取模式专用寄存器的指令
Pentium模式专用寄存器中的值。
(5) WRMSR 写入模式专用寄存器的指令
将EDX∶EAX中64位数写入模式专用寄存器。
(6) RSM 复位到系统管理模式
(7) MOV CR4,R32
(8) MOV R32,CR4
浮点运算指令及汇编语言程序设计
浮点运算指令
浮点运算指令及汇编语言程序设计
浮点数据格式
类型:
短浮点数,32位单精度——1位符号,8位指数,23位尾数长浮点数,64位双精度——1位符号,11位指数,52位尾数临时浮点数,80位扩展精度——1位符号,15位指数,64位尾数
格式:
移码指数尾数
符号位
浮点运算指令及汇编语言程序设计
符号位 阶码 有 效 数 字
02331
符号位 阶码 有 效 数 字
05163
符号位 阶 码 有 效 数 字
06479
1
63
单精度数
双精度数
扩展精度数
浮点数据格式
阶码采用移码表示——实际阶码+偏置量:32位偏置量7FH
64位偏置量3FFH
80位偏置量3FFFH
浮点数据格式
例:将-12.5转换成单精度浮点数
例:将浮点数431B4000H转换成十进制数
1 10000010 10010000000000000000000
C1 48 00 00 H
0 10000110 00110110100000000000000
1.00110110127= 10011011.01 =155.25
浮点运算指令及汇编语言程序设计
浮点数定义伪指令
DD 11.2
DQ 11.2
DT 11.2
REAL4 11.2
REAL8 11.2
REAL10 11.2
MASM
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构
8个80位的数值寄存器3个16位寄存器(控制寄存器、状态寄存器、标记寄存器)
5个错误指针寄存器
浮点运算指令及汇编语言程序设计
浮点运算指令及汇编语言程序设计
浮点处理单元(FPU)的软件体系结构
•浮点数值寄存器
80位临时实数 R0
R1
R2
R3
R4
R5
R6
R7
8个寄存器按堆栈方式使用,压栈时栈顶减1,出栈时栈顶加1。栈顶用ST或用ST(0)表示,ST(n)表示栈顶加n的寄存器
浮点处理单元(FPU)的软件体系结构
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):栈顶
浮点运算指令及汇编语言程序设计
•数据装入
内存中的浮点数装入栈顶—— FLD
FLD real32/real64
浮点寄存器的值装入栈顶——FLD
FLD st(j)
内存中的整数装入栈顶——FILD
FILD mem16/mem32/mem64
内存中的BCD码装入栈顶——FBLD
FBLD memBCD
浮点指令简介
浮点运算指令及汇编语言程序设计
•装入常数
FLDZ ;装入0.0
FLD1 ;装入1.0
FLDPI ;装入π
FLDL2E ;装入log2(e)
FLDL2T ;装入log2(10)
FLDLG2 ;装入log10(2)
FLDLN2 ;装入loge(10)
浮点指令简介
浮点运算指令及汇编语言程序设计
•栈顶数据存入内存(不改变栈顶)
存为实数FST real32/real64
存为整数FIST mem16/mem32
浮点指令简介
浮点运算指令及汇编语言程序设计
浮点指令简介
•数据弹出(同时改变栈顶)
弹出存为浮点数FSTP real32/real64
弹出存为整数FISTP mem16/mem32/mem64
弹出存为BCD
FBSTP memBCD
浮点运算指令及汇编语言程序设计
浮点指令简介•加法运算
浮点加法FADD real32 ; st+real32 st
FADD real64 ; st+real64 st
FADD st(j) ; st+st(j)à st
整数加法FIADD mem16 ; st+mem16 st
FIADD mem32 ; st+mem32 st
FADD ;st+st(1) st
FADD st,st(j) ;st+st(j) st
FADD st(j),st ;st(j)+st st
浮点运算指令及汇编语言程序设计
•减法运算浮点减法
FSUB real32 ; st-real32 st
FSUB real64 ; st-real64 st
FSUB st(j) ; st-st(j) st
整数减法FISUB mem16 ; st-mem16 st
FISUB mem32 ; st-mem32 st
FSUB ;st-st(1) st
FSUB st,st(j) ;st-st(j) st
FSUB st(j),st ; st(j) - st st
FCHS ;st符号取反
浮点运算指令及汇编语言程序设计
•乘法
浮点FMUL real32 ;st×real32 st
FMUL real64 ;st×real64 st
FMUL st(j) ;st×st(j) st
整数FIMUL mem16 ;st×mem16 st
FIMUL mem32 ;st×mem32 st
FMUL ;st×st(1) st
FMUL st,st(j) ;st×st(j) st
FMUL st(j),st ;st(j) ×st st
浮点运算指令及汇编语言程序设计
•除法
浮点FDIV real32 ;st/real32 st
FDIV real64 ;st/real64 st
FDIV st(j) ;st/st(j) st
整数FIDIV mem16 ;st/mem16 st
FIDIV mem32 ;st/mem32 st
FDIV ;st(1) /st st
FDIV st,st(j) ;st/st(j) st
FDIV st(j),st ;st(j) /st st
浮点运算指令及汇编语言程序设计
•比较
浮点FCOM real32 ;st与real32
FCOM real64 ;st与real64
整数FICOM mem16 ;st与mem16
FICOM mem32 ;st与mem32
FTST ;st与0.0
比较结果反应在标志寄存器中
浮点运算指令及汇编语言程序设计
C3(14) C2(10) C0(8)
St > op 0 0 0
St < op 0 0 1
St = op 1 0 0
FLD x ;x st
FTST ;比较st与0.0
FSTSW f ;X87标志寄存器的值存入内存变量f
FWAIT ;等待存入操作完成MOV AX, f
AND AX, 0100H ;测试C0(bit8)
JNE less ;ZF=0,即C0=1, st(=x) < 0.0
•比较
浮点运算指令及汇编语言程序设计
•超越函数
FSIN ;计算st(任意弧度)的正弦。计算后,st=1,st(1)为正弦值。
FCOS ;计算st(任意弧度)的余弦。计算后,st=1,st(1)为余弦值。
FSINCOS;计算st(任意弧度)的正弦和余弦。计算后,st为余弦值,st(1)为正弦值。
FPTAN ;计算st(任意弧度)的正切。计算后,st=1,st(1)为正切值。
FSQRT;计算st的平方根,结果在st
FABS;计算st的绝对值,结果在st
FPREM;计算st/st(1)的余数,结果在st
浮点运算指令及汇编语言程序设计
•处理器控制指令
FSTSW mem16;状态标志存入内存。
FSTSW AX ;状态标志存入CPU AX寄存器
浮点运算指令及汇编语言程序设计
浮点运算指令及汇编语言程序设计
MMX技术简介
MMX技术简介
MMX技术简介
MMX技术的意义
MMX(多媒体增强指令集)的产生目的,
是加快影像、语音、通信等信号的处理。这些信息有其处理上的基本特性,如需要使用到大量的矩阵运算、多重数据的同时包装等。MMX技术通过新增设的57条控制指令,可
以将处理数据的方式从以前多条指令到现在的单条指令就可以解决,因此程序的执行效率可以提高,使CPU的功能更强,来加快CPU处理的效率。
MMX技术简介
MMX技术的意义
SIMD单指令流多数据流
PADDB mm1, mm2
矢量相加,每项一个字节
MMX技术简介
MMX硬件结构
MMX技术简介
MMX硬件结构
MMX执行流水线
MMX技术简介
MMX硬件结构
MMX的执行单元
MMX技术简介
•MMX的寄存器结构
MMX的软件体系结构
MMX技术简介
直接映射到8个浮点寄存器(直接访问)
为了降低处理器的复杂度,尽量节约硬件,MMX执行部件与FPU(浮点部件)以共享的形式使用FPU的寄存器。MMX的8个64位寄存器实际上占用原FPU的浮点寄存器硬件。
•MMX的寄存器结构
MMX的软件体系结构
MMX技术简介
MMX的数据类型
为了适合多媒体和通信处理,MMX增加了相应的数据结构。这些数据结构包括:
字节包装字包装双字包装四字包装
MMX技术简介
MMX指令简介
•饱和运算
饱和运算主要是针对多媒体中的颜色运算。在多媒体的颜色值得算术运算中,计算结果超出颜色值的最大数是没有意义的,因此要将超过最大颜色值的结果调节到最大颜色值。
PADDSW mm0, m64
MMX技术简介
MMX指令简介
•数据传送指令
MOVD m32, mm0 31 0
MOVQ mm0, m64
b3 b2 b1 b0
63 32 31 0 b3 b2
b1 b0 m32
b3 b2 b1 b0
63 32 31 0 b3 b2
b1 b0 m64
b7 b6
b5 b4
b7 b6 b5 b4
MMX技术简介
MMX指令简介
•算术运算
PADDB/ PADDW/ PADDD——数据组相加PADDSB/ PADDSW——饱和方式数据组相加
…...
MMX技术简介
MMX指令简介
•算术运算
除通常的4则运算外,还增加了多数据流的乘加运算。
该指令将两个字包装的操作数的对应字进行乘加运算,并将最后结果存入一个双字包装的操作数内。
PMADDWD mm1, mm2
MMX技术简介
•并行比较
MMX指令简介
PCMPGTW mm1, mm2
MMX技术简介
MMX指令简介
•数据转换
该类指令主要完成按照给定的方式(如饱和处理等)实现不同数据包装之间的转换
PACKSSDW mm1, mm2
MMX技术简介
MMX指令简介
•逻辑运算
该类指令主要完成64位操作数之间的逻辑运算,使在通常处理器中要多条指令完成的操作一次执行完,由于在图像处理中存在大量的并行数据操作,这种预算可大大提高图像处理的速度。
例如,利用逻辑运算可很容易的实现两幅图像的合成。
MMX技术简介
MMX指令简介•逻辑运算