第三章操作数的寻址方式课堂
微机原理 宋志平 第三章课件

011
100 101
[BP]+[DI]
[SI] [DI]
[BP]+[DI]+D8
[SI]+D8 [DI]+D8
[BP]+[DI]+D16
[SI]+D16 [DI]+D16
110
111
D16(直接地址)
[BX] 15 1 0 0 0 1 0 操作码
[BP]+D8
[BX]+D8 8 D W 7
[BP]+D16
微机原理与接口技术
例: MOV CX , 36H[BX] MOV -20[BP] , AL
11
6、基址加变址寻址(Based Indexed addressing) 它的EA是由三部分组成的,基址寄存 器BX或BP的内容加上变址寄存器的内容 再加位移量。物理地址由基址寄存器按规 则选择段寄存器,也可以使用段超越。
01 11 00 10
CS DS ES SS
210 R/M
MOD
0:数据从寄存器传出 1:数据传至寄存器
24
MOD R/M 000 001 010
微机原理与接口技术 11 00 [BX]+[SI] [BX]+[DI] [BP]+[SI] 01 [BX]+[SI]+D8 [BX]+[DI]+D8 [BP]+[SI]+D8 10 [BX]+[SI]+D16 [BX]+[DI]+D16 [BP]+[SI]+D16 W=0 AL CL DL BL AH CH DH BH 210 R/M W=1 AX CX DX BX SP BP SI DI
第三章 操作数的寻址方式

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为多少?
汇编语言从入门到精通-3操作数的寻址方式

汇编语⾔从⼊门到精通-3操作数的寻址⽅式操作数的寻址⽅式 操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。
所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。
在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。
操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。
微机系统有七种基本的寻址⽅式:、、、、、、等。
其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。
另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——。
为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。
3.1 ⽴即寻址⽅式 操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。
⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。
例如: MOV AH, 80H ADD AX, 1234H MOV ECX, 123456H MOV B1, 12H MOV W1, 3456H ADD D1, 32123456H 其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。
该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。
⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。
图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。
图3.1 ⽴即寻址⽅式的存储和执⾏⽰意图3.2 寄存器寻址⽅式 指令所要的操作数已存储在某寄存器中,或把⽬标操作数存⼊寄存器。
微机原理第三章8086的寻址方式和指令系统PPT课件

04 寻址方式和指令系统的关 系
寻址方式对指令执行的影响
01
寻址方式决定了指令操作数的来源和访问方式,从而
影响指令的执行效率和正确性。
02
不同的寻址方式可能导致指令执行时间不同,因为它
们可能需要不同的计算步骤和内存访问次数。
03
寻址方式的正确选择可以简化指令的执行过程,提高
指令的执行效率。
指令系统对寻址方式的支持
在个人电脑(PC)领域,IBM PC/AT是基于8086的扩展版 80286开发的,奠定了现代PC 的基础。
8086也被广泛应用于工业控制、 自动化设备、仪器仪表等领域。
现代计算机系统中8086的继承和发展
尽管随着技术的进步,更先进的微处理器已经取代了8086在主流应用中的地位, 但8086的设计理念和架构仍然在许多嵌入式系统、低功耗应用中得到继承和发展 。
CALL指令用于调用子程序, 并将返回地址压入堆栈。
处理器控制类指令
处理器控制类指令用于控制 处理器的状态和行为。
包括HLT、INT、IRET等指令。
02
01
03
HLT指令用于暂停处理器执 行,等待中断或系统调用。
INT指令用于触发软件中断, 执行中断处理程序。
04
05
IRET指令用于从中断返回, 恢复程序的执行。
算术运算类指令用于执行 加、减、乘、除等算术运 算。
ADD指令将两个操作数 相加并将结果存储在目标 操作数中。
ABCD
包括ADD、SUB、MUL、 DIV等指令。
SUB指令从第一个操作数中 减去第二个操作数,并将结 果存储在目标操作数中。
逻辑运算类指令
逻辑运算类指令用于执行逻 辑与、或、非等逻辑运算。
第三章操作数的寻址方式

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

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

