第3章 80x86寻址方式与指令系统
80X86寻址方式和指令系统
的寻址方式由指令给出。 例如,若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,则以下指令 的结果是一样的:
MOV AL, [2A00H] MOV AL, [BX+0A00H] MOV AL, [BX][SI] MOV AL, [DI]
MOV AX , [2A00H] MOV DX , ES: [2A00H] MOV SI , TABLE_PTR
80X86寻址方式和指令系统
第3章 80X86寻址方式和指令系统
执行指令:A10231 MOV AX,[3102H] 后
AL (3102H) , AH (3103H) 如果(DS)=2000H, (23012H) = CDH, (23013H) = ABH
EA =
(BX) + (SI) + 8位
(BP)
(DI)
16位
例如:
MOV AX,BASE [SI] [BX] MOV AX,[BX+BASE] [SI] MOV AX,[BX+SI+BASE] MOV AX,[BX] BASE [SI] MOV AX,[BX+SI] BASE
“相对的基址变址寻址”方式主要用于对二维数组的访问。
错误例:
× MOV 2A00H, AX ; 错误!
80X86寻址方式和指令系统
第3章 80X86寻址方式和指令系统
例如: B80231 MOV AX,3102H 执行后,(AH) = 31H,(AL) = 02H
立即寻址指令在 存储器中的存放 形式
AX AH AL
存储器
微机原理第三章80X86寻址方式与指令系统PPT课件
POP BX
源操作数隐含为栈顶字单元
LAHF
源操作数隐含为标志寄存器低字节,
目操作数隐含为寄存器AH
第13页
2020/9/29
微机原理及应用
8086寻址方式——其它方式(2)
2、相对寻址 仅用于进行段内直接转移的控制转移指令。
指令中的操作数是一个8位或16位带符号的相对 偏移量,代表目标地址与正常执行顺序的原地 址之差。
DS:
ES:
ES: — SS: —
—
CS:
CS:
固定 搭配 的寄 存器
SP
DI IP
第12页
2020/9/29
微机原理及应用
8086寻址方式——其它方式(1)
三、其它寻址方式
1、固定寻址(隐含寻址)
操作数并不直接出现在指令中,而是由操作码隐含地指 定为某一固定内容。
例: PUSH DS 目操作数隐含为栈顶字单元
便于书 写可读
指令的书写格式(以8086性为强例)
操作码助记符 [[目操作数助记符], [源操作数助记符]] (操作码:必备;操作数:可以是1个、2个或没有,可以是
8位或16位)
指令的编码格式(以8086为例由)机器
采用变长编码格式,属于CIS识C别。和
低端
执行
高端
指令前缀 操作码字段 寻址方式字段 操作数字段
第5页
2020/9/29
80X86寻址方式(续)
微机原理及应用
非存储器寻址方式
立即数寻址 寄存器(直接)寻址
存储器寻址方式
直接寻址 寄存器间接寻址 基址寻址 变址寻址 基址加变址寻址
其它寻址方式 —固定寻址、相对寻址、I/O端口寻址
第6页
第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。 ~
第3章 80x86的寻址方式与指令系统分类
MOV AX,[2000] ; MOV buffer[SI],AX
• 操作数在I/O端口中—— 这时指令中的操作数场包含着此操作数的端口号。
IN AL, DX; OUT 83H, AL
(四)寻址方式
1.立即寻址方式 2.寄存器寻址 3.存储器寻址方式
1)直接寻址方式 2)寄存器间接寻址 3)寄存器相对寻址 4)基址加变址寻址 5)相对基址加变址寻址 4.I/O寻址方式
DEC OPRD CMP DST,SRC NEG OPRD MUL SRC IMUL SRC DIV SRC IDIV SRC
CBW CWD
功能
OSZ APC
加法(字、字节) 带进位加法(字、字节) 加 1(字、字节) 减法(字、字节)
OSZ APC OSZ APC OSZ AP OSZ APC
带借位减法(字、字节)
65 First F3 02 00 24 Second E0 05 00 89 Third D3 08 00
逻辑运算类指令
分类
名称
格式
功能
逻辑与指令
逻辑 运算 指令
逻辑或指令 逻辑非指令 逻辑异或指令
AND DST, SRC OR DST, SRC NOT OPRD XOR DST, SRC
与(字、字节) 或(字、字节) 非(字、字节) 异或(字、字节)
AND通常用于使某些位置0, 其它位不变的情况。
11111111
使一
∧ 0 0111111
立 即 数的
0 0111111
该位为 0 即可
例:使某数的第4、5位置1。
MOV AL,03H OR AL,30H
00000011 ∨ 00110000
00110011
80x86寻址方式和指令系统
80x86寻址方式和指令系统第三章 80x86寻址方式和指令系统3.1 80x86 寻址方式3.1.1数据寻址方式通常指令分为操作码和操作数两部分,表示指令中操作数所在的方法称数据寻址方式。
一、立即寻址操作数包含在指令中,作为指令的一部分,存放在代码段中。
操作数(又称立即数)存放形式为,数据高位存放在地址高位存储单元,数据低位存放在地址低位存储单元。
例3.1·MODEL tiny;选择单个段模式地址·586;586实方式CS:EA 机器码·CODE;代码段开始·STARTUP;程序开始1D24:0100 B83412 MOV AX,1234H ;AX←1234H1D24:0103 66BB00000000 MOV EBX,0;EBX←01D24:0109 B155 MOV CL,55H;CL←55H·EXIT;返回DOSEND;文件结束例3.1中指令MOV AX,1234H,其源操作数为立即数1234H,目的操作数为寄存器AX。
存放该指令的地址为1D24:0100,执行该指令,从代码段取出立即数1234H送寄存器AX中。
图3.1为立即寻址过程示意图。
../../../flash/t3.1.swf图3.1 立即寻址过程示意图二、寄存器寻址操作数在寄存器中,操作数可以是8位、16位或32位通用寄存器、16位段寄存器。
例3.2·MODEL TINY·586·CODE地址机器码·STARTUP1D24:0100 8BC3 MOV AX,BX;AX←BX1D24:0102 8ACA MOV CL,DL;CL←DL1D24:0104 668BF7 MOV ESI,EDI;ESI←EDI·EXITEND上例中指令MOV AX,BX,其源操作数为BX,目的操作数为AX。
存放该指令的地址为1D24:0100,执行该指令,将BX内容复制到AX中。
第三章 80x86的寻址方式与指令系统 微机基础与接口技术 教学课件
MOV AX,[BX][SI]
2020/6/16
七、相对基址加变址寻址方式 MOV AX, TABLE[BX][SI]
3.2
2020/6/16
3.3 80x86的指令系统
包括数据传送、算术运算、逻辑运算、程序 控制、处理器控制、串操作六种类型的指令 。 *共115个助记符,91种操作, 功能上能够满足基本编程的需要。
JMP EXIT
;跳转到EXIT
BIG: JE ZERO ;=0转ZERO
MOV AL,01H ;大于0,则赋值1
JMP EXIT
ZERO:MOV AL,0 ;等于0,则赋值0
EXIT:MOV RES,AL ;把结果存入RES
2020/6/16
3. 循环指令LOOP
3.3
LOOP指令借助默认的CX循环计数器, 可以在 -128---127范围内实现程序有规律的循环, 类似指令还有: LOOPZ/LOOPE、LOOPNZ/LOOPNE。
默认DS:SI→ES/DS:DI,地址变化方向由DF决定: DF=0/1,地址增大/减小; 并且结合重复前缀REP/REPE/REPNE, 实现重复传送,重复次数必须由CX指定。
2020/6/16
LEA SI,SRC LEA DI,DST MOV BX,100 CLD L: MOVSB DEC BX JNZ L
ESC 存储器寻址方式;为协处理器提供操作码,数据总线把存储单元内容 送出并开始协处理器指令的执行;当遇到协处理器助记指 令码,汇编程序把它转换为ESC指令的机器码,表示此处 为协处理器的操作码。
2020/6/16
六、字符串操作指令
第3章80x86的寻址方式与指令系统(自学)
有效地址的计算公式:
EA=基址+(变址×比例因子)+位移量
2020/8/1
汇编语言程序设计
16
3.2 80x86的寻址方式
16/32位寻址时EA四种成分的组成
位移量
0,8,16位 0,8,16,32位
基址寄存器 BX,BP 任何32位通用寄存器
变址寄存器 SI,DI 32位通用寄存器(除ESP)
比例因子
指令的形式有: 双操作数指令 单操作数指令 隐含操作数指令
DEC CX AAA
2020/8/1
汇编语言程序设计
5
3.1 指令系统概述
3. 操作数的种类
(1) 立即数——操作数本身,存放在指令 代码中。 (2) 寄存器操作数——操作数存放在CPU 内部寄存器中。 (3) 内存操作数——操作数存放在内存中, 一般在数据段、附加段、甚至堆栈段。给 出的是操作数的地址。 (4) 端口操作数——在I/O指令中,给出的 端口地址。如
无 1,2,4,8
16位寻址 32位寻址
2020/8/1
汇编语言程序设计
17
3.2 80x86的寻址方式
段 约 定 和 段
在指令中大多隐含 段地址。段地址有个基 本的规定(约定,默 认),也允许超越(可
超 修改),见下表所示:
越
2020/8/1
汇编语言程序设计
18
3.2 80x86的寻址方式
2020/8/1
汇编语言程序设计
11
3.2 80x86的寻址方式
2.寄存器寻址方式(Register addressing) 操作数在寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是AX、BX、 CX、DX、SI、DI、SP、BP;对于8位操作数,寄 存器可以是AH、AL、BH、BL、CH、CL、DH、 DL。对于32位操作数,寄存器可以是EAX、EBX、 ECX、EDX、ESI、EDI、ESP、EBP;
第三章 汇编语言80X86的指令系统和寻址方式
第3章 80x86指令系统和寻址方式
《汇编语言》
对同一类型指令,执行速度: 寄存器操作数 立即数操作数 存储器操作数
快
慢
例
mov mov mov
AL , BL AL , 0 AL , [ BX ]
快
慢
17
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2
80x86寻址方式
3.2.1 寻址、寻址方式的概念
18
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2.2 80X86的指令格式
指令助记符 [ 操作数1 [ , 操作数2 [ , 操作数3 ] ] ] [;注释]
指令助记符体现该指令的功能,它对应一条二进 制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作 数,也可以有一个、二个或三个操作数。
指令系统的基本概念
指令系统
计算机的指令系统就是指该计算机能够执行
的全部指令的集合。 每种计算机都有它支持的指
令集合。 16位8086指令系统是整个Intel 80x86 系列微处 理器指令系统的基础。
2
第3章 80x86指令系统和寻址方式
《汇编语言》
3.1.2
指令格式
指令由操作码和操作数两部分组成。
双操作数: 指令中给出两个操作数。
7
第3章 80x86指令系统和寻址方式
《汇编语言》
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
AAA , DAA等调整指令。
1) 立即寻址方式
第三章 80X86的寻址方式和指令系统
操作码 操作数
操作码和操作数的字节数由具体的指令系统决定。
8086指令编码格式
操作码
对于MOV 指令应注意几个问题:
①存储器传送指令中,不允许对CS和IP进行操作;
②两个操作数中,除立即寻址之外必须有一个为寄存 器寻址方式,即两个存储器操作数之间不允许直接进 行信息传送; 如我们需要把地址(即段内的地址偏移量)为AREAl 的存储单元的内容,传送至同一段内的地址为AREA2 的存储单元中去,MOV指令不能直接完成这样的传送, 但我们可以CPU内部寄存器为桥梁来完成这样的传送: MOV AL,AREAl MOV AREA2,AL
8086指令编码格式操作码三类格式操作码寻址方式操作码寻址方式操作数具体的字节数根据指令的不同有16字节操作码操作码操作码操作码操作码操作码寻址方式寻址方式寻址方式寻址方式寻址方式操作数操作数操作数操作数操作数操作数操作数操作数操作数操作数指令编码举例
第三章 80X86的寻址方式和指令系统
3.1 指令的格式
但是,只要在指令中指定是段超越的,则可以用 别的段寄存器作为地址基准。
4) 比例变址寻址
物理地址=段寄存器:[变址寄存器*比例因子+偏移量]
默认组合:
DS:[SI*比例因子+偏移量]
ES:[DI*比例因子+偏移量]
例:MOV AX,50H[SI]*4
5) 基址加变址寻址 把BX和BP看成是基址寄存器,把SI、DI看着是 变址寄存器,把一个基址寄存器(BX或BP)的内容 加上一个变址寄存器(SI或DI)的内容,再加上指令 中指定的8位或16位偏移量(当然要以一个段寄存器 作为地址基准)作为操作数的偏移地址,如图所示。
汇编语言 第3章1 80x86的指令系统和寻址方式
CS、DS、SS、ES
寄存器寻址指令
MOV AX,1234H MOV BX,AX ;AX←1234H ;BX←AX
寄存器寻址
3.1.4 存储器寻址方式
指令中给出操作数的主存地址信息(偏移
地址,称之为有效地址EA),而段地址在 默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
量之和,寄存器可以是BX、BP或SI、DI 有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP
寄存器默认是SS;可用段超越前缀改变 MOV AX,[DI+06H]; mov ax,table[di] ;AX←DS:[DI+06H] MOV AX,[BP+06H] ;AX←SS:[BP+06H] 相对寻址
;AX←DS:[BX+SI+06H]
相对基址变址
位移量可用符号表示 同一寻址方式有多种表达形式
指令操作数的表达-寄存器
r8——任意一个8位通用寄存器
AH AL BH BL CH CL DH DL
r16——任意一个16位通用寄存器
AX BX CX DX SI DI BP SP
reg——代表r8或r16
(4)基址变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上
变址寄存器(SI或DI)的内容构成:
有效地址=BX/BP+SI/DI
段地址对应BX基址寄存器默认是DS,对应BP
基址寄存器默认是SS;可用段超越前缀改变 MOV AX,[BX+SI] ;AX←DS:[BX+SI] MOV AX,[BP+DI] ;AX←SS:[BP+DI] MOV AX,DS:[BP+DI] ;AX←DS:[BP+DI]
微机原理第三章 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的寻址方式与指令系统
第三章80x86的寻址方式与指令系统3.1 指令系统概述3.2 80x86的寻址方式3.3 80x86的指令系统3.1 指令系统概述计算机的指令系统是计算机指令的集合,是计算机硬件的语言系统,程序员通过计算机指令使用计算机的硬件,按指令系统提供的指令有序地组成程序,完成特定的功能。
指令包括操作码和操作数两大部分操作码目的操作数(地址),源操作数(地址)如:MOV AX, 012FDH3.1用符号化的汇编语言指令编写的程序输入计算机后,由“汇编程序”把它翻译成二进制机器语言形式,才能在机器上执行。
机器语言指令格式如下:OP MOD DISP(低)DISP(高)DATA(低)DATA(高)OP代表操作码,MOD表示寻址方式,DISP代表位移量,DATA代表数据。
3.1OP 字段的具体信息:OP d/swd/s 位使用在双操作数指令中,因为80x86/88规定双操作数指令的两个操作数必须有一个操作数放在寄存器中:d 位指定所用寄存器用于目的操作数(d=1)还是源操作数(d=0);对于指令中有立即数,s=1表示把8位立即数扩展为16位。
w 位用于表示指令对字(w=1)还是字节(w=0)操作。
OP 字段是指令的第一个字节,8位不够时,还可占用第二个字节的3位,除指定操作功能外,还包含操作对象的特征信息。
MOD字段表示指令寻址方式,占1个字节。
MOD字段的具体信息:MOD REG R/MMOD占2位,用于区分寄存器寻址和存储器寻址,以及使用多少字节的偏移量。
00=存储器寻址方式,无偏移量;01=存储器寻址方式,使用1个字节偏移量(-128≤DISP≤127);10=存储器寻址方式,使用2个字节偏移量(0≤DISP≤65535);11=寄存器寻址方式,R/M表示寄存器,并与OP字段的w位一起决定寄存器是8位还是16位。
REG用于选择寄存器,并与OP字段的w位一起决定寄存器是8位还是16位。
MOD中寄存器的选择:REG或MOD=11的R/M w=0w=1000AL AX001CL CX010DL DX011BL BX100AH SP101CH BP110DH SI111BH DI3.1 R/M对有效地址形成的规定MOD R/M 00011011默认段寄存器w=0w=1000(BX)+(SI)(BX)+(SI)+DISP8(BX)+(SI)+DISP16AL AX DS001(BX)+(DI)(BX)+(DI)+DISP8(BX)+(DI)+DISP16CL CX DS010(BX)+(SI)(BX)+(SI)+DISP8(BX)+(SI)+DISP16DL DX SS011(BX)+(DI)(BX)+(DI)+DISP8(BX)+(DI)+DISP16BL BX SS100(SI)(SI)+DISP8(SI)+DISP16AH SP DS101(DI)(DI)+DISP8(DI)+DISP16CH BP DS110直接地址(SP)+DISP8(SP)+DISP16DH SI SS111(BX)(BX)+DISP8(BX)+DISP16BH DI DS3.1默认段寄存器是没有段跨越前缀时隐含的段寄存器,但如果在指令前指定了段跨越前缀,则使用指定段寄存器。
第3章 80X86的寻址方式和指令系统
(ESP)
(ESP)+32
出栈的ESP值丢弃!
(5)XCHG交换指令
格式: XCHG OPR1,OPR2 操作:(OPR1) (OPR2) 说明: 1)允许字/字节操作。386及其后继机型还允许双 字操作。不影响Flags。
2)交换在:通用Reg间、Reg与Mem间,不包 括段Reg,不允许Mem与Mem间,也不能有im.
(AL)=4
Bx
0的段码 1的段码 2的段码 3的段码 4的段码 5的段码
…..
ex3.39
(AL)=0FH
(DS)=F000H
(BX)=0040H(表首址) PA=16x(DS)+(BX)+(AL)
Bx AL 表首址
=F0000H+0040H+0FH ….
2C
F004F
=F004FH
执行XLAT后
Ex 3.33
PUSHAD
执行后,堆栈段
执行前,堆栈段
低地址 (ESP)
(ESP)原
(EDI) (ESI) (EBP) (ESP)原 (EBX) (EDX) (ECX) (EAX)
-32 -28 -24 -20 -16 -12 -8 -4
4)出栈操作
格式:POP DST ;双字/字 16位操作: ( DST) ((SP)+1,(SP)) (SP) (SP)+2 32位操作: (DST) ((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) (ESP) (ESP)+4 说明:DST可以是通用寄存器、段寄存器(CS除外)、 字存储单元,不影响Falgs。
Ex3.28 MOVZX EAX,Data 将Data单元中的16位数零扩展为32位数,送入EAX寄存 器中。 3)MOV、MOVSX、MOVZX的区别: MOV:源操作数、目的操作数等长 MOVSX、MOVZX:源操作数长度要小于目的操作数的长度。 P115 练习3.44 (1)MOV BX,-12 (BX)=0FFF4H MOVSX EBX,BX (EBX)=0FFFFFFF4H (3) MOV AH,7 (AH)=07H MOVZX ECX,AH (ECX)=00000007H
第三章 80X86寻址方式和指令系统
例3.6 寄存器相对寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
寄存器相对寻址过程示意
第三章 80x86寻址方式和指令系统
4、基址变址寻址
操作数在存储单元中,其有效地址EA可表示为
EA=
(BX) (BP)
(SI) (DI)
例1 MOV AX,[BX+SI] 或写成:MOV AX,[BX][SI] 例2 MOV AX,[BX+DI] 例3 MOV AX,[BP+SI] 例4 MOV AX,[BP+DI]
寄存器间接寻址 基址变址寻址
第三章 80x86寻址方式和指令系统
1、直接寻址
操作数在存储器单元中。 操作数所在的有效地址EA直接由指令指出。
例1 MOV AX,[3000H] 例2 MOV BL,BLOCK 例3 MOV BX,DATA1
例3.3 直接寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
例2 MOV AX,[BP+DI+1000H]
例3.8 相对基址变址寻址 第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
相对基址变址寻址过程示意
第三章 80x86寻址方式和指令系统
(二)32位指令模式下的存储器寻址
32位指令模式寻址结构由5部分组成: 段址+基址+变址﹡比例因子+偏移量
例3.1 立即寻址
第三章 80x86寻址方式和指令系统
第三章 80x86寻址方式和指令系统
立即寻址过程示意
第三章 80x86寻址方式和指令系统
二、寄存器寻址
操作数在寄存器中。 32位寄存器:EAX、EBX、ECX、EDX、ESP、EBP、
80X86的指令系统和寻址方式
- 字串:一串连续的字。
- 双字串:一串连续的双字。
3.2 80X86的寻址方式
• 数据寻址方式:是指获取指令所需的操 作数或操作数地址的方式
• 程序寻址方式:是指程序中出现转移和 调用时的程序定位方式
3.2.1 80X86的数据寻址方式 (共十种)
1、立即寻址方式
操作数作为指令的一部分,在直接指令中给出。
3.2.3操作数宽度和寻址宽度的确定
• 操作数宽度也称为“操作尺寸” • 寻址宽度也称为“寻址尺寸” • 实际上指的是操作数二进位数和可寻址的二进位数。 • 8086和80286的操作数宽度和寻址宽度都是16位的。 • 而32位处理器的操作数宽度和寻址宽度可以是16位的,
也可以是32位的,涉及到W域、缺省段属性及指令前缀 等概念。
按指令码中规定的寻址方式给出。此时,寻址所得到的不 是操作数,而是转移地址,用来更新IP内容。
JMP BX
..
2000:0FFFH
操作码
.. ..
2000:4000H
操作码
CS + BX(新 IP)
2000 4000
24000
..
(3)段间直接寻址 在段间直接寻址方式中,指 令码中将直接给出16位的段 地址和16位的段内偏移地址, 用来更新CS和IP内容。
汇编语言指令要解决的两个问题: 要指出进行什么操作——操作符; 要指出操作数和操作结果放在何处——寻址方式。
指令的基本构成:
目的
源
说明要执行的 操作对象,可以 是什么操作 有0个、1个或2个
指令举例: MOV AX , BX
操作码 操作数 ADD AX,[SI+6] INC BX NOP
第三章 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)。
操作数存放在存储单元中
disp disp
8位 或:物理地址 = [SS]×10H + [BP] + 16位
注意:BX,SI和DI使用DS段,BP使用SS段.
disp disp
例如: MOV
BX,[BX+6824H]
基址寻址——用BX,BP为基址寄存器进行寻址 变址寻址——用SI,DI为变址寄存器进行寻址
3.浮点数 浮点数据类型可分为三种:单精度浮点,双精度浮点和双扩展 的精度浮点.
3.1.3 指针数据类型 在实方式下有两种类型的指针:近指针(near)为一16位的段 内偏量,远指针(far)为一32位的逻辑地址(包括段地址和偏移 量). 在虚拟方式下也有两种类型的指针:近指针(near)为一32位 的段内偏量,远指针(far)为一48位的逻辑地址(包括段地址和 偏移量).
1,立即寻址 立即数寻址特点:指令执行速度快. 立即数只能是整数,且只能作为源操作数.
2,寄存器寻址方式 寄存器寻址方式的优点:不但可以减少指令码的长度,而且由 于操作数已存于寄存器中,执行速度较快. 寄存器既能作为源操作数,又能作为目的操作数. 例如: MOV AX,CX 该指令将CX(源操作数)的内容传送到AX寄存器(目的操作数) 中,其中源操作数CX,目的操作数AX都是寄存器寻址方式. 3,存储器寻址 指令给出了操作数在数据区中的地址信息. 五种不同的存储器寻址方式: 1)直接寻址方式
4)基址加变址寻址方式 操作数存放在存储单元中 (SI) 物理地址 = [DS]× 10H + EA = [DS]× 10H + [BX] + (DI) (SI) 或: 物理地址 = [DS]× 10H + EA = [SS]× 10H + [BP] + (DI)
例如: MOV AX,[BX+SI]
例如: MOV
AX,[7834H]
该指令将有效地址EA=8064H单元中的内容传送到AX寄存器中. 若(DS)=2000H,则该指令源操作数的存储单元的物理地址为 20000H+7834H=27834H.
2)寄存器间接寻址 操作数存放在存储单元中. 注意两点:一是寄存器中的内容是操作数的有效地址,而不是操作 数本身;二是只能用CPU中的基址寄存器BX,BP或变址寄存器DI, SI来间接寻址. 如果指令前面没有用前缀指令指明操作数在哪一段,则通常默 认段寄存器为DS.即:
重点内容 1 数据类型及存储规则. 2 指令的助记符格式. 3 8086的寻址方式. 4 8086指令系统. 难点内容 1 8086的寻址方式. 2 8086指令系统. 学时数 8学时
3.1
数据类型及其存储规则
3.1.1基本数据类型及存储 3.1.1基本数据类型及存储 基本数据类型:字节,字,双字,四字,双四字 字节——基本存储单元,占用内存的一个地址. 字——两个相邻字节组成的16位二进制; 双字——4个相邻字节组成的32位二进制数; 四字——8个相邻字节组成的64位二进制数; 双四字——16个相邻字节组成的128位二进制数.
80x86指令编码格式 3.2.2 80x86指令编码格式 指令编码格式包含操作码和操作数两部分. 操作码表示计算机执行什么操作. 操作数指明参与操作的数的本身,或规定了操作数的地址.
1)操作码字节.它是指令的第一字节,规定指令的操作类型, 是指令的必选字节,字节内容如下:
D7 D6 D5 D4 D3 D2 D1 D0
3.3 8086CPU的寻址方式 寻址方式——寻找指令或操作数存放地址的方法. 两种寻址方式:一种是用来对操作数进行寻址;另一种是用来 对转移地址或调用地址进行寻址,即对指令地址进行寻址. 3.3.1 操作数的寻址方式 指令的操作数存放位置有4种: l)立即寻址——操作数直接包含在指令字节中. 该操作数就称为立即数. 2)寄存器寻址——操作数存放在CPU的某个内部寄存器中. 3)存储器寻址——操作数在内存的数据区中. 4)操作数存放在I/O端口中
(2)堆栈操作指令 堆栈是一种数据结构,是在内存中开辟了一个比较特殊的存储 区,这个区域中数据的存取采用"后进先出"的原则.
堆栈段-----8086CPU在存储器分段管理时,划分了一个专门的 堆栈区. 格式: PUSH 源操作数 POP 目的操作数 举例: ① PUSH BX ② PUSH ES ③ PUSH DS ④ PUSH [SI] ⑤ POP AX ⑥ POP BX ⑦ POP [DI] 注意点: 1)8086CPU的堆栈操作总是按字进行的.即:PUSH AH,POP BL这样的字节操作是错误的.
4 段间间接寻址方式 转移的指令地址由一个双字存储单元的内容给出.
3.4 ① 数据传送类指令; ② 算术运算类指令;
8086指令系统 8086指令系统
指令系统按功能可分为6类:
③ 逻辑运算与移位类指令; ④ 字符串指令; ⑤ 控制转移类指令; ⑥ 处理器控制类指令. 3.4.1 数据传送类指令 分为4种: ① 通用数据传送指令 ② 累加器专用传送指令 ③ 地址传送指令 ④ 标志传送指令.
disp disp
以上为8086存储器寻址的完整格式,其他寻址方式都可以视为 此方式的子集,存储器的地址由基址,变址,相对地址三项组成, 可以只有其中的1项,2项,但要注意SI和DI不能同时出现,BX和BP 不能同时出现.凡有BP出现就使用SS段,无BP出现则使用DS(ES) 段.
例如:MOV
OP D W OP:表示指令操作码, D:表示指令中数据传送的方向.D=0为REG指定的源操作数, D=1为REG指定的目的操作数. W:表示操作数类型.W=0为字节,W=1为字.
2 寻址方式字节.它是指令的第二字节,规定操作数的寻址方 式.是指令的可选字节,字节内容如下:
D7 D6 D5 D4 D3 D2 D1 D0
字符串, 3.1.4 字符串,位及位串数据类型 字符串包括字节串,字串和双字串. 它们分别是字节,字和双字的相邻序列. 位及位串数据类型不介绍.
3.2 计算机指令格式 指令包括两部分:指令操作码部分和地址码部分. 指令操作码部分是给出该指令应完成何种操作. 地址码部分是用来描述该指令的操作对象. 指令格式可分为:零地址指令,一地址指令,二地址指令和三 地址指令. 零地址指令:只有操作码部分,而没有操作数的指令; 一地址指令:只有目的操作数的单操作数指令; 二地址指令:有两个地址指出两个操作数的地址; 三地址指令:优点:操作结束后,原两个操作数的内容均未被 破坏;缺点:增加一个地址后,使得指令码加长,增加了存储空间, 取指时间变长.
[BX] 物理地址 = [DS]×10H + EA = [DS]×10H + [SI] [DI] 或: 物理地址 = [SS]×10H + [BP]
例如: MOV
AX,[BX]
3)寄存器相对寻址
[BX] [SI] + 8位 物理地址 = [DS]× 10H + EA = [DS]×10H + 16位 [DI]
注意点: 1)通用传送指令的源操作数和目的操作数的位数必须一致. 指令可以传送8位数据,也可传送16位数据.举例③是8位数据传送, 举例④是16位数据传送. 2)立即数和寄存器CS和IP不能作为目的操作数. 3)源操作数和目的操作数不能同时为内存单元.立即数只能 作为源操作数. 4)用BX,SI,DI来间接寻址时,默认的段寄存器为DS,而用 BP来间接寻址时,默认的段寄存器为SS. 5)所有的通用传送指令都不改变标志. 6)在SS和SP的连续两条指令之间不要插入其他指令. 7)如果指令中两个操作数都不能明确地指明长度,可用WORD 或BYTE PTR指定为字或字节.
3.1.2 数字数据类型 数据类型包含:无符号整数,带符号整数和浮点数. 1.无符号整数(范围: ~ +2 n 1 0 例如8位字长则范围为0~+255. n为位数)
2.带符号整数(范围: 2 n 1 ~ +2 n 1 1 ) 带符号整数是用2的补码表示的二进制值.规定操作数的最高 位为符号位.例如8位字长则范围为-128~+127.
3.2.1
指令的助记符格式
助记符格式可用以下通式表示: L: 其中: L是标号,在标识符后面跟有冒号(:); op是助记符,具有相同功能的指令操作码的保留名; D1,D2,D3是任选的操作数参数,可以有零至三个. 例如: MOV AX , [BX] BX] 源操作数 op D1, D2, D3
操作码的助记符 目的操作数
5)相对的基址和变址寻址方式 操作数存放在存储单元中
(SI) 8位 物理地址 = [DS]× 10H + EA = [DS]× 10H + [BX] + + (DI) 16位 disp disp
(SI) 8位 或:物理地址 = [SS]×10H + [BP] + + 16位 ( DI)
1.通用数据传送指令 (1)最基本的传送指令 格式: MOV 目的操作数,源操作数 举例: ① MOV BL, AL ② MOV DS,AX ③ MOV DL,[DI] ④ MOV [BX],AX ⑤ MOV DX,[1000] ⑥ MOV BH,120 ⑦ MOV DX,1234H ⑧ MOV WORD PTR[SI], 1234H ⑨ MOV WORD PTR [BP], 2345H 注意:AX可以拆分成两个8位寄存器AH和AL使用.同样,BX, CX,DX也可以进行拆分.
基本规则:低字节在前高字节在后.
单字节数为9CH,一个 字的数为489CH,双字数为 6A2B489CH,四字数为 23C31A7A6A2B489CH,双四 字数为 4512A2AB3A8B927223C31A7A 6A2B489CH. 注意: 1 图中小地址在下面. 2 为了使CPU能够高效 地址读,写,应从偶地址开 始存放.