单片机中80C51的寻址方式

如题所述

第1个回答  2009-04-02
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是字节累加器)本回答被提问者采纳
第2个回答  2009-04-10
正解