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

发布时间:2024-01-28
寻址方式就是寻找操作数或指令地址的方式。寻址方式包含两方面的内容:一是操作数的寻址,二是指令地址的寻址(如转移指令、调用指令)。寻址方式是计算机性能的具体体现,也是编写汇编语言程序的基础,必须非常熟悉并灵活运用。
对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。若不特别声明,后面提到的寻址方式均指源操作数的寻址方式。
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,因为指令源操作数为地址直接给出的存储单元,故称此寻址方式为直接寻址。若(30h)=3ah,指令③执行后,(a)=3ah,该指令的执行过程如图3所示。
图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所示。
图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所示。
图5 变址寻址示意图
(6)相对寻址 :是指程序计数器pc的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。这种寻址方式称为相对寻址。该类寻址方式主要用于跳转指令。
如指令⑥:sjmp rel ;(pc)←(pc)+rel
当执行指令⑥时,设当前(pc)=2009h,而相对偏移量rel=02h,则执行该指令后,(pc)=2009h+02h=200bh,即程序由地址为2009h处跳转到200bh处执行,其跳转的距离为相对偏移量rel=02h。由于指令中的操作数为相对偏移量rel ,所以称这种寻址方式为相对寻址。该指令的执行过程如图6所示。
图6 相对寻址示意图
(7)位寻址 :指令中操作数为8位二进制数某一位,称为位寻址。80c51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。
位寻址区包括专门安排在内部ram中的两个区域:一是内部ram的位寻址区,地址范围是20h~2fh,共16个ram单元,位地址为00h~7fh;二是特殊功能寄存器sfr中有11个寄存器可以位寻址。参见位地址的定义。
例如:setb acc.0 ;(acc.0)←1 该指令将累加器的最低位acc.0置1,由于指令中的操作数为一位二进数,故称此寻址方式为位寻址。该指令的执行过程如图7所示。
图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。
上一个:小型蓄水工程如何布置与设计?
下一个:违法占地需要承担法律后果吗

汽车及轨道交通行业车门关闭力/速度测试仪介绍
酒驾出了点小事故怎样处理
唐山橡塑保温板厂家零售
《民法典》规定能否对不动产设立质权
一个电脑可以挂几个千牛工作台(一台电脑可以挂两个千牛吗)
认定教唆他人吸毒罪后会被怎样判刑?
遗嘱公证给第二顺序继承人算遗赠吗
iphonepro跟普通款的区别(苹果手机pro版和普通版有什么区别)
离婚后一方耍赖不给抚养费咋办
澳门杏仁饼做法 需要准备什么食材