寻址方式
寻址方式
![寻址方式](https://img.taocdn.com/s3/m/84e2e82358fb770bf78a55b6.png)
计算机指令系统
1.寻址方式:指CPU指令中规定的寻找操作数所在的地址的方式。
操作数:MOV AL , 05H 操作码目的操作数,源操作数操作数引用时的字节顺序:若存放的信息是字节,则按顺序存放若存放的信息是字,则将字的低位字节存放在低地址,高位字节存放在高地址注:如果没有特别说明,寻址方式是指源操作数的寻址方式。
2.寻址方式之一:立即寻址操作数作为立即数直接存在指令中,可为字节或字。
3.寻址方式之二:寄存器(直接)寻址操作数包含在指令规定的8位、16位寄存器中。
寄存器寻址由于无需从存储器中取操作数,故执行速度快。
4.寻址方式之三:直接寻址在指令的操作码后面直接给出操作数的16位偏移地址。
这个偏移地址也称为有效地址EA。
操作数默认在DS段中。
如果操作数在DS以外的其他段(CS,SS,ES)中,指令中必须指明段寄存器(段超越)。
5.寻址方式之四:寄存器间接寻址操作数地址的偏移量(有效地址EA)存放在寄存器中。
以SI,DI, BX间接寻址,默认操作数在DS段中;以BP间接寻址,默认操作数在SS段中。
6.寻址方式之五:基址寻址基址寻址将规定的基址寄存器的内容加上指令中给出的偏移量,即可得到操作数的有效地址。
基址寄存器包括基址寄存器BX和基址指针寄存器BP。
7.寻址方式之六:变址寻址变址寻址将规定的变址寄存器的内容加上指令中给出的偏移量,即可得到操作数的有效地址。
变址寄存器包括源变址寄存器SI和目的变址寄存器DI。
8.寻址方式之七:基址-变址寻址指令中规定一个基址寄存器和一个变址寄存器,同时还给出一个8位或16位偏移量,将三者的内容相加得到操作数的有效地址。
4 种寻址方式
![4 种寻址方式](https://img.taocdn.com/s3/m/df266d9687c24028905fc355.png)
第3章 8086/8088指令系统寻址方式寻址方式:包含数据寻址方式和转移地址寻址方式。
这里指数据寻址方式。
它是指取得指令操作数地址的方式。
(1)立即寻址方式(2)直接寻址方式(3)寄存器寻址方式(4)寄存器间接寻址方式(5)寄存器相对寻址方式(6)基址变址寻址方式(7)相对基址变址寻址方式寻址方式:包含数据寻址方式和转移地址寻址方式。
这里指数据寻址方式。
它是指取得指令操作数地址的方式。
(1)立即寻址方式(2)直接寻址方式(3)寄存器寻址方式(4)寄存器间接寻址方式(5)寄存器相对寻址方式(6)基址变址寻址方式(7)相对基址变址寻址方式1 寄存器间接寻址方式微机原理寄存器间接寻址:操作数的有效地址是寄存器的内容,结合对应段寄存器的内容计算出操作数的物理地址,存储器中对应物理地址的内容即是操作数。
1 寄存器间接寻址方式微机原理例: MOV AX,[BX]假设DS寄存器的内容为 1000HBX寄存器的内容为 3600H那么源操作数的存储器的物理地址为1000H*16+3600H=13600H由于是16位的操作数,所以从13600H、13601H 2个单元读出内容送至AX。
1 寄存器间接寻址方式微机原理2 寄存器相对寻址方式微机原理寄存器相对寻址:操作数的有效地址由SI、DI、BX或BP之一的内容,加上指令中8位或16位相对地址构成。
例:MOV AX,[BX+0D8H]假设DS寄存器的内容为 6000HBX寄存器的内容为 4500H那么源操作数的存储器的物理地址为6000H*16+4500H+0D8H=645D8H有效地址2 寄存器相对寻址方式微机原理基址变址寻址:操作数的有效地址等于一个基址寄存器的内容和一个变址寄存器的内容之和。
基址寄存器:BX、BP 变址寄存器:SI 、DI例: MOV AL,[BX+DI]可以记成 MOV AL,[BX][DI]或记成 MOV AL ,[BX]+[DI]例:MOV AL,[BX] [DI]假设DS寄存器的内容为 6000HBX寄存器的内容为 4500HDI寄存器的内容为 1600H那么源操作数的存储器的物理地址为6000H*16+4500H+1600H=60000H+5B00H=65B00H有效地址3 基址变址寻址方式微机原理相对基址变址寻址:操作数的有效地址等于一个基址寄存器的内容、一个变址寄存器的内容以及一个偏移量之和。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/b7f89e4bbf23482fb4daa58da0116c175f0e1e60.png)
七种寻址⽅式在存储器中,操作数和指令字写⼊或读出的⽅式,有地址指定的⽅式,相联存储⽅式和堆栈存取⽅式,⼏乎所有的计算机,在内存中都采⽤地址指定⽅式,当采⽤地址指定⽅式的时候,形成操作数或指令地址的⽅式称为寻址⽅式,寻址⽅式分为两类,即为指令寻址⽅式和数据寻址⽅式,在传统⽅式设计的计算机中,内存中指令的寻址与数据的寻址是交替进⾏的⽴即数寻址⽅式:将操作数放在操作码的后⾯。
⼀起放在指令代码段中,在程序运⾏的过程中,程序直接调⽤该操作数,⽽不⽤到其他的地址的单元中去取得相应的操作数。
上述中的操作数也被称为⽴即数。
可以有不同的进制寄存器寻址⽅式:指令所要的操作数已经存储在某个寄存器中,或把⽬标操作数存⼊寄存器中,把在指令中指出所⽤的寄存器(寄存器助忆符)的寻址⽅式称为寄存器寻址⽅式寄存器寻址⽅式是⼀种简单快捷的寻址⽅式,源和⽬的操作数都可以是寄存器直接寻址⽅式:在指令格式的地址字段中直接指出操作数在内存中的地址id。
⼀般情况下数据放在数据段中,所以物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么操作数可存放在其他段直接寻址⽅式常⽤于处理内存单元的数据,操作数是内存变量的值,指令中直接给出操作数地址(DIR)的寻址⽅式称为直接寻址⽅式,寻址的对象为:1内存数据存储器,指令中直接地址表⽰2、特殊功能的寄存器SFR,在指令中⽤寄存器名称表⽰寄存器间接寻址⽅式:是指将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数,MCS-51规定R0或R1为间接寻址寄存器,他可寻址内部RAM低地位的12个字节单元内容,还可以采⽤数据指针(DPTR)作为直接寻址寄存器,寻址外部数据存储器的64k字节空间,但不能⽤本寻址⽅式寻址特殊功能寄存器寄存器的间接寻址需要以寄存器符号的形式来表⽰,并且在寄存器名称前⾯加上间接寻址符号“@”。
例如指令MOV A,@RO就使⽤了寄存器间接寻址⽅式,这条指令的意义就是将地址指针RO指向内部数据存储单元中的数据送⼊累加器A中。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/65bd27e58bd63186bcebbc9d.png)
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围: (1) 内部RAM的128个单元 (2) 特殊功能寄存器。除了以单元地址的形式外, 还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
例
JC
03H ;若进位C=0,则程序顺序执行,即 不跳转,PC= PC+2 ;若进位C=1, 则以PC 中的当前内容为基地址, 加上偏移量03H 后所得到的结果为 该转移指令的目的地址 。
程序存储区
1000 1001
40 03 1002 PC
…
…
1005
ALU C2
单片机的工作过程
例:
取指过程 执行过程
运算器 ①② 累加器A
MOV A,#09H
程序计数器
74H 09H
;把09H送到累加器A中
地址寄存器
外部地址总线AB
0002H PC= 0000H 0001H
内 部 数 据 总 线
0000H
存 储 器
(PC) (PC) (PC) 0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0
若进位c1则以pc中的当前内容为基地址加上偏移量03h后所得到的结果为该转移指令的目的地址程序存储区401000031001c21005alu1002pc指令指令寄存器寄存器译码译码地址地址译码译码程序计数器程序计数器地址寄存器地址寄存器累加器累加器a运算器运算器外部地址总线外部地址总线abab外部地址总线外部地址总线abab数据缓冲器数据缓冲器外部数据总线外部数据总线外部数据总线外部数据总线dbdb寄存器区寄存器区外部控制总线外部控制总线cbcb外部控制总线外部控制总线cbcb内部控制信号内部控制信号时钟及清零时钟及清零取指过程取指过程mova09h74h09h
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/448208baf121dd36a32d82a9.png)
程序计数器 地址寄存器 外部地址总线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是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/65bd27e58bd63186bcebbc9d.png)
…
20E0
…
47
ALU
MOVC A,@A+DPTR执行示意图
6.位寻址方式 MCS-51有位处理功能,可以对数据位进行操作,例如: MOV C,40H 是把位40H的值送到进位位C。 寻址范围包括: (1)内部RAM中的位寻址区。位有两种表示方法,例如, 40H;另一种是单元地址加上位,例如,(28H).0,指 的是28H单元中的最低位。它们是等价的。 (2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: a. 直接使用位地址。例如PSW.5的位地址为0D5H。
例
MOV
A, 3AH
程序存储区
;把3AH单元的内容送A。
500 501
E5 3A 3A
片内RAM区 10 10
ACC
MOV
A, 3AH执行示意图
3. 寄存器间接寻址方式 寄存器中存放的是操作数的地址 在寄存器的名称前面加前缀标志“@” 访问内部RAM或外部数据存储器的低256个字节时,只 能采用R0或R1作为间址寄存器。例如: MOV A,@Ri ;i=0或1 其中Ri中的内容为40H,把内部RAM中40H单元的内容送 到 A。 寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对片外数据存储器的64K字节的间接寻址,例如: MOVX A,@DPTR
例
现假设MOVC A,@A+DPTR指令存放在70H单元,ACC 中原存放值为 E0H,DPTR中值为2000H,则A +DPTR形 成的地址为20E0H。 20E0H单元中内容为 47H,则执行 该指令后,ACC中原E0H被47H 代替。该指令执行过程 示于图。
程序存储区 70 93 ACC (47)E0 DPH DPL 20 00
寻址方式
![寻址方式](https://img.taocdn.com/s3/m/6e6e19090029bd64793e2c62.png)
数据寻址的常见方式:1、隐含寻址这种类型的指令,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
例如单地址指令格式,就不给出第二操作数的地址,而是规定累加器ACC作为第二操作数的地址,指令中只是明显指出第一操作数。
隐含寻址的优点是有利于缩短指令字长,缺点是需要增加存储操作数的硬件和存储隐含地址的硬件。
2、立即(数)寻址这种类型的指令的地址码字段指出的不是操作数的地址,而是操作数本身,又叫立即数。
数据采用补码的形式存放。
立即寻址的优点是指令在执行阶段不访问主存,指令执行的时间最短,缺点是A的位数限制了立即数的范围。
(在定长指令码格式下,所有指令的长度都是一样的,这时候取每条指令的时间都一样,执行指令时立即数寻址最快,但是如果在变长指令码下,受到形式地址位数的限制,如果操作数比较大,那立即寻址方式在取指令的时间上要用时更多一点)3、直接寻址这种类型的指令的地址码字段的形式地址就是操作数的真实地址,取数操作直接取地址里面的内容,它的有点是简单,只需要访问一次主存,不需要专门计算操作数的地址,缺点是A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改,相对于立即寻址,直接寻址缩短了指令的长度。
4、间接寻址这种类型的指令是相对于直接寻址而来的,在直接寻址中,形式地址就是真实地址,在间接寻址中,形式地址是操作数地址的地址,即EA=(A),间接寻址可以是一次间接,也可以是多次间接。
它的优点是可以扩大寻址范围,因为EA的位数大于A的位数,便于编制程序,可以方便地实现子程序的返回,缺点是在执行使需要多次访问内存,访问速度慢。
这种寻址方式并不常用。
一般扩大寻址范围都采用寄存器间接寻址。
毕竟访问寄存器更快一点。
5、寄存器寻址这种类型的指令是直接给出操作数所在的寄存器的编号,EA=Ri,操作数就在Ri内存放。
寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,因此执行速度快,因为寄存器数量少,所以寄存器编号所占的位数也少,指令字长也比较短。
七种寻址方式.ppt
![七种寻址方式.ppt](https://img.taocdn.com/s3/m/ce9dd2fa7fd5360cba1adbcd.png)
寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对片外数据存储器的64K字节的间接寻址,例如:
MOVX A,@DPTR
(3)片外数据存储器的低256字节
例如:MOVX A,@Ri
(4)堆栈区
堆栈操作指令PUSH(压栈)和POP(出栈)使用堆 栈指针(SP)作间址寄存器
寄存器DPTR等。
1020
程序存储区 EA
片内RAM区
12
R2
4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围: (1) 内部RAM的128个单元 (2) 特殊功能寄存器。除了以单元地址的形式外, 还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。
地址 译码
寄存器区 内部控制信号
数据缓冲器 外部数据总线DB
指令 时钟及清零 寄存器
译码
外部控制总线CB
返回
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 1 0 0 0 0 0
3F 3E 3D 3C 3B 3A 39 38
图4.9 SETB 3DH 指令执行示意图
7.相对寻址方式
在相对寻址的转移指令中,给出了地址偏 移量,以“rel”表示,即把PC的当前值加上偏 移量就构成了程序转移的目的地址:
目的地址=转移指令所在的地址 + 转移指令的字 节数 + rel
偏移量rel是一带符号的8位二进制数补码数 。
范围是:–128 ~ +127
向地址增加方向最大可转移(127+转移指令字节) 个单元地址,向地址减少方向最大可转移 (128-转移指令字节)个单元地址。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/6c1ff2094431b90d6c85c71b.png)
七种寻址方式一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是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和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。
寻址方式
![寻址方式](https://img.taocdn.com/s3/m/0bc00d13e87101f69e31959f.png)
寻址方式:1.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。
2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。
4,直接寻址:指令中直接给出操作数所在的存储器地址。
5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。
7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。
数据传送类指令:一、以累加器为目的操作数的指令MOV A, Rn ; (Rn)→A,n=0~7MOV A, @Ri ; ((Ri))→A,i=0,1MOV A, direct ;(dir ect)→AMOV A, #data ; #data→A二、以Rn为目的操作数的指令MOV Rn, A ; (A)→Rn, n=0~7MOV Rn, direct ;(direct)→Rn, n=0~7MOV Rn, #data ; #data→Rn, n=0~7三、以直接地址direct为目的操作数的指令MOV direct, A ; (A)→directMOV direct, Rn ;(Rn)→direct, n=0~7MOV direct1, direct2;MOV direct, @Ri ;((Ri))→directMOV direct, #data ; #data→direct四、以寄存器间接地址为目的操作数的指令MOV @Ri, A ;(A)→((Ri)),i=0,1MOV @Ri, direct ;(direct)→((Ri))MOV @Ri, #data ; #data→((Ri))五、16位数传送指令MOV DPTR, #data16 ; #data16→DPTR唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/c157c38c360cba1aa811da85.png)
七种寻址方式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。
九种寻址方式
![九种寻址方式](https://img.taocdn.com/s3/m/16a14eb582d049649b6648d7c1c708a1284a0ab0.png)
九种寻址方式
计算机中,寻址方式是指指令或数据在内存中的存储地址的计算方式。
简单来说就是CPU执行指令或读取数据时所需要使用的地址。
目前常见的寻址方式有9种,分别是:
1. 直接寻址:所需数据存储地址直接在指令中给出,CPU直接读取指定地址中的数据。
直接寻址速度快,但内存空间利用率不高。
2. 间接寻址:所需数据存储地址存储在寄存器或内存单元中,通过读取该寄存器或内存单元的值获得数据的存储地址。
适用于数据地址动态变化的情况。
3. 寄存器寻址:所需数据存储在寄存器中,CPU直接读取该寄存器中的数据。
寄存器寻址速度快,但容量限制。
4. 自增寻址:每次读取数据后,地址自动加1,继续读取下一个数据。
适用于连续存储的数据,如数组。
5. 自减寻址:每次读取数据后,地址自动减1,继续读取前一个数据。
6. 索引寻址:先读取索引值,再加上一个偏移量得到数据存储地址,读取数据。
适用于多维数组和结构体的访问。
7. 相对寻址:读取相对于当前地址偏移量的数据。
适用于分支指令,如条件分支指令。
8. 基址寻址:用一个基地址加上一个偏移量得到数据存储地址。
基址寻址适用于大型程序中的数据分段。
9. 堆栈寻址:数据存储在堆栈中,CPU按照堆栈规则读取数据。
堆栈寻址适用于程序调用和中断处理。
以上就是常见的九种寻址方式,每种方式都有其适用场景和优劣势。
在程序设计时需要根据实际情况选择最适合的寻址方式,以提高程序的运行效率和内存利用率。
10种寻址方式的定义
![10种寻址方式的定义](https://img.taocdn.com/s3/m/f3a8bf2e571252d380eb6294dd88d0d233d43cd4.png)
10种寻址方式的定义寻址方式是指计算机系统用来定位并访问存储单元或数据的方式。
以下是常见的一些寻址方式:1.直接寻址(Direct Addressing):直接使用给定地址或指针来访问内存中的数据或指令。
2.间接寻址(Indirect Addressing):使用存储在一个地址或寄存器中的地址来访问数据,间接地定位到实际的数据存储位置。
3.相对寻址(Relative Addressing):使用相对于当前指令或指针的地址偏移量来定位数据,常用于访问数组或其他数据结构的元素。
4.基址寻址(Base Addressing):使用一个基址寄存器和一个偏移量来计算地址,定位到存储单元。
5.索引寻址(Index Addressing):通过一个索引寄存器的值和一个基地址来计算地址,以定位到数组或表中的元素。
6.变址寻址(Displacement Addressing):通过将寄存器中的地址与立即数相加或相减来计算目标地址。
7.间接相对寻址(Indirect Relative Addressing):通过使用相对地址来访问存储单元,但是该地址指向的是另一个存储位置的地址。
8.堆栈寻址(Stack Addressing):使用栈指针来访问栈中的数据,通常用于函数调用和返回时保存和恢复数据。
9.寄存器寻址(Register Addressing):直接使用CPU内部的寄存器地址来访问数据或指令。
10.变量寻址(Variable Addressing):在编程语言中,通过使用变量名来访问和操作变量的值。
这些寻址方式在不同的计算机体系结构和编程范式中有着不同的应用和特点,用于在计算机系统中有效地定位和访问数据。
3.2寻址方式
![3.2寻址方式](https://img.taocdn.com/s3/m/acb28969a45177232f60a29f.png)
3.2 寻 址 方 式
【例】 执行指令: CLR ACC.0 MOV 30H,C 第1条指令的功能都是将累加器(ACC)的位0清 “0”。第2条指令的功能是把位累加器(注:在指令 中用“C”表示)的内容传送到片内RAM位地址为30H 的单元。
3.2 寻 址 方 式
操作示意图如图3.8所示:
图3.8 指令SJMP 08H 的执行示意图
3.2 寻 址 方 式
7、位寻址
位寻址:指令中对数据位直接进行操作。位寻 址与直接寻址不同,位寻址只给出位地址,而不是 字节地址。可位寻址区为: (1) 片内RAM中的位寻址区20H~2FH,共16个单元, 128个位,位地址是00H~7FH。 (2) 特殊功能寄存器(SFR)的可寻址位。习惯上可寻址 位常用符号位地址表示,如TI、RI。
3.2 寻 址 方 式
3.2 寻 址 方 式
图3.6 指令MOVC A ,@A+PC的执行示意图
3.2 寻 址 方 式
后一条指令的功能是将累加器(A)的内容与数据 指针寄存器(DPTR)的内容相加形成指令跳转地址, 从而使程序转移到该地址运行,改变程序计数器 (PC)的内容,为无条件跳转指令。 【例】已知:(A)=08H,(DPTR)=2000H 执行指令JMP @A+DPTR后,(PC)=2008H, 程序从ROM的2008H地址开始执行。示意图如图 3.7所示。
3.2 寻 址 方 式
图3.3 指令 MOV A,30H执行示意图
3.2 寻 址 方 式
4、寄存器间接寻址
寄存器间接寻址:指令中寄存器中存放的不是 操作数而是操作数的地址,操作数是通过寄存器间 接得到的。而寄存器寻址中寄存器存放的就是操作 数。在间接寻址的寄存器前加前缀标志“@” 相区 别。同时寄存器间接寻址时访问片内RAM和片外 RAM有一些区别: (1)片内RAM:共有128B,采用形式为@R0、@R1或 SP,访问时用MOV操作符。
寻址方式
![寻址方式](https://img.taocdn.com/s3/m/bda42c886529647d272852b7.png)
寻址方式
1、立即(数)寻址:操作数直接出现在指令字中。
2、直接寻址:在指令的操作数地址字段直接给出操作数在内存中的地址。
例如 MOV R1,[2000H]
3、间接寻址:间接寻址意味着指令的地址码部分给出的地址A不是操作数的地址,而是存放操作数地址的
主存单元的地址,有效地址的计算公式为:EA=(A)。
4、寄存器寻址
寄存器寻址是在指令中直接给出操作数所在的通用寄存器的编号。
如 ADD R1,R2
5、寄存器间接寻址
寄存器间接寻址,在寄存器中给出的不是一个操作数,而是操作数在内存中的地址。
6、变址寻址:是把指令中的一个数值(称为变址偏移量)与指定的一个寄存器(称为变址寄存器)的内容相加之和作为操作数的地址。
MOV BX,[SI+1003H]
7、相对寻址:隐含引用的专用寄存器是程序计数器(PC),即EA=A+(PC),它是当前PC的内容加上指令地址字段中A的值。
8、基址寻址:是把程序中所用的一个地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令地址。
它与变址寻址、相对寻址形式上相似,但其用法却与二者有很大差别。
基地址
寄存器中的值由特权指令设定,用户不能在自己程序中修改。
主要用于为多道程序或浮动地址程序定位存储空间。
MOV SI,DATA[BX]
MOV BLOCK[BP],AX
9、基址-变址寻址: 基址寻址和变址寻址方式的结合。
MOV AX,COUNT[BX][SI]
10、段寻址方式
11、堆栈寻址方式
练习题:P125 3、4、6、12。
7种寻址方式
![7种寻址方式](https://img.taocdn.com/s3/m/05b4a09ea1116c175f0e7cd184254b35eefd1ad0.png)
7种寻址⽅式七种寻址⽅式1、(直接寻址⽅式)指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址⽅式为直接寻址⽅式。
在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么,操作数可存放在其它段。
例:假设有指令:MOV BX, [1234H],在执⾏时,(DS)=2000H,内存单元21234H的值为5213H。
问该指令执⾏后,BX的值是什么?解:根据直接寻址⽅式的寻址规则,把该指令的具体执⾏过程⽤下图来表⽰。
从图中,可看出执⾏该指令要分三部分:由于1234H是⼀个直接地址,它紧跟在指令的操作码之后,随取指令⽽被读出;访问数据段的段寄存器是DS,所以,⽤DS的值和偏移量1234H 相加,得存储单元的物理地址:21234H;取单元21234H的值5213H,并按“⾼⾼低低”的原则存⼊寄存器BX中。
所以,在执⾏该指令后,BX的值就为5213H。
由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据,可在指令中⽤段前缀的⽅式显式地书写出来。
下⾯指令的⽬标操作数就是带有段前缀的直接寻址⽅式。
MOV ES:[1000H], AX直接寻址⽅式常⽤于处理内存单元的数据,其操作数是内存变量的值,该寻址⽅式可在64K字节的段内进⾏寻址。
注意:⽴即寻址⽅式和直接寻址⽅式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。
在程序中,直接地址通常⽤内存变量名来表⽰,如:MOV BX, VARW,其中,VARW是内存字变量。
试⽐较下列指令中源操作数的寻址⽅式(VARW是内存字变量):MOV AX, 1234H MOV AX, [1234H] ;前者是⽴即寻址,后者是直接寻址MOV AX, VARW MOV AX, [VARW] ;两者是等效的,均为直接寻址2、(寄存器间接寻址⽅式)操作数在存储器中,操作数的有效地址⽤SI、DI、BX和BP等四个寄存器之⼀来指定,称这种寻址⽅式为寄存器间接寻址⽅式。
100寻址方式
![100寻址方式](https://img.taocdn.com/s3/m/d647fc58a9114431b90d6c85ec3a87c240288adf.png)
100寻址方式寻址方式是计算机系统中用于定位和访问存储单元的一种方式。
在计算机系统中,寻址方式可以分为直接寻址、间接寻址、寄存器寻址、立即寻址、相对寻址等多种方式。
下面将详细介绍这100种寻址方式。
1.直接寻址:直接给出存储单元的地址,将数据直接存取到或者从指定的内存地址中读取数据。
2.立即寻址:将操作数直接给出,不需要通过寄存器或者内存来获取操作数。
3.间接寻址:通过首先获取引用存储地址(指针),然后再通过这个存储地址来间接引用数据。
4.寄存器寻址:将操作数存储在寄存器中,然后进行操作。
5.相对寻址:相对于当前指令的地址,获取指定地址中的数据。
6.基址寻址:在操作数中加上一个基址寄存器的内容,求得实际的操作数地址。
7.变址寻址:在基址寻址的基础上,再加上一个变址寄存器的内容,计算最终操作数地址。
8.通过堆栈寻址:将操作数存储在堆栈中,通过堆栈指针获取操作数。
9.通过堆栈寻址(相对):通过基址寄存器和变址寄存器作为堆栈指针的相对指针,获取操作数。
10.间接寄存器寻址:通过间接寄存器的内容来访问内存中的数据,而不是直接使用地址。
11.通过PC寻址:将程序计数器(PC)作为操作数地址,获取操作数。
12.通过条件寻址:通过指定的条件判断是否需要进行操作数的寻址。
13.通过比较结果寻址:通过比较指令的结果来判断是否需要进行操作数的寻址。
14.通过条件寄存器寻址:通过条件寄存器中的值来判断是否需要进行操作数的寻址。
15.比较状态标志位寻址:通过CPU中的比较状态标志位来判断是否需要进行操作数的寻址。
16.执行跳转指令寻址:通过跳转指令的目标地址来寻址操作数。
17.通过数据缓存寻址:通过缓存中存储的数据来寻址操作数。
18.通过地址缓存寻址:通过缓存中存储的地址来寻址操作数。
19.通过控制器寻址:通过外部控制器来寻址操作数。
20.通过DMA寻址:通过直接存储器访问(DMA)来寻址操作数。
21.通过虚拟内存寻址:通过虚拟内存映射表来寻址操作数。
经典:7种寻址方式
![经典:7种寻址方式](https://img.taocdn.com/s3/m/b5c72865b0717fd5360cdcfb.png)
15.12.2020
7
的确,这两条指令执行的结果是完全相同的, 都是将00H单元中的内容送到A中去,但是执行的过 程不同,执行第一条指令需要2个机器周期,而第二 条则只需要1个机器周期,第一条指令变成最终的目 标码要两个字节(E5H 00H),而第二条则只要一个 字节(E8H)就可以了。
15.12.2020
15.12.2020
6
3.2.3 寄存器寻址
Register Addressing
对选定的工作寄存器R0~R7、累加器A、通用寄存器B、 地址寄存器DPTR中的数进行操作。 例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。
MOV AL,BL (8086CPU的寄存器寻址方式)
提一个问题:我们知道,工作寄存器就是内存单元 的一部分,如果我们选择工作寄存器组0,则R0就 是RAM的00H单元,那么这样一来,MOV A,00H 和 MOV A,R0不就没什么区别了吗?
寄存器间接寻址
变址寻址 相对寻址
位寻址
15.12.2020
寻址空间(操作数存放空间) 程序存储器
片内RAM低128字节、SFR 工作寄存器R0~R7,A,B,DPTR 片内RAM:@R0,@R1,SP 片外RAM:@R0 ,@R1,@DPTR 程序存储器:@A+PC,@A+DPTR 程序存储器256字节范围内:PC+偏移量 片内RAM的位寻址区(20H~2FH字节地址) 某些可位寻址的SFR
第三章 MCS-51指令系统 Instruction Set
§3.1 概述
7种寻址方式,111条指令
字节数
单字节指令:49条 双字节指令:45条 三字节指令:17条
运算速度
七种寻址方式
![七种寻址方式](https://img.taocdn.com/s3/m/1a586d016c85ec3a87c2c573.png)
七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是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分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。
该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
图是指令“MOV AX, 4576H”存储形式和执行示意图。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下: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等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 80x86指令系统
①直接寻址方式 最简单,直观;指令中直接以位移量形式,给 出操作数的有效地址EA;执行速度快,主要 用于存取位于存储器中的简单变量。 MOV AL, [1064H],设当前(DS)=2000H
操作码
(DS)*10H=20000H + 1064H 21064H
64 10
代 码 段
物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
计算EA的通式为:
EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]
第4章 80x86指令系统 有效地址可以由以下三种地址分量组成:
● 位移量 (Displacement) :它是存放在指令中的一个 8 位或 16 位的数,但它不是立即数,而是一个地址。 ● 基址(Base Address):它是存放在基址寄存器BX或BP中的 内容。
M
31000H
…
AX
40000H
AL
30000H
…
42000H
50 40
31000H
…
64H
40
50
64H
…
第4章 80x86指令系统
③寄存器间接寻址-变址寻址方式 MOV CL, [SI]
(DI) EA= (SI)
操作码
64 10
代 码 段
DS 20000H SI 1000H + 21000H 20000H … CL 45 21000H 45 …
DS DS,SS DS,ES DS SS DS SS
3. 寄存器 [SI/DI] 变址寻址 4. 基址+变址 [BX+SI/DI] 寻址 [BP+SI/DI] 5. 基址+变址 [BX+SI/DI+disp] +位移量 [BP+SI/DI+disp]
第4章 80x86指令系统
五. 举例
例:设当前有关寄存器的内容为:(BX)=6000H, (BP)=4000H, (SI)=2000H, (DS)=3000H, (ES)=3500H, (SS)=5000H, 试确定下列指令中存储器方式的 操作数在内存中的逻辑地址和物理地址。
第4章 80x86指令系统 4.1.2 8086/8088的寻址方式 所谓寻址方式就是寻找操作数存放地址(位置)的方法。 在8086/8088系统中操作数存放的位置用以下几种: ①固定寻址 ②操作数包含在指令字节中。即指令格式中操作数部分 就是操作数本身。这种操作数叫立即数操作数。 ③ 操作数存放在CPU的某个内部寄存器中。这种操作数 叫寄存器操作数。 ④ 操作数在内存的数据区中。这种操作数叫存储器操作 数。包括直接寻址、寄存器间接寻址、寄存器相对寻址;基址 变址寻址、基址变址相对寻址方式。 ⑤其它寻址方式:包括串操作指令寻址、I/O端口寻址、 转移类指令寻址。
(BX) EA= (BP) +
(DI) (SI)
8位 disp + 16位 disp
操作码
MOV [BX+DI+1234H], AH DS:40000H BX: 0200H DI: 0010H 1234H + 41444H
34 12
40000H … … 45
代 码 段
AH
45 41444H
数 据 段
第4章 80x86指令系统
② 寄存器间接寻址-基址寻址方式
设当前(DS)=3000H, (BP)=2000H, (BX)=1000H,(SS)=4000H MOV [BX], AL MOV AX, [BP]
M
(SS)*10H=40000H + (BP)= 2000H 42000H
+
DS 30000H BX 1000H
MOV AX, [0520H] MOV AX, [BX]
MOV AX, [SI+1000H]
MOV AX, [BP+6060H]
MOV AX, ES: [BX+SI+0050H]
其它寻址方式 1)I/O端口寻址方式(以8位立 即数的方式在指令中直接给出,端口号范围0255)
第4章 80x86指令系统
第4章 80x86指令系统
存储器寻址方式小结
操作数
偏移地址 (有效地址) 隐含的 段寄存器
1. 直接寻址 2. 寄存器 基址寻址
[disp] [BX]/[BP]
disp 寄存器值 寄存器值 (BX)+ (SI)/(DI) (BP)+(SI)/(DI) (BX)+(SI)/(DI)+disp (BP)+(SI)/(DI)+disp
● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内 容。
对于某条具体指令,这三个地址分量可有不同的组合。如果 存在两个或两个以上的分量,那么就需要进行加法运算,求出操 作数的有效地址(EA),进而求出物理地址(PA)。正是因为这三种 地址分量有不同的组合,才使得对存储器操作数的寻址产生了若 干种不同的方式。
第4章 80x86指令系统
1)固定寻址方式 有些单字节指令,规定CPU对某个固定的寄存器进
行。
例如:十进制加法的调整指令AAA,规定被调整的 数总位于AL中。 该指令用来调整AL中的结果,指令编码为:
OP 0011 0111
37H
第4章 80x86指令系统
2)立即数寻址方式 操作数就在指令中,当执行指令时,CPU直接从指 令队列中取得立即数,而不必执行总线周期。立即数 可以是8位的或16位的;只能是整数类型的源操作数; 主要用来给寄存器赋初值;指令执行速度快。 例如:MOV AL, 80H MOV AX, 1234H
①直接端口寻址方式
IN AL, 21H I/O接口 (表示从地址 21H的端口中读取数据到AL中)
01H
02H
…… 操作码
代 码 段
21H AL
80x86指令系统
1)I/O端口寻址方式——② 间接端口寻址方式(通过DX间接寻址, 16位端口地址放在DX中,端口范围0-65535) OUT DX, AL (将AL中的内容输出到地址由DX寄存器内容所指令的端口中)
存储器
AL
80H
存储器 操作码字节 指 令 码
AH 12
AL 34
操作码字节
34H 34
80H 80H
12H 12
指 令 码
第4章 80x86指令系统
3)寄存器寻址方式 操作数在CPU的寄存器中,指令中给出寄存器名。 源操作数和目的操作数均可采用寄存器寻址的方式。 寻址的指令长度短;操作数就在CPU内部进行,不需 要使用总线周期;指令执行速度快。 例如:MOV AX, CX
存储器 AX
CX
89 C1
指令码 (包括操作数)
第4章 80x86指令系统
4)存储器寻址方式 存储器寻址方式的操作数存放在存储器单元中。 因此,要存取操作数就必须知道其存储器的单元地 址。在指令中可以直接给出或间接给出操作数的地 址,以达到存取操作数的目的。 指令中给出的地址只是操作数的有效地址 (EA),并且是放在方括号(“[ ]”)中。若要 从存储器中存取操作数还须得到实际的地址(物理 地址)。物理地址=段基址左移四位+有效地址
I/O接口 0001H
DX 12 34
0002H
……
AL
1234H 80
80
AL
45
20000H
… 21064H 45
数 据 段
第4章 80x86指令系统
如果没有特殊指明,直接寻址方式的操作数一般在存储器的 数据段中,即隐含的段寄存器是 DS 。但是 8086/8088 也允许段超 越,此时需要在指令中特别标明,方法是在有关操作数的前面写 上操作数所在段的段寄存器名,再加上冒号。例如,若以上指令 中源操作数不在数据段而在附加数据段中,则指令应写为如下形 式: MOV AL,ES:[1064H] 在汇编语言指令中,可以用符号地址来表示位移量。例如: MOV AL,[value] 或MOV AL,value 此时value为存储单元的符号地址。
数 据 段
第4章 80x86指令系统
④ 基址加变址寻址方式
(BX) EA= (BP) +
(DI) (SI)
SS:40000H BP: 2000H + SI: 1200H 43200H 40000H
MOV AH, [BP+SI]
M
AH
…
56H
56H
…
43200H
第4章 80x86指令系统
⑤基址加变址加位移量