直接寻址和间接寻址
80C51单片机指令系统的7种寻址方式

80C51单片机指令系统的7种寻址方式寻址方式就是寻找操作数或指令地址的方式。
寻址方式包含两方面的内容:一是操作数的寻址,二是指令地址的寻址(如转移指令、调用指令)。
寻址方式是计算机性能的具体表达,也是编写汇编语言程序的根底,必须非***悉并灵活运用。
对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。
若不特别声明,后面提到的寻址方式均指源操作数的寻址方式。
80C51单片机指令系统共有7种寻址方式,包括:立即寻址、存放器寻址、直接寻址、存放器间接寻址、变址寻址、相对寻址和位寻址。
现以7条指令为例说明这7种寻址方式。
(1)立即寻址:将操作数直接写在指令中。
如指令①:MOV A,#3AH 执行的操作是将立即数3AH送到累加器A中,因为指令中有立即数3AH,所以称此寻址方式为立即寻址。
注意,立即数前面必须加“#”号,以区别立即数和直接寻址。
该指令的执行过程如图1所示。
图1 立即数寻址示意图(2)存放器寻址:是指将指令操作数存放于存放器中,存放器包括工作存放器R0~R7、累加器A、通用存放器B、地址存放器DPTR等。
如指令②:MOV A,R0 ;(A)←(R0)该指令将存放器R0中的数送入累加器A中,因为指令源操作数为存放器R0,所以称此寻址方式为存放器寻址。
如果程序状态存放器PSW的RS1RS0=00(选中第0组工作存放器,对应地址为(00H~07H),设RAM区00H 的内容为20H,则执行MOV A,R0指令后,累加器A中的内容变为20H。
该指令执行过程如图2所示。
图2 存放器寻址示意图(3)直接寻址:是指把存放操作数的内存单元的地址直接写在指令中。
在80C51单片机中可以直接寻址的存储器主要有内部RAM区和特殊功能存放器SFR区。
如指令③:MOV A,30H ;(A)←(30H)该指令将地址为30H的存储单元的内容送入累加器A,因为指令源操作数为地址直接给出的存储单元,故称此寻址方式为直接寻址。
寄存器与7种寻址方式

一、寄存器总共有14个16位寄存器,8个8位寄存器通用寄存器:数据寄存器:AH(8位) AL(8位) AX(16位) (AX和AL又称累加器)BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器)CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL 用于移位)DH(8位) DL(8位) DX(16位) (DX一般用来做32位的乘除法时存放被除数或者保留余数)指针寄存器:SP 堆栈指针(存放栈顶地址)BP 基址指针(存放堆栈基址偏移)变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,即作为存储器(短)指针使用。
作为通用寄存器,它们可以保存16位算术逻辑运算中的操作数和运算结果,有时运算结果就是需要的存储单元地址的偏移.SI 源地址(源变址寄存器)DI 目的地址(目的变址寄存器)控制寄存器:IP 指令指针FLAG 标志寄存器①进位标志CF,记录运算时最高有效位产生的进位值。
②符号标志SF,记录运算结果的符号。
结果为负时置1,否则置0。
③零标志ZF,运算结果为0时ZF位置1,否则置0。
④溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。
溢出时OF位置1,否则置0。
⑤辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。
⑥奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。
当结果操作数中1的个数为偶数时置1,否则置0。
段寄存器CS 代码段IPDS 数据段SS 堆栈段SP BPES 附加段二、七种寻址方式:1、立即寻址方式:操作数就包含在指令中。
作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。
立即数可以是8位的,也可以是16位的。
例如:指令: MOV AX,1234H则: AX = 1234H2、寄存器寻址方式:操作数在CPU内部的寄存器中,指令指定寄存器号。
8051单片机寻址方式

