第三章 80x86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... ·...

77
第三章 80X86指令系统(补)

Upload: others

Post on 31-Jan-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

第三章 80X86指令系统(补)

Page 2: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

1 80x86的寻址方式和指令系统

一 80x86的寻址方式

二 80x86的指令系统

三 浮点运算指令简介

四 MMX技术简介

Page 3: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

(1) 直接寻址方式

如:

INC WORD PTR [500]

;字的有效地址为500

(2) 寄存器间接寻址方式

如:

MOV [ECX],EDX ;ECX指出有效地址

一 80x86的寻址方式

Page 4: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

一 80x86的寻址方式

(3) 基址寻址方式

如: MOV ECX,[EAX+24]

;由EAX中内容加24组成有效地址

(4) 变址寻址方式

如: ADD EAX,[ESI],5

;ESI的内容加5组成有效地址

Page 5: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

一 80x86的寻址方式

(5) 带比例因子的变址寻址方式

如:

IMUL EBX,[ESI*4+7]

(6) 基址变址寻址方式

如:

MOV EAX,[ESI][EBX]

Page 6: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

一 80x86的寻址方式

(7) 基址加带比例因子的变址寻址方式

如:

MOV ECX,[EDI*8][EAX]

(8) 带位移量的基址加变址寻址方式

如:

ADD EDX,[ESI][EBP+100H]

Page 7: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

一 80x86的寻址方式

(9) 带位移量的基址加带比例因子的变址寻址方式

如:

MOV EAX,[EDI*4][EBP+80]

;EDI的内容乘4,加EBP的内容,再加80即有效地址

Page 8: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

1 80386指令

80386的指令系统比之8086:

扩展了数据宽度

对存储器寻址方式也进行了扩充

增加了少量指令。

Page 9: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

数据传送指令

(1)通用传送指令 MOVZX和MOVSX

如:MOVZX AX,BL

MOVSX AX,BL

(2)交换指令XCHG

如:

XCHG EAX,EDI ;寄存器和寄存器进行双字交换

XCHG ESI,MEM_DWORD

;寄存器和内存进行双字交换

二 80x86的指令系统

Page 10: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(3)PUSH

还可将立即数推入堆栈

(4)PUSHAD

将EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI推入堆栈

Page 11: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(2) 累加器传送指令

包括:

IN

OUT

XLAT

XLATB

Page 12: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(3) 标志传送指令

在LAHF、SAHF、PUSHF、POP基础上,增加了:

PUSHFD

POPFD

Page 13: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(4) 地址传送指令实现6字节地址指针的传送

如:

LDS EBX,MEMLOC

LES EDI,MEMLOC

LSS ESP,MEMLOC

LFS EDX,MEMLOC

LGS ESI,MEMLOC

Page 14: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(5) 数据类型转换指令

在CBW、CWD指令外,增加了2条指令。

即:

CWDE ;将AX中的字进行高位扩展,

成为EAX中的双字

CDQ ;将EAX中的双字进行高位扩展,得到EDX和EAX中的4字

Page 15: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

算术运算指令

① 乘法运算指令 MUL、IMUL

功能:

AL、AX或EAX存放操作数并保存乘积低半部分,另一个操作数为寄存器和存储器,也可为立即数

乘积的高半部分在AH或EAX。

Page 16: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

②除法运算指令DIV和IDIV

功能:

用AX、DX+AX或者EDX+EAX存放被除数,

除数的长度为被除数的一半,

商放在原存放被除数的寄存器的低半部分,余数放在高半部分。

Page 17: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

逻辑指令运算指令

移位指令

Page 18: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

串操作指令包括(B/W/D)MOVS CMPS SCASLODS STOS此外,增加了

INSOUTS

Page 19: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

转移、循环和调用指令

条件转移指令的相对转移地址不受范围限制

Page 20: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

循环控制指令包括:

LOOP

LOOPZ/LOOPE

LOOPNZ/LOOPNE

Page 21: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

中断指令中断指令包括:

INT n INTO IRET

增加了

IRETD

