80c51单片机有哪几种寻址方式?
发布网友
发布时间:2022-05-16 21:04
我来回答
共2个回答
热心网友
时间:2023-11-04 12:52
1.立即寻址方式
采用立即寻址的指令一般是双字节的。第一个字节是指令的操作码,第二个字节是立即数。因此,操作数就是放在程序存储器中的常数。立即数前面应加前缀“#”号。
例如:
MOV
A,
#2BH
;A←#2BH,即将立即数2BH传送至A中。
2.直接寻址方式
采用直接寻址的指令一般是双字节或三字节指令,第一字节为操作码,第二,三字节为操作数的地址码。单片机中,直接地址只能用来表示片内低128字节单元、专用寄存器和片内RAM的位地址空间。其中专用寄存器和位地址空间只能用直接寻址方式来访问。
例如:MOV
A,30H
;(30H)→A
MOV
C,00H
;
(00H)→Cy
LJMP
1000H
;
将1000H送入PC
3.寄存器寻址方式
寄存器寻址方式用于访问选定的工作寄存器R0~R7、A、B、DPTR和进位CY中的数。其中R0~R7由操作码低三位的8种组合表示,A、B、DPTR、C则隐含在操作码之中。
这种寻址方式中被寻址的寄存器中的内容就是操作数。
例如:
MOV
A,
R0
;(R0)→A
MOV
B
,A
;(A)→B
4.寄存器间接寻址方式
这种寻址方式中,指令指定寄存器中的内容为操作数的地址。寄存器间接寻址是用于访问片内数据存储器或片外数据存储器。当访问片内RAM
或片外的低256字节空间时,可用R0或R1做为间址寄存器;当访问片外整个64KB的地址RAM空间时,用16位寄存器DPTR做间址寄存器。这类指令都为单字节的指令,操作码的最低位表示是采用R0还是R1做间址器。
在执行PUSH和POP指令时,也采用寄存器间接寻址,此时用堆栈指针SP做间址寄存器。
例如:MOVX
A,
@R0
;
((R0))→A
MOVX
A
,
@DPTR
;
((DPTR))→A
POP
ACC
;
((SP))→A
,
(SP)-1→SP
5.基址加变址寻址方式
这种寻址方式用于访问程序存储器中的某个字节。以DPTR或PC作为基址寄存器,累加器A做为变址寄存器,两者的内容之和为操作数的地址。这种寻址方式常用于查表操作。
例如:MOVC
A,@A+DPTR
;指令代码为93H,单字节指令。设该指令放在1040H单元,A的原内容为A0H,DPTR中的值为
3000H,则操作数的地址等于:A0H+3000H=30A0H,即将30A0H单元中的内容传送至A中。
6.位寻址方式
位寻址是指对片内RAM的位寻址区(字节地址20H~2FH)和可以位寻址的专用寄存器进行位操作时的寻址方式。在进行位操作时,借助于进位C作为位操作累加器。操作数直接给出该位的地址,然后根据操作码的功能对其进行位操作。位寻址的位地址与直接寻址的字节地址形式完全一样,主要由对应的操作数的位数来区分,使用时应加以注意。
例如:MOV
10H,C
;10H是位寻址的位地址(C是位累加器)
MOV
A,10H
;10H是直接寻址的字节地址(A是字节累加器)
热心网友
时间:2023-11-04 12:52
寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址寻址 相对寻址 位寻址