您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第9章 80x86的寻址方式与指令系统 > 【9.3.8 80x86的一般扩展指令系统】

9.3.8 80x86的一般扩展指令系统

 

9.3.8  80x86的一般扩展指令系统

3280x86微机存储器寻址空间大大扩展(可4GB64GB),操作数宽度也扩展至32位,指令功能进一步丰富,因此指令长度也有所扩展,达112个字节:12个字节操作码字段,02个字节寻址方式码字段,0124个字节的偏移量字段,0124个字节的立即数字段,不超过4个字节的前缀码段。

80x86指令集在基本集基础上扩展而来,依次是28616位处理器)、386486指令集,在代码级保持向上兼容。扩展主要表现在32位寻址和32位操作,还体现在指令种类增多、功能增强,如浮点数运算指令、操作系统型指令,指令操作数也扩展到3个等。

80x86常用扩展指令如表9-7所示。

9-7  80x86常用扩展指令

指令格式

主要功能及说明

MOVSX DstSrc

MOVZ DstSrc

Src符号位扩展,使其与Dst字长相同,再传送到DstDst1632位的RegMemSrc为不超过Dst字长的RegMemIm。其中,MOVSX表示有符号数1632位传送,MOVZ表示无符号数1632位传送

PUSH/POP

该指令表示操作数入栈/出栈。操作数可为1632位的RegMemIm仅入栈)

PUSHAPOPA

AXCXDXBXSPBPSIDI依次入栈/出栈

PUSHAD/POPAD

EAXECXEDXEBXESPEBPESIEDI依次依入栈/出栈

LFS DstSrc

LGS DstSrc

LSS DstSrc

48位地址指针送FSESI寄存器

48位地址指针送GSESI寄存器

48位地址指针送SSESP寄存器

续上表

指令格式

主要功能及说明

PUSHFD/POPFD

32位标志寄存器入栈/出栈

IN/OUT

在端口与EAXAXAL之间输入/输出32168位数据

ADD/ADC/SUB/SBB

32168位操作数加/减运算

MUL DstSre

IMUL DstSrc1Src2

32×32位:被乘数在EAX64位积在EDXEAX  SrcReg/Mem

DstSrc1×Sre2  DstReg8/16/32Src1Reg/MemSrc2Im

DIV DWORD

IDIV ECX

EDXEAX/DSDWORD

EDXEAX/ECX

CWDE

CDQ

AX的符号扩展到EAX的高位部分

EAX的符号扩展到EDX的所有位

SHLD DstSrc1Src2

SHRD DstSrc1Src2

Src2的次数将Src1左移到DstDst左移到CFSrc2不变

Src2的次数将Src1右移到DstDst右移到CFSrc2不变

<REP>MOVSD

<REPZ/REPNZ>CMPSD

<REPZ/REPNZ>SCASD

LODSD

<REP>STOSD

DSESI源串双字传送到目的串ESEDI

DSESI源串双字与目的串ESEDI比较

在目的串ESEDI中搜索EAX的内容

DSESI指定的串双字元素装入EAX

EAX中的双字送入ESEDI目的串中

<REP>INSB

<REP>INSW

<REP>INSD

DX指向的端口读入字节串送入ESDI

DX指向的端口偶数)读入字串送入ESDI

DX指向的端口4的整数倍)读入双字串送入ESDI

<REP>OUTSB

<ReP>OUTSW

<REP>OUTSD

DSSI源串中的字节串向DX指向的端口输出

DSSI源串中的字串向DX指向的端口偶数)输出

DSSI源串中的双字串向DX指向的端口4的整数倍)输出

JECXZ  TARGET

ECX=0则转移

CALL<EBX>

CALL FAR PTR<ESI>

段内间接32位的调用

段间间接32位的调用

IRETD

中断返回,从栈中依次弹出CSEIPEFLAGS寄存器内容

BT DstSrc

BTC DstSrc

BTS DstSrc

BTR DstSrc

源操作数指定目标操作数的某一位移入CF并进行测试,目标操作数不变

类似BT,对指定的位测试,测完后将指定位变反

类似BT,对指定的位测试,测完后将指定位置1

类似BT,对指定的位测试,测完后将指定位清零

DstRegMem操作数,SrcRegIm作为串下标)