8051单片机寻址方式8051单片机共有7种寻址方式。
寻址方式是指令中确定操作数的形式,用来确定操作数所处的存储空间。
1.立即寻址:在指令中直接给出操作数MOV A, #80H 8位操作数MOV A, #2000H 16位操作数2.直接寻址:指令中直接给出操作数地址(1)SFR,这一存储空间只能使用直接寻址MOV PSW, #50H(2)内部数据RAM,这一存储空间可以使用直接寻址和寄存器间接寻址MOV A, 30H3.寄存器寻址:以通用寄存器的内容作为操作数(通用寄存器包括A, B, DPTR, R0~R7)INC DPTR注意:A、B既是通用寄存器,也是SFR(直接寻址)4.寄存器间接寻址:以寄存器中的内容作为操作数的地址能够用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP区分内部数据RAM寻址和外部数据RAM寻址:外部数据RAM寻址指令上采用MOVX 对内部数据RAM寻址:使用8位的R0或者R1即可MOV @R0, A对外部数据RAM寻址:使用P2端口提供高8位地址,使用R0或者R1提供低8位地址;或者使用16位的DPTR提供地址MOVX A, @R1MOVX @DPTR, A5.变址寻址:以基址寄存器PC或者DPTR与变址寄存器A中的内容之和作为操作数的地址变址寻址只能对程序存储器中的数据进行寻址,由于程序存储器是只读的,因此变址寻址只有读操作,指令上采用MOVCMOVC A, @A+DPTRMOVC A, @A+PC6.相对寻址:用于修改PC的值,使得PC加上指令中给出的一字节的偏移量由于转移指令有两字节和三字节这两种形式,因此偏移量的范围分别为-126~+129和-125~+130SJMP 80H7.位寻址:以位地址中的内容为操作数SETB 20HMOV 32H, C总结一下各种寻址方式的使用场合:立即寻址:常数直接寻址:SFR和内部数据RAM寄存器寻址:寄存器区寄存器间接寻址:内部数据RAM和外部数据RAM变址寻址:程序存储器相对寻址:PC位寻址:位地址区。
七种寻址方式

…
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
PLC中存储器的数据类型与寻址方式

PLC中存储器的数据类型与寻址⽅式⼀、数据在存储器中的存储⽅式1、数据格式及要求A〉数据格式:即指数据的长度和表⽰⽅式。
B〉要求:S7-200对数据的格式有⼀定的要求,指令与数据之间的格式⼀致才能正常⼯作。
2、⽤⼀位⼆进制数表⽰开关量A〉⼀位⼆进制数:⼀位⼆进制数有0(OFF)和1(ON)两种不同的取值,分别对应于开关量(或数字量)的两种不同的状态。
B〉位数据的数据类型:布尔(Bool)型。
C〉位地址:由存储器标识符、字节地址和位号组成,如I3.4等。
D〉其它CPU存储区的地址格式:由存储器标识符和起始字节号(⼀般取藕字节)组成,如V B 100、V W 100、V D 100等。
3、多位⼆进制数(8421码)A〉数及数制:数⽤于表⽰⼀个量的具体⼤⼩。
根据计数⽅式的不同,有⼗进制(D)、⼆进制(B)、⼗六进制(H)和⼋进制等不同的计数⽅式。
B〉⼆进制数的表⽰:在S7-200中⽤2#来表⽰⼆进制常数,例如“2# 10111010 ”。
C〉⼆进制数的⼤⼩:将⼆进制数的各位(从右往左第n位)乘以对应的位权(×2n-1),并将结果累加求和可得其⼤⼩。
例如:2# 10111010 =1×27+0×26+1×25+1×24+1×23+0×22+1×21+0×20 = 1864、⼗六进制数A〉⼗六进制数的引⼊:将⼆进制数从右往左每4位⽤⼀个⼗六进制数表⽰,可以实现对多位⼆进制数的快速准确的读写。
B〉不同进制数的表⽰⽅法:( 表3-2-1 不同进制数的表⽰⽅法) C〉⼗六进制数的表⽰:在S7-200中⽤16#来表⽰⼗六进制常数,例如“2# 1010 1110 0111 0101 可转换为16# AEF7 ”。
D〉⼗六进制数的⼤⼩:将⼗六进制数的各位(从右往左第n位)乘以对应的位权(×16n-1),并将结果累加求和可得其⼤⼩。
寻址方式

