- 单片机原理及应用:基于C51+Proteus仿真
- 刘志君 姚颖主编
- 1338字
- 2024-11-28 18:23:42
2.1 寻址方式
所谓寻址方式,通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面,MCS-51单片机有七种寻找方式。
1.立即数寻址
立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中。立即数只能作为源操作数,不能当作目的操作数。
例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/66_03.jpg?sign=1739572617-1nySUSwwCr1tyql8nmXCqApY92LAuhNK-0-7a9978fcdbe7039e789d1a1439d68adf)
立即寻址示意图如图2-1所示。
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_01.jpg?sign=1739572617-5nQ1ohxUNMMkwOwZLuyG08xg0ffBds6Y-0-fbd5eda301dd57423061ad4eeffdda34)
图2-1 立即寻址示意图
a)MOV A, #52H b)MOV DPTR, #5678H
2.直接寻址
在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。
例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_02.jpg?sign=1739572617-I6BEiOMKxZMiuhZAVlXGso27RGA9Bzon-0-d295ffbf39de0384403b6782f5c3e8dc)
在MCS-51单片机指令系统中,直接寻址方式可以访问2种存储空间,如图2-2所示:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_03.jpg?sign=1739572617-9nXJQ8KTrY5brFv8gLv2sRYTTjm4zOFL-0-65bc5ee74f101b86f053c0639dab339d)
图2-2 直接寻址方式示意图
1)内部数据存储器的低128B单元(00H~7FH)
2)80H~FFH中的(SFR)特殊功能寄存器。
这里要注意,指令MOV A,#52H与MOV A,52H的区别,后者表示把片内RAM字节地址为52H单元的内容传送到累加器(A)中。
3.寄存器寻址
由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器一般指累加器A和工作寄存器R0~R7。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/67_04.jpg?sign=1739572617-SQynY1x4D3NaEFIpmtxOsFVBTnU903z8-0-3fb517407f2bb85203af0d796b73761d)
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_01.jpg?sign=1739572617-hHKVByhUsXfWdCI4s3OmctnJuY57xOCM-0-82e9447f44411d1747ad1fdfe59d561d)
寄存器寻址方式的寻址范围包括:
● 寄存器寻址的主要对象是通用寄存器,共有4组32个通用寄存器,但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是R0~R7。在使用本指令前,需通过对PSW中RS1、RS0位的状态进行设置,来选择当前寄存器组。
● 部分专用寄存器。累加器A、寄存器B以及数据指针DPTR等。
4.寄存器间接寻址方式
由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器间接寻址。这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器单元地址。
寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00H~FFH)中的数据。寄存器间接寻址也适用于访问外部RAM,可使用R0、R1或DPTR作为地址指针。寄存器间接寻址用符号“@”表示。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_02.jpg?sign=1739572617-6zyeMQbTDcLVmxtIhahjOHxOyZJqOG4A-0-41a874bcc199a12ce6118ffda5ca23c4)
指令功能是把R0或R1所指出的内部RAM地址60H单元中的内容送累加器A。假定(60H)=3BH,则指令的功能是将3BH这个数送到累加器A。
例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_03.jpg?sign=1739572617-QV20OIO7E431kCYYu77RS59tbST53Xh9-0-5b62fafb0c01c56d10b0509e0602cc6b)
指令功能是把DPTR寄存器所指的那个外部数据存储器(RAM)的内容传送给A,假设(3456H)=99H,指令运行后(A)=99H。
同样,指令MOVX @DPTR,A;MOV @R1,A;也都属于寄存器间接寻址方式。寄存器间接寻址方式的示意图如图2-3所示。
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/68_04.jpg?sign=1739572617-ez3ONALbjjfNWyLRdXAILprCmSfJDYK1-0-61b7ba1a5ff5988569f40d209a66b449)
图2-3 寄存器间接寻址方式示意图
5.位寻址
MCS-51单片机中设有独立的位处理器。位操作指令能对内部RAM中的位寻址区(20H~2FH)和某些有位地址的特殊功能寄存器进行位操作。也就是说可对位地址空间的每个位进行位状态传送、状态控制和逻辑运算操作。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_01.jpg?sign=1739572617-RgSRlVEXUEFK3W0VzoKHrEBkfLl7LRqT-0-da53abf81046ab945261816f3f547d25)
6.基址寄存器加变址寄存器间接寻址
这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器(DPTR或PC)的内容为基本地址,加上变址寄存器A的内容形成16位的地址,访问程序存储器中的数据表格。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_02.jpg?sign=1739572617-ii97y88W6u4bi0pywWYkWLoFU5yXQhmE-0-6e04225f93ad8a4cdc2803d0aded30a8)
这种寻址方式的示意图如图2-4所示。
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_03.jpg?sign=1739572617-QI0cHX8LgBIc1kQJXMe33HX9G59Rcbiw-0-3d1fde7a4128fa746b00a66ca4b11ab0)
图2-4 变址寻址方式示意图
7.相对寻址
相对寻址以程序计数器(PC)的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。这种寻址方式用于相对转移指令中,指令中的相对偏移量是一个8位带符号数,用补码表示。该值可正可负,转移的范围为-128~+127。使用中应注意rel的范围不要超出。例如:
![](https://epubservercos.yuewen.com/5D072F/21511156108176706/epubprivate/OEBPS/Images/69_04.jpg?sign=1739572617-wft0scH3aVdURJs4urndNXvlkpZTU6lw-0-d44a9217d9dd572c1bbb134d895e25c0)