第三章 80486微处理器指令系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 80486微处理器指令系统
㈠ 教学目标
介绍80486的寻址方式及指令系统。
㈡ 学习要求
通过本章的学习,要求熟悉各种寻址方式的使用
场合以及常用指令的使用方法。

讲授内容
第一节 80486微处理器寻址方式
第二节 80486微处理器指令系统
指令
指令是规定计算机进行某种操作的 指令中应包含三方面的信息: 执行什么操作 操作数的位置 结果存放的位置 指令的一般格式 操作码 操作数地址1
80486源自文库以工作在实模式、保护模式和虚拟86模式,为了支持
系统工作模式,指令系统中设计了系统管理指令、保护模式控制 指令以及高级语言支持指令等等。
80486 的基本指令按功能可分为 7 类:数据传送指令、算术运
算指令、逻辑运算指令、字符串操作指令、控制转移指令、处理 器控制指令和按条件设置字节指令。下面分别给予介绍。
二、转移地址寻址方式
在指令系统中,有一组指令为程序转移指令。程序转移指令的
寻址方式涉及如何确定转移的目标地址。目标地址可以在段内,也
可以在段外。
1. 段内直接寻址 转移的目标地址是当前IP寄存器的内容和一个8位或16位位移量之和。 指令的汇编语言格式表示为:
JMP
JMP 2. 段内间接寻址
(NEAR PTR) PROGRM
MOVSX和MOVZX这两条指令常被用于作除法时对被除数位数的扩展。
交换指令XCHG 格式: 功能: 可完成: 通用寄存器 例: 地址传送指令 LEA传送指令 格式: 功能: LEA REG,OP1 通用寄存器 XCHG AX,BX XCHG OP1 OP1,OP2 OP2
通用寄存器
;AX
存储器
BX
其余以DS作段寄存器。
*(7)基址比例变址寻址方式 MOV DX,[变址寄存器×比例因子+基址寄存器 ]
*(8)相对基址比例变址寻址方式 MOV DX,[基址寄存器+比例因子×变址寄存器+位移量 ]
*凡是乘以比例因子的寻址方式均只适合于32位寻址的情况, 即(6)(7)(8)三种寻址方式仅适合32位通用寄存器。
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=78H, BP =84H
PUSHA
执行后有: SP
78H 00H 22H 20078H
注意:压栈的顺序为 AX、CX、DX、BX、 SP、 BP、SI、DI
00H
44H 00H
33H 00H
11H 00H xxH 20080H
将堆栈中的数据弹给16位通用寄存器,顺序
与压栈指令相反。
格式:POPAD
将堆栈中的数据弹给32位通用寄存器,顺序
与压栈指令相反。
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=80H, BP =84H
PUSHA
执行后有:
注意:压栈的顺序为 AX、CX、DX、BX、 SP、 BP、SI、DI
将OP1所在位置的有效地址(偏移地址)送往 通用寄存器。
例:
LEA MOV
BX,SEGPT BX,OFFSET SEGPT
等价
DATA STR RES DATA
SEGMENT DB DB ENDS 10,20,30,40,50 10 DUP(0)
CODE
SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
以第一条指令为例的立 即数寻址方式的执行过程如 图。 立即寻址示意图
2.寄存器寻址
在这种方式下,操作数存放在CPU某个8位、16位或32 位寄存器中。
例: MOV
MOV
EAX,EDX
DS,AX
该寻址方式指令码短,且无需从 存储器取操作数,故执行速度快
3.存储器操作数寻址 操作数在除代码段以外的内存单元中。通过不同寻址方式求得操 作数地址,从而取得操作数。在指令中给出计算操作数所在内存单元
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=7AH, BP =84H
PUSHA
执行后有: 22H
注意:压栈的顺序为 AX、CX、DX、BX、 SP、 BP、SI、DI SP
00H
44H 00H 2007AH
33H 00H
11H 00H xxH 20080H
须在指令中相应的操作数前加上段超越前缀。例如:
MOV MOV AX,ES:[SI] AX,DS:[BP]
*● 32位寻址时,8个32位通用寄存器除ESP外均可作间址寄存器。除 EBP默认段寄存器为SS外,其余6个通用寄存器均默认段寄存器为DS。
例: MOV
AX,[SI]
设(DS)=4200H,(SI)=5000H, 则源操作数所在单元的物理地址= 4200H*10H+5000H=47000H 指令执行后(AX)=3525H。
一、数据传送指令
1. 通用数据传送指令: 完成数据的传送工作,不影响任何标志 基本传送指令 格式: MOV MOV OP1,OP2
目的操作数 源操作数 功能: 可完成: OP1 OP2 通用寄存器 段寄存器 存储器 存储器 注意:目的操作数不能是CS! 立即数 存储器
通用寄存器 通用寄存器 通用寄存器 段寄存器 通用寄存器
偏移地址的表达式。
(1)直接寻址 在这种方式下,指令中的操作 数部分直接给出了操作数的有效地
址EA,它和操作码一起放在存储器
的代码段中,可以是16位或32位整 数。但操作数一般在数据段DS中。 例:MOV AX,DS:[1000H] ;将DS段中1000H和1001H单元 的内容送到AX中。 设DS=2000H 应注意的是,指令中的DS不能省略。
例:将16进制数 0~F 转换为与之对应的ASCII码 ACTAB MOV MOV XLAT DB ‘0123456789ABCDEF’ ┇ BX,OFFSET ACTAB AL,[SI] ;表首地址的偏移量→BX ;取待转换数
;转换结果→AL ┇
2. 堆栈指令 压栈/弹栈指令 PUSH/POP ;OP1可以是16位或32位的通用寄存器、 OP1 段寄存器、存储器操作数或立即数。
格式:PUSH
;基本同上,但OP1不能是立即数和CS。 POP OP1 全部通用寄存器内容压栈和弹栈指令
格式:PUSHA
将8个16位通用寄存器压栈,顺序为: AX、CX、DX、BX、SP、BP、SI、DI
格式:PUSHAD 格式:POPA
将8个32位通用寄存器压栈,顺序为:EAX、 ECX、EDX、EBX、ESP、EBP、ESI、EDI
11H SP 00H xxH 20080H
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=7EH, BP =84H
PUSHA
执行后有:
注意:压栈的顺序为 AX、CX、DX、BX、 SP、 BP、SI、DI
33H 00H
SP 11H 00H xxH 2007EH 20080H
(2)寄存器间接寻址
MOV
MOV
SI,1000H
AX,[SI]
这种寻址方式下,操作数所在内存单元的EA由规定的寄存器指出。 ●16位寻址时,EA可以由SI,DI,BP或BX提供。(其中BX、BP也称基 址寄存器,SI、DI称变址寄存器) 若以SI,DI,BX间接寻址,则默认操作数在DS段中。若以BP间接 寻址,则默认操作数在SS段中 如果操作数不在上述规定的默认段,而是在其他的段,则必
LEA LEA MOV INT ENDS END SI,STR DI,RES ;SI=0 ;DI=5
AH,4CH ;设置功能号 21H ;返回DOS
CODE
START
查表转换指令XLAT 格式: XLAT ;将DS:[BX+AL]
● ● ● ●
AL
使用XLAT指令的条件:
在数据段中建一张表 数据段段基址送DS 表首地址的偏移量送BX 待转换数放入AL中
33H 00H
11H 00H xxH 20080H
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=74H, BP =84H
SP
55H 00H 84H 00H 20074H
PUSHA
执行后有:
78H 00H 22H
(SHORT) OUTSET
该方式中,转移的目标地址是寄存器或存储单元的内容。寄存器或 存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方
式取得,所得到的内容将用来取代IP寄存器的值。
段内间接寻址转移指令的汇编格式可以表示为:
JMP
JMP
CX
WORD PTR [BX]
3. 段间直接寻址
例: MOV
CH,[BP]
设(SS)=3000H,(DS)=3500H,(BP)=1340H,则该指令是将 31340H 单元的内容送给CH。
(3)寄存器相对寻址方式 MOV MOV EAX,[BX+24] ;也可以写成 MOV EAX,24[BX] DX,1500[EAX]
DX ,[EAX+1500];也可以写成 MOV
这种寻址方式用于段间转移,指令中直接提供了目标地址的段基址 和偏移地址,所以,只要用指令中指定的偏移地址取代IP寄存器的内容, 用指令中指定的段基址取代CS寄存器的内容就完成了从一个段到另一个 段的转移操作。 指令的汇编语言格式可表示为:
JMP
4. 段间间接寻址
FAR
PTR
NEXT
该方式下,用存储器中两个相继字的内容来取代IP和CS寄存器中的
符号扩展传送指令MOVSX
格式:MOVSX OP1,OP2 ;OP1为16位或32位通用寄存器 OP2为8位或16位通用寄存器或存储器 例如: MOV MOVSX DL,-16 BX,DL ;DL = F0H ;BX = FFF0H,而DH,DL不变
零扩展传送指令MOVZX 格式:MOVZX OP1,OP2 ;OP1为16位或32位通用寄存器 OP2为8位或16位通用寄存器或存储器 例如:MOVZX EAX,CX ;将CX中16位数高位加0扩展为32位送入EAX
(4)基址变址寻址方式 MOV DX ,[BX+SI]
*(5)相对基址变址寻址方式
MOV DX ,[BX+SI+24]
*(6)比例变址寻址方式 MOV DX ,[变址寄存器×比例因子+位移量]
其中比例因子可以是1,2,4,8中的任一个数。32位寄存器中,除ESP 外的7个通用寄存器均可作基址和变址寄存器,且EBP默认SS作段寄存器,
器操作数)、寄存在寄存器中(称为寄存器操作数)或直接包含在指令 中(称为立即数),因此,与之对应有多种寻址方式。80X86粗略地划
分可有3类10种寻址方式,其中访问存储器操作数有8种寻址方式。
1.立即数寻址 在这种寻址的方式下,操作数作为立即数直接存在指令中,可为 8位,16位和32位。 例: MOV MOV MOV AX,1234H BL,78H ECX,12345678H
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=7CH, BP =84H
PUSHA
执行后有:
注意:压栈的顺序为 AX、CX、DX、BX、 SP、 BP、SI、DI SP 44H 00H
33H 00H
11H 00H xxH
2007CH
20080H
二进制代码形式的
命令
操作数地址2
结果存放地址
而寻找操作数所在地址的方法即为寻址方式(Addressing Mode)。
第一节 80486微处理器的寻址方式
80X86的寻址方式可分为两类:操作数的寻址方式和转移地址的 寻址方式。
一、操作数寻址方式
由于操作数作为指令的操作对象,可以存储在存储器中(称为存储
如:AX=11H, BX=22H CX=33H, DX=44H SI =55H, DI =66H SP=76H, BP =84H
84H 00H PUSHA 执行后有: SP 78H 00H 22H 注意:压栈的顺序为 AX、CX、DX、BX、 SP、 BP、SI、DI 20076H
00H
44H 00H
原始内容,以达到段间转移的目的。这里,存储单元的地址是由指令指 定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。 指令的汇编语言格式可表示为: JMP DWORD PTR [BX]
第二节
80486微处理器指令系统
80X86的指令系统向上兼容,都是在8086指令的基础上发展形 成的。与80286相比,增加了32位操作和访问存储器的 32位寻址方 式。
相关文档
最新文档