功能:从堆栈中先弹出4个字节装入EIP,再弹出2个字节装入CS。

Page 22: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

标志指令

标志指令包括:

CLC STC CMC

CLD STD

CLI STI

Page 23: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

位处理指令位处理指令包括:

位测试

BTS ,BTR, BTC, BT

位扫描

BSF, BSR

Page 24: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

位测试位测试: BT 目标操作数,源操作数位测试置0: BTR 目标操作数,源操作数位测试置1: BTS 目标操作数,源操作数位测试取反: BTC 目标操作数,源操作数

测试目标操作数中由源操作数指定的位,将其值送CF标志

MOV AX, 1FF0H

BTS AX, 24

二 80x86的指令系统

Page 25: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

位扫描向前位扫描: BSF 目标操作数,源操作数向后位扫描: BSR 目标操作数,源操作数

对源操作数进行扫描,将遇到的第一个1所在的位置送目标操作数,并将ZF清0。如果源操作数为0,则目标操作数不变,且ZF置1

MOV EAX, 60000000H

BSF EBX,EAX

二 80x86的指令系统

Page 26: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

LOCK前缀和可使用LOCK前缀的指令

特点:

32位系统不允许LOCK前缀用于重复串操作指令

对可以接受LOCK前缀的指令作了限制

二 80x86的指令系统

Page 27: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

处理器控制和特权指令除HLT、WAIT、ESC、NOP外,增加了:与控制寄存器有关的传送指令,

如:MOV CRn,EAX ;往CRn中设置一个32位值,其

中CRn可为CR0、CR2、CR3MOV EBX,CRn ;将CRn的值送寄存器,其中

CRn可为CR0、CR2或CR3

二 80x86的指令系统

Page 28: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

与调试寄存器有关的传送指令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的指令系统

Page 29: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

支持高级语言的指令BOUND如:

BOUND EBX,MEM_DWORD

ENTER如:

ENTER 48,3

LEAVE

二 80x86的指令系统

Page 30: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

系统设置和测试指令

CLTS

功能:清除机器状态字中的任务切换标志TS。

SGDT/SLDT/SIDT 分别将:

全局描述符表寄存器

局部描述符表寄存器

中断描述符表寄存器

的内容送到存储器中

二 80x86的指令系统

Page 31: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

LTR

STR

LAR

LSL

LGDT/LLDT/LIDT

二 80x86的指令系统

Page 32: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

VERR/VERW检测段类型指令

VERR检测一个选择子所对应的段是否可读

VERW检测一个选择子所对应的段是否可写

LMSW装入机器状态字指令

将存储器中2字节送到机器状态字MSW。

Page 33: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

SMSW存储机器状态字指令

将机器状态字MSW存入内存2字节中。

ARPL调整请求特权级指令

这条指令调整选择子的RPL字段。

二 80x86的指令系统

Page 34: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

80486新增加的指令

(1) BSWAP r双字交换指令

将指定的32位寄存器中双字第31~24位与第7~0位交换,第23~16位与第15~8位交换。

(2) CMPXCHG r/m, r 32位比较指令

将目的寄存器或存储器中数和累加器中数比较,如等则ZF为1,并将源操作数送目的操作数;否则ZF为0,并将目的操作数送累加器。

Page 35: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(3) XADD r/m, r 字交换加法指令

将源操作数和目的操作数相加,结果送目的操作数处,而目的操作数送源操作数处。

(4) INVD Cache清除指令

将片内Cache中的内容清除,并使外部电路清除外部Cache中的内容。

Page 36: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(5) WBINVD Cache清除和回写指令

将片内Cache中的内容清除,并外部电路将外部Cache中的数据回写到主存,再清除外部Cache中的内容。

(6) INVLPG m TLB项清除指令

使转换检测缓冲器TLB的32个表项中用m指出的当前项清除。

Page 37: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

Pentium新增加的指令(1) CMPXCHG8B m 8字节即64位比较指令

将EDX∶EAX中的8个字节与m所指的存储器中的8个字节比较。

(2) RDTSC读时钟周期数指令

