操作数的寻址方式
第三章 操作数的寻址方式

2
一、立即数寻址方式(P24)
直接把参与操作的数据写在指令中,是指令的一部分, 该数据称为立即数。操作数可以是各种数制下的数值(8位或16 位二进制数),也可以是带单引号的字符。 例如:MOV AX,2050H MOV AL,05H MOV AL,‘A’ 观察下面指令中的错误: MOV 05H,AL MOV BL,324D MOV CH,2050H 注意:1.立即数永远不能作目的操作数。 2.源操作数和目的作码
操作数
2、说明:
操作码:每条指令必有。 操作数:不同的指令其操作数的个数不同 例如: MOV AX,2050H
在上面的MOV指令中,MOV是操作码,AX和2050H是操作 数。其中: AX是目的操作数, 2050H是源操作数。该指令的 作用是将2050H存入寄存器AX中。
7
四、寄存器间接寻址方式(P27)
把参与操作数的偏移地址写在寄存器中,而操作数在内 存中。物理地址的计算需要利用段寄存器。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器只能为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS) 例1: MOV [BX],2050H 目的操作数[BX]是寄存器间接寻址方式。 例2: MOV AX,[BP] 原操作数[BP]是寄存器间接寻址方式。
答案: ① MOV AX, [ARRAY+8] ② MOV SI, ARRAY+8 MOV AX ,[SI] ③ MOV SI,8 MOV AX ,[ARRAY+SI] ④ MOV BX,ARRAY MOV SI ,8 MOV AX,[BX][SI]
17
例4:指令MOV AX,[BX] [SI] ( 或写为MOV AX,[BX+SI] ) 若(DS)=2000H,(BX)=0500H,(SI)=0010H, (2050FH)=00H,(20510H)=12H,(20511H)=34H, (20512H)=56H。则: ①偏移地址为多少? ②物理地址为多少? ③指令执行完后AX为多少?
寻址方式

格式 操作码θ RX Rb D
变址寄存器号 基址寄存器号 位移量
S =((RX)+(Rb)+ D) 便于处理两维数组。
S =((RX)+(Rb)+ D) 便于处理两维数组。
例. 访问二维表格。
(RX)
((RR令bX)):指+D向指向一行各行中起各始元素;(Rb。)+D
DRR为bX初初表值值格为 为首00, ,址每 每访 访问问一一行列,,((RRbX))++41;。
(4)相对寻址
指令给出位移量,PC内容与位移量之和为有
效地址。
或隐含指定 位移量
格式 操作码θ PC ±D
有效地址相对 PC上下浮动,给
S =((PC)±D)
编程带来方便。
(5)页面寻址 指令给出位移量,PC的高位部分与位移量拼 接,形成有效地址。
栈顶
S
... ... ...
堆栈向上生成 压栈:S-P(S自P动),减自1,减再型间存址数。。SP 栈顶 出栈:先 (SP取)数+,,自SP增再型自间动址加。1。
... ... ...
M
低
S
高
SP既可出现在指令中,也可隐含约定。
4.变址、基址寻址及其变化 (1)变址寻址 指令给出一个寄存器号和一个地址量,寄存 器内容与地址量之和为有效地址。
存储空间中任何一个定长区 Rb
间(4K)。
4K
改变Rb的内容,程序能访问
存储空间中任何一个与基址
保持相同距离 …...
M D=2
D=2
便指于定的访元问素两。维数组中某类 基80址X8方6计式算的物一理种地变址化:——
第三章操作数的寻址方式

第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
如mov ax,varw
mov ax,[varw]
与立即数寻址的区别
在指令中,直接寻址给出操作数的EA,立 即数寻址给出操作数。
用数字书写时,格式不一样。
mov ax,1234h
mov ax,[1234]
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
3、寄存器相对寻址
立即数寻址(imm)
操作数出现在指令中,是指令的一个组成部分。这 样的操作数叫做立即数.以这种指定操作数的方式 就叫做立即数寻址。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。
七种寻址方式

