第三章 80x86指令系统

合集下载

第3章 80x86 指令系统和寻址方式

第3章 80x86 指令系统和寻址方式

MOV EAX,12345678H EAX,
需要注意的问题: 需要注意的问题:
需要注意的问 题!!
操作数直接出现在指令中, 1)操作数直接出现在指令中,但不能作为目的操作数出现在指令 这与高级语言中, 中 , 这与高级语言中, 赋值语句的左边不能是常量的要求是相 同的。 同的。 立即数可以写成:10进制(D) 进制( 进制(D 进制( 16进 2 )立即数可以写成 : 10 进制 (D) ,2 进制 (B ) ,8 进制( O ) ,16进 制(H)。 要注意立即数的表示范围: 3)要注意立即数的表示范围: 位带符号数表示范围: 127( FH) 128(80H 8位带符号数表示范围: 127(7FH)~ -128(80H) 16位带符号数表示范围 32767( FFFH) 位带符号数表示范围: 32768(8000H 16位带符号数表示范围:32767(7FFFH)~ -32768(8000H) 位无符号数表示范围: 255(OFFH) 8位无符号数表示范围: 0 ~ 255(OFFH) 16无符号数位表示范围 无符号数位表示范围: 65535( FFFFH) 16无符号数位表示范围:0 ~65535(0FFFFH) 16位带符号数表示范围 32767( FFFH) 位带符号数表示范围: 32768(8000H 16位带符号数表示范围:32767(7FFFH)~ -32768(8000H)
【例3பைடு நூலகம்3】判断下列指令的寻址方式: 判断下列指令的寻址方式:
EAX, MOV EAX,EBX ;源操作数和目的操作数均为寄存器寻址 MOV ADD AX,1234H;目的操作数为寄存器寻址, AX,1234H;目的操作数为寄存器寻址,源操作数是立即数寻址 X, X, AX ;源操作数为寄存器寻址,目的操作数为存储器寻址 源操作数为寄存器寻址, ;将DS的内容压栈指令,源操作数为寄存器寻址 DS的内容压栈指令, 的内容压栈指令 ;将标志寄存器的内容压栈指令,源操作数是寄存器寻址 将标志寄存器的内容压栈指令, ;置标志寄存器DF=1, 目的操作数是寄存器寻址 置标志寄存器DF=1, DF=1

第3章 80X86指令系统

第3章 80X86指令系统



程序是使计算机完成一个任务的一组命令或指令序 列。 指令是规定微处理器执行某种特定操作的“命令”。 指令系统是计算机全部的指令的集合。 机器指令由二进制数组成,计算机硬件只能识别﹑ 存储和运行机器指令。机器指令无论是在书写、阅 读和记忆都是非常困难的,为此,产生了符号化的 机器指令,即符号指令。
格式:段寄存器:[间址寄存器] 操作数的有效地址存在于基址或变址寄存器中。 16位寻址时, EA由BX,SI,DI或BP提供。 其中,BX,SI,DI默认使用DS,BP默认使用SS。 32位寻址时, EA由 EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP。 其中,ESP,EBP默认使用SS, 其余默认使用DS
基址寄存器和变址寄存器须为规定的32位寄存器.
小结:




实模式时,段的最大长度为64KB,所以必须保 证CPU最终算出的有效地址不超过0FFFFH,而且 操作数最高字节单元的有效地址也不能超过 0FFFFH,否则执行寻址时系统将要瘫痪。 有效地址表达式中的位移量是无符号整数。 带有比例因子的变址寻址常用于检索一维数组元 素,比例因子的大小常由数组元素大小决定。 带有比例因子的基址加变址寻址常用于检索二维 数组元素。 存储器寻址方式中使用的寄存器和默认访问的逻 辑段间的对应关系如表3-5所示。
表3-4 16/32位寻址时有效地址4种成分的组成
十六位寻址 位移量 基址寄存器 变址寄存器 0,8,16 BX,BP SI,DI 三十二位寻址 0,8,32 任何32位的 通用寄存器 除ESP以外的 32位通用寄 存器 1,2,4,8
比例因子

1.
直接寻址方式
直接寻址方式有两种格式。在第一种格式中,有效 地址EA直接出现在指令中,存放在代码段中指令操 作码之后,操作数存放在数据段中,这钟格式中段 超越前缀不能省略,否则会出现寻址错误。在另一 种格式中,EA是用变量来代表的存储单元的有效地 址。因为在一般情况下,直接给出操作数所在单元 的直接地址是很困难的,因此在直接寻址方式的使 用上,第二种格式(用变量来代表操作数的直接地 址)更为常见。

第三章 80X86指令系统和寻址方式

第三章  80X86指令系统和寻址方式

7.相对基址变址寻址方式:
有效地址是基址寄存器(BX/BP)、变址寄存 器(SI/DI)与一个8位或16位位移量之和:
EA=BX/BP+SI/DI+8/16位位移量
该方式中,BX/BP选一,SI/DI选一 段地址对应BX基址寄存器默认是DS,对应BP 基址寄存器默认是SS;可用段超越前缀改变
基址寻址:偏移地址是指令中给定的偏移量和寄存器
BX或基数指针BP的内容之和;BX作为基址寄存器时且无 段超越时,物理地址由DS和偏移地址形成;BP作为基址 寄存器时且无段超越时,物理地址由SS和偏移地址形成。
例如:MOV BX,DELTA[BP]
变址寻址:操作数的偏移地址为指令中给定的8位或16
直接寻址的功能
MOV AX,DS:[2000H]
直接寻址的执行
MOV AX,DS:[2000H]
例:MOV AX, [ 2000H ] EA=2000H, 假设(DS)=3000H, 那么PA=32000H
AH
AL
30
50
32000
50 30 (AX)= 3050 H
例如: MOV AX, DATA 或 MOV AX, [DATA] 这里DATA是存放操作数单元的符号地址。
寄存器间接寻址的功能
寄存器间接寻址的执行
例:
MOV AX, [BX] PA = 16d × (DS) + (BX) MOV AX, ES:[BX] PA = 16d × (ES) + (BX) MOV AX, [BP] PA = 16d × (SS) + (BP) * 不允许使用AX、CX、DX 存放 EA
即: 若用寄存器SI,DI,BX间接寻址,则操作数在当前数据段中。 PA=(DS)×10H+EA 若用寄存器BP间接寻址,则操作数在当前堆栈段中。 PA=(SS)×10H+EA

第3章 80x86指令系统和寻址方式

第3章 80x86指令系统和寻址方式

三、学习指令的注意事项 指令的功能——该指令能够实现何种操作。通常指令助 指令支持的寻址方式——该指令中的操作数可以采用何
记符就是指令功能的英文单词或其缩写形式。
种寻址方式。


指令对标志的影响——该指令执行后是否对各个标志位
其他方面——该指令其他需要特别注意的地方,如指令
有影响,以及如何影响。 执行时的约定设置、必须预置的参数、隐含使用的寄存器等。
+DI:2345H 12345H

~ ~
BX
DS→ 10000H 12345H … 54H 43H
43 54
在不使用段超越前缀的情况下,有下列规定:
若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存 器为DS;
若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆
栈段)。 该寻址方式物理地址的计算方法如下: BX 物理地址PA=16×DS + SI DI 或 物理地址PA=16×DS+ BP
功 能:操作数存放在存储器,寄存器R存放操作数的偏移 地址EA。
图形表示:
段基地址
指令 基址或变址寄存器 寄存器 EA + 存储器 操作数
【例3.4】假设有指令:MOV BX, [DI],在执行时,(DS) =1000H,(DI)=2345H,存储单元12345H的内容是4354H。问 执行指令后,BX的值是什么? 解:寄存器DI的值不是操作数,而是操作数的地址。 该操作数的物理地址应由DS和DI的值形成,即: CS→ PA=(DS)*16+DI=1000H*16+2345H=12345H。 … OP 所以,该指令的执行效果是: … 把从物理地址为12345H开始的 DS:1000H 一个字的值传送给BX。 ~

第三章 80X86寻址方式和指令系统

第三章  80X86寻址方式和指令系统

3.3.1
数据传送指令
数据传送指令包括: • • • • • • 通用数据传送指令 堆栈操作指令 地址传送指令 标志寄存器传送指令 查表指令 符号扩展指令
第三章 80x86寻址方式和指令系统
3.3.1
数据传送指令
数据传送指令包括: 通用数据传送指令 堆栈操作指令
地址传送指令
标志寄存器传送指令
查表指令
1、直接寻址
第三章 80x86寻址方式和指令系统
直接寻址过程示意
第三章 80x86寻址方式和指令系统
2、寄存器间接寻址
操作数的有效地址在BX、BP或SI、DI中,EA 可表示为
(BX) EA= (BP) (SI) (DI)
例1 例2
MOV AX,[BX] MOV DL,[SI]
例3.4 寄存器间接寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
2、扩展传送指令(由8位扩展为16位送目的操作数)
MOVSX DEST,SRC MOVZX DEST,SRC 如 MOV BL,80H MOVSX AX,BL;AX=FF80H MOVZX AX,BL;AX=0080H
第三章 80x86寻址方式和指令系统
• 出栈指令 POP DEST 如:POP AX POP DS POP [BX] 操作数类型为字类型(16位):
操作数类型为双字类型(32位): SPSP+4
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
32位指令模式下的存储器寻址方式

微型计算机原理及接口技术第3章 80X86指令系统及汇编语言

微型计算机原理及接口技术第3章  80X86指令系统及汇编语言

第3章 80X86指令系统及汇编语言
..
操作码 2000 ∶ 0FFFH 50H 2000∶ 1000H
2000 ∶ 1050H 操作码
CS + IP +
20 00 10 00
50 21 05 0
.. .. ..
图3.8 段内相对寻址
第3章 80X86指令系统及汇编语言
2.段内间接寻址 在段内间接寻址方式中,转移地址的段内偏移地 址要么存放在一个16位的寄存器中,要么存放在存贮 器的两个相邻单元中。存放偏移地址的寄存器和存贮 器的地址将按指令码中规定的寻址方式给出。此时, 寻址所得到的不是操作数,而是转移地址。 例:JMPCX 其过程如图3.9所示。
第3章 80X86指令系统及汇编语言
3.1.2转移地址的寻址方式 1.段内相对寻址 在段内相对寻址方式中,指令应指明一个8位或16
位的相对地址位移量DISP(有正负符号, 用补码表示)。此时,转移地址应该是代码段寄存
器CS内容加上指令指针IP内容,再加上相对地址位移 量DISP。
例:JMPDISP1 其过程如图3.8所示。
第3章 80X86指令系统及汇编语言
2.交换指令 XCHG OPRD1,OPRD2 交换指令把一个字节或一个字的源操作数与目的 操作数相交换。这种交换能在通用寄存器与累加器之 间、通用寄存器之间、通用寄存器与存贮器之间进行, 但是段寄存器不能作为一个操作数。例如:
XCHGAL,CL XCHGAX,DI XCHGBX,SI XCHGAX,BUFFER XCHGBX,DATA[SI]
第3章 80X86指令系统及汇编语言
立即数
段寄存器 CS,DS,SS,ES
通用寄存器 AX,BX,CX,DX,BP,SP,SI,DI AH,AL,BH,BL,CH,CL,DH,DL

第3章 80x86指令系统

第3章 80x86指令系统
=1234H,其寻址过程则如图所示。
基址加变址寻址
1.特征
操作数存放在存储单元中,其有效地址为一个基址 寄存器的内容加上一个变址寄存器的内容,这两 个寄存器均由指令指定。即
有DI] 如果无段跨越前缀,对于基址寄存器使用BX,则默
认的段寄存器为DS,操作数的物理地址为: 物理地址=16d×[DS]+[BX]+[SI]/[DI] 如果基址寄存器使用BP,则默认的段寄存器为SS,
3.1.3 指令周期 微处理器的工作过程,不外乎取出指令、执
行指令,再取出指令、执行指令,...这样 一个循环过程。一条指令的取出和执行所 必需的时间,称为指令周期。 指令周期是以一条指令的取出和执行所必须 的时间而定义的,其时间的基准是微处理 器时钟周期。
3.1.4 指令的流水线和并行控制
在微处理器中,一条指令的执行全过程总是 分成几步完成的。
来指出计算机应执行何种操作的一个二进制代码。操作数地址指 出该指令所操作(处理)的对象(称为操作数)所在的存储单元的地 址。指定操作数所在位置的方法称为寻址方式。
一条指令的取出和执行所必须的时间,称为指令周期。指令 周期的大小依指令不同而异。指令周期通常用几个机器周期来表 示,一个机器周期又包含若干个时钟周期(或时钟节拍)。
3.精简指令集(RISC)技术
RISC结构的计算机具有相对十分简单的指令系 统,指令长度固定,指令格式与种类简单,寻址 的方式也少,在处理器中增设大量的通用寄存器, 采用硬件控制,从而使指令执行速度提高,同时 依靠编译软件的支持调度指令的流水线执行,这 样RISC系统获得了较高的性能/价格比。
从80486开始到奔腾系列,均采用了精简指令集 (RISC)技术。
S1 取指令(IF) S2 指令译码(ID) S3取操作数(OF) S4执行(EX) S5写回(WB)

汇编语言程序设计_第3章 80x86指令系统

汇编语言程序设计_第3章 80x86指令系统

3.3.2 算术指令
1. 加法
一般形式:
ADD dest, src ; dest = dest + src
ADC dest, src ; dest = dest + src + CF
INC
dest
; dest = dest + 1
语法格式:
ADD reg/mem, reg/mem/imm
ADC reg/mem, reg/mem/imm
movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
(3)MOVZX 一般形式: MOVZX dest, src ; src零扩展为dest;386新增 语法格式: MOVZX reg16, reg8/mem8 MOVZX reg32, reg8/mem8/reg16/mem16
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
5. 堆栈操作指令
80x86系统的堆栈具有如下特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点。 堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单
元。 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地
INC
reg/mem
对标志位的影响:
ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。
2019/8/26
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(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 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数
相关文档
最新文档