第三章 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指令系统
程序是使计算机完成一个任务的一组命令或指令序 列。 指令是规定微处理器执行某种特定操作的“命令”。 指令系统是计算机全部的指令的集合。 机器指令由二进制数组成,计算机硬件只能识别﹑ 存储和运行机器指令。机器指令无论是在书写、阅 读和记忆都是非常困难的,为此,产生了符号化的 机器指令,即符号指令。
格式:段寄存器:[间址寄存器] 操作数的有效地址存在于基址或变址寄存器中。 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指令系统和寻址方式
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指令系统和寻址方式
三、学习指令的注意事项 指令的功能——该指令能够实现何种操作。通常指令助 指令支持的寻址方式——该指令中的操作数可以采用何
记符就是指令功能的英文单词或其缩写形式。
种寻址方式。
指令对标志的影响——该指令执行后是否对各个标志位
其他方面——该指令其他需要特别注意的地方,如指令
有影响,以及如何影响。 执行时的约定设置、必须预置的参数、隐含使用的寄存器等。
+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寻址方式和指令系统
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指令系统及汇编语言
..
操作码 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指令系统
基址加变址寻址
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.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指令系统
一、数据传送指令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指令系统
存储器寻址方式的分类
直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址 比例变址寻址(只用于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指令系统
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-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的指令系统和寻址方式
指针送寄存器和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 的指令系统和寻址方式
是硬件设计人员和程序员能见到的机器的主要属性,
是硬件构成的计算机系统向外部世界提供的直接界面。
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的指令系统和寻址方式
有效地址的计算:
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数 目标操作数,源操作数