第三章 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

第三章-80x86指令系统

第三章-80x86指令系统

一、数据传送指令1、通用数据传送指令(1)MOV—传送指令MOV指令的机器语言可以有如下7中格式:①MOV mem/reg1, mem/reg2双操作数指令不允许两个操作数多使用寄存器, 因而两个操作数中必须有一个是寄存器。

这种方式不允许指定段寄存器。

②MOV reg,data其中reg指定寄存器, data为立印数,这种方式也不允许指定段寄存器。

③MOV ac,mem其中ac为累加器。

④MOV mem,ac⑤MOV segreg,mem/reg其中segreg指定段寄存器,但不允许使用CS寄存器。

此外,这条指令执行完后不影响中断,要等下一条指令执行完后才可能响应中断⑥MOV mem/reg,segreg⑦MOV mem/reg,这种方式的目的操作数只用存储器方式而不用寄存器方式。

注意:立印数不能直接送段寄存器。

MOV指令的目的操作数不允许用立即数方式,也不允许用CS寄存器,而且除源操作数为立即数的情况外,两个操作数中必须有一个是寄存器。

也就是说,不允许用MOV指令在两个存储单元之间直接传送数据。

此外, 也不允许在两个段寄存器之间直接传送信息。

还应该注意的是MOV指令不影响标志位。

(2)MOVSX—带符号扩展传送指令(386及其后继机型可用)①源操作数可以是8位或16位的寄存器或存储单元的内容,而亩的操作数必须为16位或32位寄存器,传送时把源操作数符号扩展送入目的寄存器。

②MOVSX指令不影响标志位。

(3)MOVZS—带零扩展传送指令(386及其后继机型可用)①有关源操作数和目的操作数以及对标志位的影响均和MOVSX相同。

②它们的差别只是MOVSX的源操作数是带符号数,所以作符合扩展;而MOVZX的源操作数应是无符号整数,所以作零扩展。

③MOVSX和MONZX指令与一般双操作数指令的差别是:一般双操作数指令的源操作数和目的操作数的长度是一致的,但MOVSX和MOVZX这两个指令的源操作数长度一定小于目的操作数的长度。

第3章 80x86指令系统

第3章 80x86指令系统

存储器寻址方式的分类





直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址 比例变址寻址(只用于386以上处理器) 基址比例变址寻址(只用于386以上处理器) 相对基址比例变址寻址(只用于386以上处理器)
1、直接寻址

程序直接通过操作数的地址来访问该操作数
MOV
AX,[BX+SI]
代码段 传 送 指 令
段地址DS: 5 0 0 0 0
操作码 操作码
基址BX:
变址SI:
1234
1000
50000H
数据段 ……
+
52234H 89H (操作数低8位) 52235H 67H (操作数高8位)
物理地址: 5 2 2 3 4 运行结果:(AX) = 6789H
图3-22 DEBUG中执行PUSH AX指令示例

目标地址传送指令:
LEA、LDS、LES、LFS、LGS、LSS
标志位传送指令:
LAHF、SAHF、PUSHF、POPF、PUSHFD、POPFD
输入输出指令:
IN、OUT
1、通用数据传送指令
(1)MOV(Move)


ห้องสมุดไป่ตู้
指令格式:MOV 目的操作数,源操作数 指令作用:将一个字节、字或双字从源地址传 送到目的地址中 指令用法:
运行结果:(AX)= 6789H
图3-5 直接寻址
图3-6 DEBUG下直接寻址指令的输入、汇编及执行示例
2、寄存器间接寻址

操作数存放在存储器中,但操作数的偏移量存放 在基址寄存器或变址寄存器中
例如:设(DS)=5000H,(BX)=1234H ,则: MOV AX,[BX]

第3章80x86指令系统

第3章80x86指令系统

DATA1 DB 1,2
DATA2 DW 1,2
:
MOV AL,DATA2
MOV AX,DATA1
错误
2.寄存器间接寻址

有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中 (间址寄存器)。 默认的段地址在DS段寄存器,可使用段超越前缀改变(如果 使用BP,则默认的段地址在SS段寄存器)。 MOV AX,[SI] ; AX←(DS:[SI])