程序计数器 地址寄存器 外部地址总线AB 外部地址总线AB
0002H PC= 0000H 0001H
0000H
内 部 数 据 总 线
(PC) (PC) (PC)
执行过程
运算器 ①② 累加器A 累加器A 存 储 器
0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0
…Leabharlann MOVC A,@A+DPTR执行示意图 ,@A+DPTR执行示意图
…
6.位寻址方式 MCS-51有位处理功能 可以对数据位进行操作,例如: 有位处理功能, MCS-51有位处理功能,可以对数据位进行操作,例如: MOV C,40H C, 是把位40H的值送到进位位C 40H的值送到进位位 是把位40H的值送到进位位C。 寻址范围包括: 寻址范围包括: 内部RAM中的位寻址区。位有两种表示方法,例如, RAM中的位寻址区 (1)内部RAM中的位寻址区。位有两种表示方法,例如, 40H;另一种是单元地址加上位,例如,(28H).0, 40H;另一种是单元地址加上位,例如,(28H).0,指 的是28H单元中的最低位。它们是等价的。 28H单元中的最低位 的是28H单元中的最低位。它们是等价的。 (2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: 可寻址位在指令中有如下4种的表示方法: 直接使用位地址。例如PSW.5的位地址为0D5H PSW.5的位地址为0D5H。 a. 直接使用位地址。例如PSW.5的位地址为0D5H。
程序存储区 1020 EA 12 R2
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: 操作数直接以单元地址的形式给出: A, MOV A,40H 寻址范围: 寻址范围: 内部RAM 128个单元 RAM的 (1) 内部RAM的128个单元 特殊功能寄存器。除了以单元地址的形式外, (2) 特殊功能寄存器。除了以单元地址的形式外, 可用寄存器符号的形式给出 例如: 的形式给出。 还可用寄存器符号的形式给出。例如: A, A,P0是等价的 是等价的。 MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
七种寻址方式

七种寻址方式一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。
例如:MOV AH,80H ADD AX,1234H MOV ECX,123456HMOV B1,12H MOV W1,3456H ADD D1,32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD,EAX ADD VARW,AX MOV VARB,BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH,78h ADD AX,1234h MOV EBX,12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX,EBX MOV AX,BX MOV DH,BL等。
三、直接寻址方式指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。
在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。
七种寻址方式

七种寻址方式1、立即寻址方式:操作数就包含在指令中。
作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。
立即数可以是8位的,也可以是16位的。
例如:指令: MOV AX,1234H则: AX = 1234H2、寄存器寻址方式:操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP 和BP等。
对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数因而可以取得较高的运算数度。
3、直接寻址方式:操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)注:操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
例如:MOV AX,[8054]如(DS) = 2000H,则执行结果为(AX) = 3050H(物理地址=20000+8054=28054H)28054H里的内容为3050H在汇编语言指令中,可以用符号地址代替数值地址如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是等效的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE 或MOV AX,ES:[VALUE]4、寄存器间接寻址方式:操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。
在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。
如果有效地址在BP中,则以SS段寄存器中的内容为段值例如:MOV AX,[SI]如果(DS) = 5000H (SI) = 1234H则物理地址= 50000 + 1234 = 51234H51234H地址中的内容为:6789H执行该指令后,(AX) = 6789H5、寄存器相对寻址方式:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和BX 8位位移量EA(有效地址) = BP +SI 16位位移量DI在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的段寄存器是SS。
操作数的寻址方式

2.立即寻址方式
指令字中的地址字段指出的不是操 作数的地址,而是操作数本身。这种所 需的操作数由指令的地址码字段直接给 出的寻址方式称为立即寻址方式。用这 种方式取一条指令时,操作数立即同操 作码一起被取出,从而节省了访问内存 的时间,提高了指令的执行速度,所以 这种寻址方式的特点是指令执行时间很 短。
(2)存储器间接寻址方式
存储器间接寻址时,需要访问两次 存储器才能取得数据,第一次先从存储 器读出操作数地址,第二次才能根据读 出的操作数地址再取出真正的操作数。
有效地址EA的数学形式为: EA=(A), 即Data=(EA)=((A))
6.相对寻址方式
所谓相对寻址方式,是指根据一个 基准地址及其相对量来寻找操作数地址 的方式。根据基准地址的来源不同,它 又分为基址方式和变址方式,以及PC相 对寻址方式,这里主要指后者。
直接寻址方式表示形式为:
OPCODE 直接寻址方式 操作数直接地址A
直接寻址方式又可分为寄存器直 接寻址和存储器直接寻址两种。
(1)寄存器直接寻址方式
指令地址码字段直接给出所需操作数在 通用寄存器中地址编号。其表示形式为:
OPCODE 寄存器直接寻址 寄存器地址编号Ri
有效地址EA数学形式为:EA=Ri 。
间接寻址又有一次间址和多次间址 之分,一次间址是指形式地址A是操作数 地址的地址,即EA=(A);多次间址是指 这种间接变换在二次或二次以上.若 Data表示操作数,间接寻址过程可用如 下逻辑符号表示:
一次间接寻址 Data=(EA)=((A))
二次间接导址 Data=((EA))=(((A)))
但是,由于操作数是指令的一部分, 不能修改,而指令所处理的数据大多都 是在不断变化的,故这种方式只适用于 操作数固定的情况。通常用于给某一寄 存器或存储器单元赋初值或提供一个常 数等。立即寻址方式表示形式为:
第三章操作数的寻址方式