BSF DstSrc

 

BSR DstSrc

对源操作数从最低位D0进行扫描,扫描到第一个1,将其位号送入目标操作数。若位串全为0,则ZF1,否则为0

对源操作数自最高位扫描,其他与BSF指令相同

续上表

指令格式

主要功能及说明

BSWAP Reg32

XADD DstSrc

CMPXCHC DstSrc

INVD

WBINVD

 

INVLPG

32位通用寄存器的最高字节与最低字节、次高字节与次低字节进行交换源与目标先互换,再相加送目标,DstSrc等长,为32/16/8位的RegMemSrcAcc进行比较,若相等则DstSrc,否则AccDst Acc可为EAXAXAL

刷新片内cache,并分配一个专用总线周期刷新外部cache

刷新片内cache,并分配一个专用总线周期将外部cache内容回写到主存,再在此后一个总线周期刷新外部cache

TLB中某一项作废

FCLEX/FNCLEX

FINIT/FINIT

FLDCW

FLDENV

FSTCW/FNSTCW

FSTENV/FNSTENV

FSTSW/FNSTSW

FSTSW AX/FNSTSW AX

清除异常清除所有事故/中断请求/忙标志)

初始化处理器

装载控制字

装载环境

存储控制字

存储环境

存储状态字

把状态字存入AX

BOUND Op1Op2

 

ENTER Op1Op2

 

LEAVE

数组边界检查:验证Op1中的操作数是否在Op2所指向的两个界限内,Op1Reg16Reg32Op2Mem操作数数组名)

进入过程类似C语言的CRET),为过程参数建立一个堆栈区:Op1为堆栈字节数,Op2为过程嵌套层数

撤销ENTER操作,与后继指令RET N一起清除被调用过程所使用的堆栈参数

F2XM

FCOS

FPATAN

FPTAN

FSIN

FSINCOS

FYL2X

FYL2XP1

计算2x-1

余弦

局部反正切

局部正切

正弦

正弦/余弦

计算Y×log2X

计算Y×log2X+1

注:<……>内为重复前缀,表示重复进行字符串操作所有操作自动修改ESIEDIECX

32位的80x86微机须在保护方式下才能实现对4GB的存储器空间寻址。保护方式牵涉到各类描述符和相关寄存器,以及CPU内部的控制/调试、任务寄存器。与保护方式有关的主要指令如表9-8所示。

9-8  与保护方式有关的主要指令

指令格式

主要功能和操作数

LGDT Src

装载Src所指定的6个字节到全局描述符表寄存器GDTSrcMem操作数

续上表

指令格式

主要功能和操作数

LIDT  Src

装载Src所指定的6个字节到中断描述符表寄存器IDTSrcMem操作数

SGDT  Dst

存储GDT内容到Dst所指定的6个字节缓冲区,DstMem操作数

SIDT Dst

存储IDT内容到Dst所指定的6个字节缓冲区,DstMem操作数

LTR  Src

装载Src内容到任务寄存器并置任务状态位为“忙”,SrcRegMem操作数

STR Dst

存储任务寄存器内容到DstDstRegMem操作数

LMSW Src

装载Src内容到机器状态字MSW中,SrcRegMem操作数

SMSW Dst

存储机器状态字MSW内容到DstDstRegMem操作数

LLDT Src

装载Src指定的局部描述符或空选择符)到局部描述符表LDTSrcRegMem操作数

SIDT Dst

存储局部描述符表内容到DstDstRegMem操作数

MOV CRnSrc

Src内容送到控制寄存器CRnn=023),SrcReg32

MOV DRnSrc

Src内容送到调试寄存器DRnn=0123),SrcReg32

MOV TRnSrc

Src内容送到任务寄存器TRnn=07),SrcReg32

MOV DstCRn

将控制寄存器CRnn=023)内容送到DstDstReg32

MOV DstDRn

将调试寄存器DRnn=0123)内容送到DstDstReg32

MOV DstTRn

将任务寄存器CRnn=07)内容送到DstDstReg32

CLTS

清除机器状态字MSW中任务转换标志

LAR DstSrc

装载访问权限

LSI DstSrc

装载段界限

VERR Dst

验证段的可读性

VERW Dst

验证段的可写性

ARPL DstSrc

调整选择符的特权级