3.1 8086/8088指令格式 3.2 8086/8088指令寻址方式 3.2.1隐含寻址 3.2.2 立即寻址 3.2.3 寄存器寻址 3.2.4 存储器寻址 3.2.5 串操作寻址 3.2.6 I/O端口寻址








3.3 8086/8088指令系统 3.3.1数据传送类指令 3.3.2 算数运算类指令 3.3.3 逻辑运算和移位循环 指令 3.3.4 串操作类指令 3.3.5 控制转移类指令 3.3.6 处理器控制类指令
3 .2 .1 隐含寻址
有少数指令,操作数不在指令中出现,这种寻址方式称为隐含寻址。 它用于对特定的寄存器实现特定的操作。例如DAA(十进制数 加法调整)指令和DAS(十进制数减法调整)指令。
3 .2 .2 立即寻址
◆ ◆
操作数直接存放指令中,紧跟在操作码之后。 这种操作数被称为立即数 imm
– –
3 .3 .1 数据传送类指令
指令类型 指令功能
字节或字传送 字压入堆栈 字弹出堆栈 字节或字交换 换码指令 从端口读入数据 输出数据到端口
指令书写格式
MOV目标,源 PUSH源 POP目标 XCHG目标,源 XLAT IN OUT

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

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

【例3-10】 有指令MOV AX,[BX][DI]。 假设: BX=3000H,DS=3000H,DI=1000H 则该指令的 寻址方式和传送过程如图3.10所示。
图3.10

7.相对基址变址寻址方式 相对基址变址寻址方式是在基址加变址寻址方式中的有效地址再加 一个偏移值,即把一个基址寄存器(BX,BP)的内容加上一个变址寄 存器(SI,DI),再加上指令中8位或16位位移量与段寄存器(DS, SS)的组合为操作数地址。 相对基址变址寻址方式的物理地址的计算方法: 物理地址= DS ×16 + BX + SI(或 DI) + disp 物理地址= SS ×16 + BP + SI(或DI ) +址方式)
直接寻址方式也可称为存储器直接寻址方式,指出操作数是在存储器的数 据段中,该数据段的哪个存储单元是操作数是通过该存储单元的偏移地址 (有效地址EA)得到的。操作数的有效地址(EA)直接出现在指令中,直接 指出操作数的地址,该寻址方式为直接寻址方式。
直接寻址方式指令一般格式: OP m ,r OP m ,DATA OP r ,m 则物理地址=DS×16 +EA 【例3-4】设有指令MOV AX,[2000H];源操作数为直接寻址方式,数据段地址 DS=3000H,该指令是如何得到数据段中2000H单元的内容的?如教材图 3.3 所示。 在指令中有效地址2000H直接出现在指令中,它隐含指出该有效地址是在数 据段中的偏移地址: DS×16 +EA=3000H×16 +2000H=32000H,得到物理地址32000H,该地址 所指单元的内容为5000H,通过数据传送指令将[32000H ]中的操作数5000H送 到AX中。
1)可以用符号地址(也称为变量)代替数值地址(偏移地址)。 【例3-5】在数据段中定义: X DW 2000H Y DB ‘A’ ┇ MOV AX,X MOV AL,Y MOV BX,Y+1 用DEBUG中调试这个程序段时: MOV AX,[000DH] MOV AL,[000FH] MOV BX,[0010H] 值得说明的是,MOV AX,X与 MOV AX,[X];等价 。 2)允许段超越 如果符号地址不在数据段DS中,则在偏移地址或符号地址之前必须用显示说明,如果偏移地址或符号 地址是在附加段ES中时,则指令中的表示为: MOV AX,ES:[2000H] MOV AX,ES:[X] MOV AX,ES:X 3)与立即数寻址的区别 立即数寻址与直接寻址的主要区别在于符号常量与符号地址(变量)的区别,在用伪指令定义时: X EQU 512 ;X为符号常量 Y DW 512 ;Y为符号地址(变量) MOV AX,X ;X为符号常量,为立即数寻址 MOV AX,Y ;Y 为符号地址(变量),为直接寻址

微机原理第三章 80x86的指令系统和寻址方式

