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

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为多少?
操作数的寻址方式

✓ 所以,该指令执行后 (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
第3章操作数的寻址方式

本章主要内容
▪ 预备知识 ▪ 1.什么是寻址方式? ▪ 2.有那些寻址方式?
1. 立即寻址方式 2. 寄存器寻址方式 3. 直接寻址方式 4. 寄存器间接寻址方式 5. 寄存器相对寻址方式 6. 基址变址寻址方式 7. 相对基址变址寻址
▪ 3.本章小结 2
2022/1/4
MOV AX,[SI] ;AX←DS:[SI] ▪ 该指令中有效地址存放于SI寄存器中,而操作数则
存Hale Waihona Puke 在数据段主存单元中。假设SI内容设置为 2000H,则该指令等同于MOV AX, [2000H]。
28
2.4 寄存器间接寻址方式
29
思考题
▪ 指出源操作数的寻址方式,判断对错,并 说明原因:
1. mov ax,[sp] mov ax,sp
▪ 书写汇编指令时要将16位有效地址加上中 括号。
23
2.3 直接寻址方式
▪ 例:将数据段中偏移地址2000H的一个16 位数据传送给AX MOV AX,[2000H] ;AX←DS:[2000H],指令代码:A10020
▪ 该指令中给定了有效地址2000H,它还不是 存储器的物理地址。默认情况下,有效地 址要与数据段寄存器DS一起构成操作数所 在存储单元的物理地址。
(ax):寄存器ax中的内容 (20000h):物理地址为20000h的内存单元
的内容 ((ds)×16+(bx)):
ds寄存器中的内容作为段地址×16加上bx寄存器 中的内容作为的偏移地址所指向的内存单元的内容
(X)的应用
▪ ax的内容为1100h (ax)=1100h
▪ 2000:0100内存单元的内容为0010h (20100h)=0010h
8086操作数的寻址方式解析

第三章 操作数的寻址方式
一、立即数寻址方式
直接把参与操作的数据写在指令中,是指令的一部分, 该数据称为立即数。操作数可以是各种数制下的数值(8位或16 位二进制数),也可以是带单引号的字符。 例如:MOV AX,2050H MOV AL,05H 观察下面指令中的错误: MOV AL,‘A’ MOV 05H,AL MOV BL,324D MOV CH,2050H 注意:1.立即数永远不能作目的操作数。 3 2.源操作数和目的操作数要互相匹配。
1
第三章 操作数的寻址方式
1、微机指令格式(补充):操作码 2、说明:
操作码:每条指令必有。
操作数
操作数:不同的指令其操作数的个数不同 例如: MOV AX,2050H
在上面的MOV指令中,MOV是操作码,AX和2050H是操作 数。其中: AX是目的操作数, 2050H是源操作数。该指令的 作用是将2050H存入寄存器AX中。
第三章 操作数的寻址方式
通信工程02班 汤林 1204140218
0
第三章 操作数的寻址方式 操作数是指令的处理对象。在指令中指定操作数或操 作数存放位置的方法称为寻址方式。寻址方式分三类共有7 种寻址方式。 1、操作数在指令中:立即数寻址 2、操作数在寄存器中:寄存器寻址 3、操作数在内存中: ①直接寻址 ②寄存器间接寻址 ③寄存器相对寻址 ④基址变址寻址 ⑤基址变址相对寻址
五、寄存器相对寻址方式
把参与操作数的偏移地址写在寄存器和一个相对位移量 中,而操作数在内存中。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 10 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS)
第三章操作数的寻址方式

第一节 汇编指令格式
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分别是字节、字和双字内存变量。
寻址方式

相对寻址是把程序计数器PC的内容加上指令格式中的形式D而形成操作数的有效。程序计数器的内容就是当 前指令的。“相对”寻址,就是相对于当前的指令而言。采用相对寻址方式的好处是程序员无须用指令的绝对编 程,因而所编程序可以放在内存的任何地方。 指令格式:MOV AX,[BX+1200H] 操作数物理 PA=(DS/SS)16H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp对于BX,SI,DI寄存器来说段寄存器默认为DS,对 于BP来说,段寄存器默认为SS
注意是否跳跃可能受到状态寄存器的操作数的控制,而跳跃到的分为绝对(由标记符直接得到)和相对(对 于当前指令的偏移量),跳跃的结果是当前指令修改PC程序计数器的值,所以下一条指令仍是通过程序计数器PC 给出。
操作数寻址
01
隐含寻址
02
立即寻址
03
直接寻址
04
间接寻址
06
相对
05
寄存器和寄 存器间接
变址
基址
块
这种类型的指令,不是明显地给出操作数的。而是在指令中隐含着操作数的。例如,单的指令格式,就不明 显地在字段中指出第2操作数的,而是规定累加寄存器AC作为第2操作数。指令格式明显指出的仅是第1操作数的D。 因此,累加寄存器AC对单指令格式来说是隐含。 如:DAA ;
指令的字段指出的不是操作数的,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指 令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。 如:MOV AX,#5678H注意:立即 数只能作为源寄存器的内容,加上变址寄存器的内容而形成操作数的有效。基址寻址的 优点是可以扩大寻址能力,因为与形式相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中 寻址。
汇编语言--操作数的寻址方式(三)

汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。
所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。
在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。
操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。
微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。
其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。
另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。
为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。
1、⽴即寻址⽅式操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。
⽴即数可以是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分别是字节、字和双字单元。
以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。
该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。
⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。
图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。
寻 址 方 式

变址寻址示意图
1.6 相对寻址
相对寻址(relative addressing)方式是为了程序的相对转移而 设计的。其原理是以程序计数器(PC)的内容为基址,加上给出的相对 偏移量rel作为新的有效的转移地址,从而实现程序的转移。值得注意 的是,相对偏移量rel是有正负之分的,以补码表示。偏移量的取值范 围是-128~+127。
MOV A,60H 后,A中的内容为55H,即A=55H
直接寻址示意图
1.2 立即数寻址
立即数寻址(immediate constant addressing)也称为立即寻址。 把参与运算的操作数直接在指令中给出,操作数紧跟在操作符之后,这 种由指令直接提供的操作数叫“立即数”,是一个常数,可以是8位或 者16位,并要在其前冠以“#”前缀,以区别于地址,主要用于赋值操 作。 例如: MOV A,#55H ;(A)←55H
例如:
SJMP 08H ;(PC)←(PC)+08H
该指令执行的操作是将PC当前值与08H相加,结果再送回到PC中, 成为下一条将要执行指令的地址。指令“SJMP 08H”是双字节指令, 其机器码为“80H、08H”,若存放在1000H处,当执行到该指令时,取 出操作码后PC指向1001H单元,取出偏移量后PC指向1002H单元(转移指 令首地址加2,有些指令如JB bit,rel则加3),再把PC的内容与操作数 08H相加,形成目标地址100AH,再送回PC,使得程序跳转到100AH单元 继续执行。
寻址方式
寻址方式
寻址就是寻找操作数的地址,寻找操作数地址的方式,称为操 作数地址的寻址方式,简称寻址方式。
寻址方式所对应的寄存器和存储空间
序号
寻址方式
存储空间