P33 1、2、3、5、6(单数)、
图示
1、直接寻址
例:指令:mov bx,es:[1234h],(es)=1000h, (11234h)=1234h。问该指令执行后,bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
1、直接寻址
要点:
地址也常用内存变量名来表示,书写格式:v_1或 [v_1]。
综合
例4:如图所示,取第三个字数 据→(dx) 解:取第3个数据,其偏移量: num+3 (1)直接寻址: mov dx,num+4 ;num为字变量 (2)寄存器间接寻址: lea bx,num+4 mov dx,[bx]
综合
(3)寄存器相对寻址: mov si,4 mov dx,num[si]
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
寄存器寻址(reg)
指令所要的操作数已存储在某寄存器中,或把目标 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号)的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: 8位寄存器有:ah、al、bh、bl、ch、cl、 dh和dl。 16位寄存器有:ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中varw,varb是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
✓ 所以,该指令执行后 (BX)=5213H
……
21234H 13H
21235H 52H
……
2020年5月9日星期六
13
思考问题
MOV AX,[2000H]
➢ 问1:右边所示的三条指令有何不同?
MOV AX,2000H MOV AX,2000
✓ 源操作数的寻址方式不同:第一条指令为直接寻址方式;后
➢ 除IP、FR外的所有寄存器(包括段寄存器)都可以用作寄 存器寻址方式。
➢ 由于操作数存在于CPU中,指令执行时不需访存,因此具 有较快的执行速度。
2020年5月9日星期六
9
寄存器寻址方式举例
➢ MOV AX , 1234H ;(AX)=1234H
✓ 源操作数是立即数寻址方式;
✓ 目的操作数是寄存器寻址方式。
✓物理地址PA =(DS)×16 + EA
➢ 若数据不在DS段,可用显式指明段寄存器的段超越方式。
✓指令形式:MOV ES:[100H] , AL
✓物理地址PA =(ES)×16 + 100H
➢ 指令MOV AX , [100H]与MOV AX , SS:[100H]执行结果是 否相同?
✓ 不相同!所访问存储单元不同。
2位置
➢ 指令中 ✓ 立即数寻址方式;
➢ 寄存器中 ✓ 寄存器寻址方式;
➢ 存储单元中 ✓ 直接、间接、相对、基址变址、相对基址变址寻址方式;
区别在于:形成操作数有效地址的方式不同;
2020年5月9日星期六
4
地址加法器
∑
20位
AH AL 通用寄存器
BH BL
Imm 立即数
R
寄存器
SR
段寄存器
M
存储单元
S
源操作数
D
目的操作数
() …中的数据
[]
地址单元
2020年5月9日星期六
➢ (BX)=1000H ➢ [BX]=…… ➢ [2000H]=…… ➢ (AX)=(AX)+(BX)
6
3.1 立即数寻址方式
➢ 立即数寻址方式
✓ 操作数的数值紧跟在操作码之后,直接在指令中出现。
2020年5月9日星期六
14
3.4 寄存器间接寻址方式
➢ 寄存器间接寻址方式 ✓操作数在存储单元中,指令的操作码之后给出存放该单元 有效地址的寄存器编码或名称。
3.0 寻址方式预备知识
指令格式
操作码
操作数
➢ 指令由操作码和操作数两部分组成; ✓ 操作码说明计算机要执行哪种操作,用一个唯一的助记符 表示,对应着一个机器指令的二进制编码; ✓ 操作数是指令执行的参与者,即各种操作的对象;
➢ 指令中操作码是不可缺少的,但操作数则是可选部分; ✓ 16位系统中,操作数的数目一般为0~2个,用逗号分隔。
➢ MOV BX , AX ; (BX)=(AX)=1234H
✓ 源操作数及目的操作数均为寄存器寻址方式。
➢ MOV X , AX
✓ 源操作数是寄存器寻址方式;
✓ 目的操作数是直接寻址方式。
2020年5月9日星期六
10
3.3 直接寻址方式
➢ 直接寻址方式
✓ 操作数在存储单元中,指令的操作码之后给出该存储单元的 有效地址。
CH CL DH DL
SP BP SI DI
16位
16位
CS
DS
SS
输入/输出
ES
控制电路
IP
外
内部暂存器
部
总
线
ALU
标志寄存器
执行部分 控制电路
12 3 4 5 6
8位
指令队列缓冲器
①②③MOV AX , 1B[B2XX3]4H
执行部件 (EU)
总线接口部件 (BIU)
寻址方式中的符号表示
符号 含义
➢ 特点 ✓ 优点:执行速度快;
不需访存即可执行
✓ 缺点:立即数不能修改,通用性差(适用于常数)。
➢ 注意:
✓ 立即数不能作为目的操作数;
✓ 可以为8位也可以为16位,常用于给寄存器赋值。
2020年5月9日星期六
7
立即数寻址方式举例
➢ MOV BL , 12H ➢ MOV BX,3478H
✓机器指令:BB 78 34 ✓ 在存储器中的存放格式
2020年5月9日星期六
12
直接寻址方式——举例
➢ 执行指令MOV BX , [1234H]时,(DS)=2000H,存储单元 21234H的值为5213H,问执行该指令后BX的值是什么?
✓ 该指令源操作数的寻址方式为直接寻址方式;
✓ 有效地址EA = 1234H,无段超越,为默认的DS段;
✓ 物理地址PA = 2000H ×16 + 1234H = 21234H
答:由控制器区分,通过CS和IP寻址的为指
令,其他为数据。
2020年5月9日星期六
2
示例指令
➢ 数据传送指令 ✓MOV <目的操作数>,<源操作数>
➢ 例如: ✓MOV AX , 1234H ✓MOV AX , BX ✓MOV AX , [BX]
➢ 注意:寻址方式是针对操作数的,而不是指令的。 ✓ 指定操作数的寻址方式时,一定要指明是对源操作数还是对 目的操作数而言。
➢ 有效地址EA
✓ 也称为偏移地址,是相对于段起始地址的偏移量;
✓ 指令中,EA可以是数值形式,也可以是符号地址形式;
✓例如:MOV AX , [100H]
;数值地址必须加方括号
MOV AX , DATA
;符号地址必须事先定义
2020年5月9日星期六
11
直接寻址方式——物理地址的形成
➢ 在默认情况下,数据在DS段中
2020年5月9日星期六
1
寻址方式
➢ 寻址方式可分为指令寻址和数据寻址两种类型;
本章主要介绍数据寻址方式。
➢ 数据寻址方式
✓ 在指令中,指定操作数或操作数存放位置的方法。
➢ 一般,指令系统中会设计多种操作数的寻址方式;
✓ 操作数采取不同的寻址方式,指令的执行速度也会不同。
思考:数据、程序都在存储器中,如何区分?
两条指令为立即数寻址方式;
✓ 数据数制不同:前两条为十六进制;第三条为十进制。
➢ 问2:MOV AX,X 和 MOV AX,[X] 效果一样吗?
✓ 一样。符号地址加不加括号指的都是之前定义的单元。
➢ 问3:高级语言的 y=x; 用汇编指令如何实现?
✓ 需要使用两条指令完成赋值。
MOV AX,X MOV Y ,AX
BH
BL
MOV X1 , 34
MOV AL , 300 正确吗? 位数不匹配,不正确!
代码段
BB
操作码
78
低地址单元
34
高地址单元
2020年5月9日星期六
……
8
3.2 寄存器寻址方式
➢ 寄存器寻址方式 ✓操作数在寄存器中,指令的操作码之后给出该寄存器的编 号或名称。 ✓ 某些系统的指令是将寄存器编号与操作码一起编码的。