微机原理第三章 80x86的指令系统和寻址方式
相继二字 寄存器、DS
指针送寄存器和ES指令: LES REG, SRC 执行操作: (REG) (SRC) (ES) (SRC+2)
相继二字 寄存器、ES
例:LEA BX, [BX+SI+0F62H]
LDS SI, [10H] LES DI, [BX]
MOV BX, TABLE 40 H 00 H 00 H 30 H
存 储 器 寻 址
1.立即寻址方式
—— 操作数在指令中给出 指令格式:MOV AL, 5 MOV AX, 3064H MOV AL, ‘A’ ;A的ASCII码 * 只能用于 SRC 字段 MOV 40H, AL
* SRC 和 DST 的字长一致 MOV AH, 3064H
2.寄存器寻址方式 —— 操作数在指定的寄存器中
……
…… RET 例: PUSH AX PUSH BX PUSH CX …… POP POP CX BX ;其间用到AX、BX、CX
; 后进先出
POP
AX
交换指令
执行操作
注意:
XCHG OPR1, OPR2
(OPR1) (OPR2)
* 不影响标志位
* 不允许使用段寄存器 * 必须有一个操作数在寄存器中 * 不能够使用立即数寻址方式
标志寄存器传送指令
标志送AH指令 执行操作:
AH送标志寄存器指令 执行操作: 标志进栈指令 执行操作: 标志出栈指令 执行操作:
(DI)
7.相对基址变址寻址方式
(BX) (BP) (SI) (DI) 8位 16位
有效地址 =
+
+
位移量
MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI] 或 MOV AX, [MASK+BX+SI] * 适用于二维数组的寻址,位移量可存放首地址 * 可使用段跨越前缀

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

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

是硬件设计人员和程序员能见到的机器的主要属性,
是硬件构成的计算机系统向外部世界提供的直接界面。
3
一个CPU的指令系统是固定的, 不同类型的CPU其指令系统不同; 同一系列向上兼容。 程序是为要解决的问题编写出来的指令集合。 用户为解决自己的问题所编写的程序称为源程序。
4
2. 8086/8088指令格式简介
立即数可以是8位或16位(16位的立即数是高位字节放在高地址,低位字节放在低地址) 。 应用场合: 立即数常用来给寄存器或内存单元赋初值。 注意:只能用于源操作数字段,不能用于目的操作数字段。 例1 MOV AX , 2056H 结果 ( AH ) = 20H
低地址
内存
操作码 操 作 数
高地址
6
操作数个数
按指令格式中,操作数个数的多少分为三类:
无操作数: 指令只有一个操作码,没有操作数
单操作数: 指令中给出一个操作数
双操作数: 指令中给出两个操作数。
7
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
MOV DS: [ DI ] , CL
功能:将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中

编程将CL寄存器的内容传送到21000H单元中。 地址 21000H=2000:1000H 编程时, DS 存放段地址2000H DI 存放偏移地址1000H MOV MOV MOV MOV AX, 2000H DS, AX DI, 1000H DS: [ DI ], CL

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

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


有效地址的计算:
EA = 基址 + 变址 + 位移量
15
第三章 80x86的指令系统和寻址方式
段跨越
在存储器内进行寻址时,不同的寻址方式 会对应不同的默认段。 如果需要改变默认段,则需使用段跨越前 缀。如: mov ax,es:[2000H] 以下三种情况不允许段跨越:

– 串处理指令的目的串必须用ES段 – PUSH指令的目的和POP指令的源必须用SS段 – 指令必须存放在CS段中
AH AL
30
50 50 30 32000 32001
(AX) = 3050H
操作数地址也可由变量(符号地址)表示
等价
MOV AH, VALUE
MOV AH, [VALUE]
( VALUE DB 10 )
17
第三章 80x86的指令系统和寻址方式
直接寻址方式* * 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES :[2000H] * 使用变量时,要注意变量的属性
第三章 80x86的指令系统和寻址方式
3.1 80x86的寻址方式 3.2 程序占有的空间和执行时间 3.3 80x86的指令系统
1
第三章 80x86的指令系统和寻址方式
教学重点 第 3 章是本课程的一个关键内容,是程序设计的 基础
基础是熟悉寄存器组
难点是各种寻址方式
重点是掌握8086常用指令的功能及应用
5
第三章 80x86的指令系统和寻址方式
3.1 IBM PC机的寻址方式
与数据有关的寻址方式
与转移地址有关的寻址方式
3.1.1 与数据有关的寻址方式
以 MOV 指令为例 操作码

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