计算机寻址的最低单元,80c51单片机指令系统的7种寻址方式

寻址方式就是寻找操作数或指令地址的方式。寻址方式包含两方面的内容:一是操作数的寻址,二是指令地址的寻址(如转移指令、调用指令)。寻址方式是计算机性能的具体体现,也是编写程序的基础,必须非常熟悉并灵活运用。

对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。若不特别声明,后面提到的寻址方式均指源操作数的寻址方式。

80c51指令系统共有7种寻址方式,包括:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。现以7条指令为例说明这7种寻址方式。

7d037a4d46806d6fd0f5886d0c7ade90.png

(1)立即寻址:将操作数直接写在指令中。

如指令①: mov a,#3ah 执行的操作是将立即数3ah送到累加器a中,因为指令中有立即数3ah,所以称此寻址方式为立即寻址。注意,立即数前面必须加“#”号,以区别立即数和直接寻址。该指令的执行过程如图1所示。

255cead76ea9655dbae35f8fd3b4dd30.png

图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所示。

7b68640e3a007cfd3eef810fcefb81b8.png

图2 寄存器寻址示意图

(3)直接寻址 :是指把存放操作数的内存单元的地址直接写在指令中。在80c51单片机中可以直接寻址的存储器主要有内部ram区和特殊功能寄存器sfr区。

如指令③:mov a,30h ;(a)←(30h)

该指令将地址为30h的存储单元的内容送入累加器a,因为指令源操作数为地址直接给出的存储单元,故称此寻址方式为直接寻址。若(30h)=3ah,指令③执行后,(a)=3ah,该指令的执行过程如图3所示。

8b5e7bd6c58d71dfec8a14a1494c6ded.png

图3 直接寻址示意图

(4)寄存器间接寻址:将存放操作数的存储单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。在80c51指令系统中,用于寄存器间接寻址的寄存器有r0、r1和dptr,称为寄存器间接寻址寄存器。

注意:间接寻址寄存器前面必须加上符号“@”。

如指令④:mov a,@r0 ;(a)←((r0))

该指令将以r0中内容为地址的存储单元的内容送入累加器a中,因为指令操作数是存储单元,其地址由寄存器r0间接给出,所以称此寻址方式为寄存器间接寻址。

设r0=3ah,内部ram 3ah中的值是65h,则指令mov a,@r0的执行结果是累加器a的值为65h,该指令的执行过程如图4所示。

b2d4d4d6463f2601c7be3a45d68111f7.png

图4 寄存器间接寻址示意图

(5)变址寻址 :是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。dptr或pc是基址寄存器,累加器a是变址寄存器。这种寻址方式称为变址寻址。该寻址方式主要用于查表操作。

当执行指令⑤时,设(a)=50h ,(dptr)=2007h,(2057h)=60h ,指令⑤执行后movc a,@a+dptr ;(a)←((a)+(dptr))=(50h+2007h)=(2057h)=60h。

该指令将dptr中的基地址2007h与a中的偏移地址50h相加,形成实际地址2057h,再将地址为2057h的存储单元中的内容60h送入累加器a中。显然这种寻址方式称为变址寻址。该指令执行过程如图5所示。

66657700519b15feec7ecdb3c6f90fb6.png

图5 变址寻址示意图

(6)相对寻址 :是指程序计数器pc的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。这种寻址方式称为相对寻址。该类寻址方式主要用于跳转指令。

如指令⑥:sjmp rel ;(pc)←(pc)+rel

当执行指令⑥时,设当前(pc)=2009h,而相对偏移量rel=02h,则执行该指令后,(pc)=2009h+02h=200bh,即程序由地址为2009h处跳转到200bh处执行,其跳转的距离为相对偏移量rel=02h。由于指令中的操作数为相对偏移量rel ,所以称这种寻址方式为相对寻址。该指令的执行过程如图6所示。

92c5901364779f302dac0334345dbb69.png

图6 相对寻址示意图

(7)位寻址 :指令中操作数为8位二进制数某一位,称为位寻址。80c51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。

位寻址区包括专门安排在内部ram中的两个区域:一是内部ram的位寻址区,地址范围是20h~2fh,共16个ram单元,位地址为00h~7fh;二是特殊功能寄存器sfr中有11个寄存器可以位寻址。参见位地址的定义。

例如:setb acc.0 ;(acc.0)←1 该指令将累加器的最低位acc.0置1,由于指令中的操作数为一位二进数,故称此寻址方式为位寻址。该指令的执行过程如图7所示。

a2bdc9c9518104a5cf6afb0e8f87810f.png

图7 位寻址示意图

由寻址方式的讨论可知,操作数按类型可分为:立即数、寄存器、存储单元、位操作数、相对偏移量。而存储单元地址又可有直接寻址,寄存器间接寻址,变址寻址三种。

各种寻址方式对应操作数的指令符号规定如下。

(1)#data:表示8位立即数,如#3ah。

(2)#data16:表示16位立即数,即0000h~ffffh。

(2)rn:表示寄存器r0~r7。

(3)direct:表示片内存储单元的直接地址, 如30h。

(4)addr16,addr11:表示指令中的16位或11位转移地址。

(5)rel:表示相对偏移量,如 02h。

(6)bit:表示位地址,如acc.0。

(7)( ):表示存储单元的内容,如(30h)=40h。

(8)(( )):表示间接寻址的存储单元内容,((r0))=(7fh)=50h。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值