读取记录时钟周期数的64位计数器的值送EDX:EAX。

(3) CPUID读取CPU的标识等有关信息

获得Pentium处理器的类型等有关信息。

Page 38: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

二 80x86的指令系统

(4) RDMSR读取模式专用寄存器的指令

Pentium模式专用寄存器中的值。

(5) WRMSR 写入模式专用寄存器的指令

将EDX∶EAX中64位数写入模式专用寄存器。

(6) RSM 复位到系统管理模式

(7) MOV CR4,R32

(8) MOV R32,CR4

Page 39: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点运算指令及汇编语言程序设计

浮点运算指令

Page 40: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点运算指令及汇编语言程序设计

浮点数据格式

类型:

短浮点数,32位单精度——1位符号,8位指数,23位尾数长浮点数,64位双精度——1位符号,11位指数,52位尾数临时浮点数,80位扩展精度——1位符号,15位指数,64位尾数

格式:

移码指数尾数

符号位

Page 41: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点运算指令及汇编语言程序设计

符号位 阶码 有 效 数 字

02331

符号位 阶码 有 效 数 字

05163

符号位 阶 码 有 效 数 字

06479

1

63

单精度数

双精度数

扩展精度数

浮点数据格式

阶码采用移码表示——实际阶码+偏置量:32位偏置量7FH

64位偏置量3FFH

80位偏置量3FFFH

Page 42: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点数据格式

例:将-12.5转换成单精度浮点数

例:将浮点数431B4000H转换成十进制数

1 10000010 10010000000000000000000

C1 48 00 00 H

0 10000110 00110110100000000000000

1.00110110127= 10011011.01 =155.25

浮点运算指令及汇编语言程序设计

Page 43: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点数定义伪指令

DD 11.2

DQ 11.2

DT 11.2

REAL4 11.2

REAL8 11.2

REAL10 11.2

MASM

浮点运算指令及汇编语言程序设计

Page 44: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点处理单元(FPU)的软件体系结构

8个80位的数值寄存器3个16位寄存器(控制寄存器、状态寄存器、标记寄存器)

5个错误指针寄存器

浮点运算指令及汇编语言程序设计

Page 45: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点运算指令及汇编语言程序设计

浮点处理单元(FPU)的软件体系结构

•浮点数值寄存器

80位临时实数 R0

R1

R2

R3

R4

R5

R6

R7

Page 46: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

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

浮点运算指令及汇编语言程序设计

Page 47: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点指令简介

约定:real32:内存中的32位短实数real64:内存中的64位长实数mem16:内存中的16位整数mem32:内存中的32位整数mem64:内存中的64位整数memBCD:内存中的BCD码st(j):第j个浮点寄存器st(0):栈顶

浮点运算指令及汇编语言程序设计

Page 48: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•数据装入

内存中的浮点数装入栈顶—— FLD

FLD real32/real64

浮点寄存器的值装入栈顶——FLD

FLD st(j)

内存中的整数装入栈顶——FILD

FILD mem16/mem32/mem64

内存中的BCD码装入栈顶——FBLD

FBLD memBCD

浮点指令简介

浮点运算指令及汇编语言程序设计

Page 49: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•装入常数

FLDZ ;装入0.0

FLD1 ;装入1.0

FLDPI ;装入π

FLDL2E ;装入log2(e)

FLDL2T ;装入log2(10)

FLDLG2 ;装入log10(2)

FLDLN2 ;装入loge(10)

浮点指令简介

浮点运算指令及汇编语言程序设计

Page 50: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•栈顶数据存入内存(不改变栈顶)

存为实数FST real32/real64

存为整数FIST mem16/mem32

浮点指令简介

浮点运算指令及汇编语言程序设计

Page 51: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点指令简介

•数据弹出(同时改变栈顶)

弹出存为浮点数FSTP real32/real64

弹出存为整数FISTP mem16/mem32/mem64

弹出存为BCD

FBSTP memBCD

浮点运算指令及汇编语言程序设计

Page 52: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点指令简介•加法运算

浮点加法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

浮点运算指令及汇编语言程序设计