数据寻址的常见方式:1、隐含寻址这种类型的指令,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
例如单地址指令格式,就不给出第二操作数的地址,而是规定累加器ACC作为第二操作数的地址,指令中只是明显指出第一操作数。
隐含寻址的优点是有利于缩短指令字长,缺点是需要增加存储操作数的硬件和存储隐含地址的硬件。
2、立即(数)寻址这种类型的指令的地址码字段指出的不是操作数的地址,而是操作数本身,又叫立即数。
数据采用补码的形式存放。
立即寻址的优点是指令在执行阶段不访问主存,指令执行的时间最短,缺点是A的位数限制了立即数的范围。
(在定长指令码格式下,所有指令的长度都是一样的,这时候取每条指令的时间都一样,执行指令时立即数寻址最快,但是如果在变长指令码下,受到形式地址位数的限制,如果操作数比较大,那立即寻址方式在取指令的时间上要用时更多一点)3、直接寻址这种类型的指令的地址码字段的形式地址就是操作数的真实地址,取数操作直接取地址里面的内容,它的有点是简单,只需要访问一次主存,不需要专门计算操作数的地址,缺点是A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改,相对于立即寻址,直接寻址缩短了指令的长度。
4、间接寻址这种类型的指令是相对于直接寻址而来的,在直接寻址中,形式地址就是真实地址,在间接寻址中,形式地址是操作数地址的地址,即EA=(A),间接寻址可以是一次间接,也可以是多次间接。
它的优点是可以扩大寻址范围,因为EA的位数大于A的位数,便于编制程序,可以方便地实现子程序的返回,缺点是在执行使需要多次访问内存,访问速度慢。
这种寻址方式并不常用。
一般扩大寻址范围都采用寄存器间接寻址。
毕竟访问寄存器更快一点。
5、寄存器寻址这种类型的指令是直接给出操作数所在的寄存器的编号,EA=Ri,操作数就在Ri内存放。
寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,因此执行速度快,因为寄存器数量少,所以寄存器编号所占的位数也少,指令字长也比较短。
8086中的七种寻址方式

8086中的七种寻址⽅式寻址⽅式8086/8088有七种基本的寻址⽅式:⽴即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。
其中,后五种寻址⽅式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址)属于存储器寻址,⽤于说明操作数或操作数地址所在存储单元的地址。
这五种⽅式也就是确定存放操作数的存储单元有效地址EA的⽅法,这⾥所说的有效地址就是在前⾯⼀节讲存储器分段中所说的段内偏移地址。
除了这些基本的寻址⽅式以外,还有固定寻址和I/O端⼝寻址等,但不会在本节中介绍到。
基本寻址⽅式下⾯重点说⼀下这七种基本寻址⽅式的特点:1. ⽴即寻址⽅式先解释⼀个概念,叫做⽴即数。
操作数包含在指令中,它作为指令的⼀部分,跟在操作码后存放在代码段。
这种操作数称为⽴即数。
⽴即寻址⽅式所提供的操作数紧跟在操作码后⾯,与操作码⼀起放在指令代码段中,不需要到其他地址单元中去取。
⽴即数可以是8位,也可以是16位。
这种寻址⽅式主要⽤于给寄存器或存储单元赋初值的场合。
⽴即寻址⽅式是这七种寻址⽅式中速度最快的寻址⽅式。
举例:MOV AX, 1234H ; 给AX寄存器赋值为1234H2. 寄存器寻址⽅式寄存器寻址的特点是操作数在CPU内部的寄存器中,在指令中指定寄存器号。
对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI和SP等;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。
例如:MOV SI, AXMOV AL, DH由于操作数在寄存器中,不需要通过访问存储器来取得操作数,所以采⽤寄存器寻址⽅式的指令执⾏速度较快。
3. 直接寻址⽅式直接寻址的操作数在存储器中,指令直接包含有操作数的有效地址。
由于操作数⼀般存放在数据段,所以操作数的地址由DS加上指令中给出的16位偏移得到。
假如DS内容是5000H,地址为51234H字存储单元中的内容时6789H,那么在执⾏“MOV AX, [1234H]”后寄存器AX的内容是6789H。
七种寻址方式

七种寻址方式一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。
寻址对象为:1 内部数据存储器,在指令中以直接地址表示;2特殊功能寄存器SFR,在指令中用寄存器名称表示。
以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。
能够进行寄存器间接寻址的寄存器有:R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。
寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。
由于内部数据存储器共有128字节,因此用一字节的R0和R1可间接寻址整个空间。
而外部数据存储器最大可达64K,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64K字节范围。
也可用16位的DPTR寄存器间接寻址64K字节存储空间。