形式地址,是指令字结构中给定的 地址量。而寻址方式特征位,通常由间址 位(I)和变址位(X)组成,若指令无间 址和变址要求,则形式地址就是操作数的 有效地址;若指令中指明要进行变址或间 址变换,则形式地址就不是操作数的有效 地址,而必须按指定方式进行变换,才能 形成有效地址.因此,操作数的寻址过程 就是将形式地址变换为操作数的有效地址 的过程。
7.基址寻址方式
计算机中设置了一个寄存器,专门用 来存放基准地址,该寄存器就是基址寄存 器(RB)。RB既可在CPU中专设,也可由 指令指定某个通用寄存器担任。先将指令 地址码给出的地址A和基址寄存器RB的内 容通过加法器相加,所得的和作为有效地 址,再从存储器中读出所需的操作数。
这种操作数的有效地址由基址寄存 器中的基准地址和指令的地址码A相加得 到的方式称为基址寻址方式。
但是,由于操作数是指令的一部分, 不能修改,而指令所处理的数据大多都 是在不断变化的,故这种方式只适用于 操作数固定的情况。通常用于给某一寄 存器或存储器单元赋初值或提供一个常 数等。立即寻址方式表示形式为:
OPCODE 立即寻址方式 操作数DATA
3.寄存器寻址方式
当操作数不放在存储器中,而是放在 CPU的通用寄存器中时,存放操作数的寄 存器,其地址编号便可通过指令地址码 指出。这种所需要的操作数存放在某一 通用寄存器中,由指令地址码字段给出 该通用寄存器地址的方式,称为寄存器 寻址方式。
(2)存储器直接寻址方式
一般简称直接寻址方式,其指令地 址码字段直接给出存放在存储器中操作 数的存储地址。
有效地址EA数学形式为:EA=A
图4.5
5.间接寻址方式
间接寻址是相对于直接寻址而言的。 间接寻址时,指令地址码字段给出的不 是操作数的真正地址,而是存放操作数 地址的地址,换句话说就是形式地址A所 指定单元中的内容才是操作数的有效地 址.这种操作数有效地址由指令地址码 所指示的单元内容间接给出的方式,称 为间接寻址方式,简称间址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;(ax)←((ds)×16+(bx))
mov ax,[bp]
;(ax)←((ss)×16+(bp))
mov ax, es:[bp]
;(ax)←((es)×16+(bp))
19
2、寄存器间接寻址 例:假设有指令: mov ax, [bx],在执行时,
(ds)=3000h ,(bx)=2000h ,存储单元 32000h的内容是 1234h。问执行指令后, ax的值是什么?
第三章 操作数的寻址方式
1
第一节 汇编指令格式
汇编指令的格式:
指令助记符[操作数1 [,操作数2 ]][;注释]
根据操作数的个数分,有以下三种格式 :
1、双操作数指令 指令助记符 目的操作数( dst),源操作数( src) 运算之后,结果保存在目的操作数。
例:mov ax,1234h mov bx,5678h add ax,bx
4
概述
寻址方式:在指令中,指定操作数或操作数的存放 位置的方法称为寻址方式。
?操作数出现在指令中 ——立即数寻址 ?操作数保存在寄存器中 ——寄存器寻址 ?操作数保存在内存 ——存储器寻址 ?操作数保存在 i/o端口——i/o寻址 (见第八章)
5
第二节 操作数的寻址方式
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
13
1、直接寻址
指令所要的操作数存放在内存中,在指令中直接给 出该操作数的有效地址,这种寻址方式为 直接寻址 方式。 执行过程 物理地址 =(段寄存器 )×16+有效地址,其中段地址 在默认的 ds,如果使用段超越前缀,那么,段地址 可在其它段寄存器。
14
1、直接寻址
例:假设有指令: movax,[2000h]
7
立即数寻址(imm)
要点: ? 目的操作数不能使用立即数寻址。 例:mov 1234h,ax ? 立即数可以是 8、16位数。在双操作数指令, 两个操作数的位数、数据类型必须相同。 例:mov al,1234h mov al,bx mov bx,al mov ax,70h mov ax ,-70h
6
立即数寻址(imm)
操作数出现在指令中 ,是指令的一个组成部分。这 样的操作数叫做立即数 .以这种指定操作数的方式 就叫做立即数寻址 。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。
mov ax,1234h
mov ax,[1234]
17
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用 si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
18
2、寄存器间接寻址
在不使用段超越前缀的情况下,有下列规定: ?若有效地址用si、di和bx等之一来指定,则其缺省的段寄存 器为ds; ?若有效地址用bp来指定,则其缺省的段寄存器为ss(即:堆 栈段)。
2
第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
3
第二节 操作数的寻址方式
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
12
存储器寻址(mem)
指令所要的操作数存放在内存中,在指令中给出存 储器的地址来指定操作数的方法称为 存储器寻址方 式。 ?段地址 默认的段寄存器 ds或ss。如果使用段超越前缀,那 么,段地址可存放在其它段寄存器。 ?EA 形成方式:分为 5种 ?物理地址=段地址× 16+有效地址( EA)
8
第二节 操作数的寻址方式
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
9
寄存器寻址( 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号 )的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: ? 8位寄存器有: ah、al、bh、bl、ch、cl、 dh和dl。 ? 16位寄存器有: ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
,在执行时,
(ds)=3000h ,内存单元 32000h 的值为1234h。问该
指令执行后, ax的值是什么?指令变为: mov al,
[2000h], al
的值是什么?
PA=(ds)×16+2000h=32000h (ax)=1234h (al)=34h
图示
15
1、直接寻址
例:指令: mov bx,es :[1234h] ,(es)=1000h , (11234h)=1234h 。问该指令执行后, bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
16
1、直接寻址
要点:
?地址也常用内存变量名来表示,书写格式: v_1或
[v_1]。
如mov ax,varw
mov ax,[varw]
?与立即数寻址的区别
? 在指令中,直接寻址给出操作数的 EA,立 即数寻址给出操作数。
? 用数字书写时,格式不一样。
10
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中 varw ,varb 是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al
要点:在双操作数指令,源操作数和目的操作数都 可以使用寄存器寻址。
11
第二节 操作数的寻址方式
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
20
3、寄存器相对寻址
操作数在存储器中,其有效地址是一个基址寄存 器(bx、bp)或变址寄存器 (si、di)的内容和指令 中的8位/16位偏移量之和。