Page 53: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•减法运算浮点减法

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符号取反

浮点运算指令及汇编语言程序设计

Page 54: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•乘法

浮点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

浮点运算指令及汇编语言程序设计

Page 55: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•除法

浮点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

浮点运算指令及汇编语言程序设计

Page 56: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•比较

浮点FCOM real32 ;st与real32

FCOM real64 ;st与real64

整数FICOM mem16 ;st与mem16

FICOM mem32 ;st与mem32

FTST ;st与0.0

比较结果反应在标志寄存器中

浮点运算指令及汇编语言程序设计

Page 57: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

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

•比较

浮点运算指令及汇编语言程序设计

Page 58: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•超越函数

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

浮点运算指令及汇编语言程序设计

Page 59: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

•处理器控制指令

FSTSW mem16;状态标志存入内存。

FSTSW AX ;状态标志存入CPU AX寄存器

浮点运算指令及汇编语言程序设计

Page 60: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

浮点运算指令及汇编语言程序设计

Page 61: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX技术简介

Page 62: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX技术的意义

MMX(多媒体增强指令集)的产生目的,

是加快影像、语音、通信等信号的处理。这些信息有其处理上的基本特性,如需要使用到大量的矩阵运算、多重数据的同时包装等。MMX技术通过新增设的57条控制指令,可

以将处理数据的方式从以前多条指令到现在的单条指令就可以解决,因此程序的执行效率可以提高,使CPU的功能更强,来加快CPU处理的效率。

Page 63: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX技术的意义

SIMD单指令流多数据流

PADDB mm1, mm2

矢量相加,每项一个字节

Page 64: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX硬件结构

Page 65: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX硬件结构

MMX执行流水线

Page 66: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX硬件结构

MMX的执行单元

Page 67: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

•MMX的寄存器结构

MMX的软件体系结构

Page 68: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

直接映射到8个浮点寄存器(直接访问)

为了降低处理器的复杂度,尽量节约硬件,MMX执行部件与FPU(浮点部件)以共享的形式使用FPU的寄存器。MMX的8个64位寄存器实际上占用原FPU的浮点寄存器硬件。

•MMX的寄存器结构

MMX的软件体系结构

Page 69: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX的数据类型

为了适合多媒体和通信处理,MMX增加了相应的数据结构。这些数据结构包括:

字节包装字包装双字包装四字包装

Page 70: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX指令简介

•饱和运算

饱和运算主要是针对多媒体中的颜色运算。在多媒体的颜色值得算术运算中,计算结果超出颜色值的最大数是没有意义的,因此要将超过最大颜色值的结果调节到最大颜色值。

PADDSW mm0, m64

Page 71: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

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

Page 72: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX指令简介

•算术运算

PADDB/ PADDW/ PADDD——数据组相加PADDSB/ PADDSW——饱和方式数据组相加

…...

Page 73: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX指令简介

•算术运算

除通常的4则运算外,还增加了多数据流的乘加运算。

该指令将两个字包装的操作数的对应字进行乘加运算,并将最后结果存入一个双字包装的操作数内。

PMADDWD mm1, mm2

Page 74: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

•并行比较

MMX指令简介

PCMPGTW mm1, mm2

Page 75: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX指令简介

•数据转换

该类指令主要完成按照给定的方式(如饱和处理等)实现不同数据包装之间的转换

PACKSSDW mm1, mm2

Page 76: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

MMX技术简介

MMX指令简介

•逻辑运算

该类指令主要完成64位操作数之间的逻辑运算,使在通常处理器中要多条指令完成的操作一次执行完,由于在图像处理中存在大量的并行数据操作,这种预算可大大提高图像处理的速度。

Page 77: 第三章 80X86指令系统(补)staff.ustc.edu.cn/~zqfu/computer%20and%20interface/... · drn可为dr0~dr3、dr6、dr7 mov ebx,dr3;将调试寄存器dr3的值送到1个

例如,利用逻辑运算可很容易的实现两幅图像的合成。

MMX技术简介

MMX指令简介•逻辑运算