![PIC单片机常用模块与综合系统设计实例精讲](https://wfqqreader-1252317822.image.myqcloud.com/cover/210/654210/b_654210.jpg)
3.4 寻址方式
由于PIC单片机采用了精简指令集结构,相对于其他同类采用复杂指令集的单片机,其寻址操作就得到了极大的简化。根据数据的来源不同,为PIC单片机设计了4种不同的寻址方式:立即寻址、直接寻址、寄存器间接寻址和位寻址。其中,位寻址是PIC单片机独具特色的一类寻址方式,它使编程变得更加灵活,可操作性更强。
1.立即寻址
在立即寻址方式下,实际的操作数可以从指令码中直接获得,立即寻址也因此而得名。
例:ANDLW 0FH
其功能为:将立即数0FH与W寄存器的内容(假设为39H)做“与”运算,结果(09H)送到W。其指令码的二进制形式为:11100100001111,其中前6位是指令码,后8位是操作数,如图3-3所示。
![](https://epubservercos.yuewen.com/CA4FF7/3591161403656701/epubprivate/OEBPS/Images/figure_0074_0001.jpg?sign=1738995818-I6Dv72Xsrnh6jIbDnRJCKUmjfIPYAset-0-3ff6a72c35729f2c5f183bfcef3c6cc1)
图3-3 立即寻址示意图
2.直接寻址
直接寻址方式在指令中直接给出操作数所在的寄存器地址,可以是专用寄存器,也可以是通用寄存器。
例: ANDWF 20H,1
其功能为:将地址为20H的RAM单元的内容(假设是0FH)与W的内容(假设是39H)做“与”运算,由于d=1,因此结果(09H)送入到地址为20H的寄存器单元中,而不是W寄存器中。参加逻辑“与”运算的一个数据(0FH)所在的单元地址(20H),可以从指令中直接得到,如图3-4所示。
![](https://epubservercos.yuewen.com/CA4FF7/3591161403656701/epubprivate/OEBPS/Images/figure_0074_0002.jpg?sign=1738995818-1W05VnVeJtNs5Hlndmi2M4Jfg2PhRJnI-0-e2478c58eafdfa89ee9a528b772295a7)
图3-4 直接寻址示意图
3.寄存器间接寻址
在寄存器间接寻址方式下,指令中的寄存器必须是0单元,这是特指INDF单元,但在物理上并不存在这个寄存器单元,只不过在指令系统中做此规定以方便寻址。INDF只是在指令形式上的一个反映,实际上寄存器间接寻址是对FSR寄存器进行读写的。FSR寄存器的地址为04H,FSR寄存器中存放的就是操作数地址。但在另一种情况下,FSR还可作为普通寄存器访问,即直接访问04H单元,而不是通过访问00H单元进而间接地访问FSR中存放的间接寻址地址。
例1:INDF 04H,1
其功能为:将04H单元(FSR寄存器)中的数据加1后再存入04H单元。
例2:ANDWF 0,1
其功能为:将地址为20H的RAM单元的内容(假设是0FH)与W的内容(假设是39H)做“与”运算,结果(09H)送入地址为20H的寄存器单元中。由于寄存器地址20H是存放在FSR中的,因此对20H单元进行访问也是通过FSR,寄存器间接寻址也因此而得名,如图3-5所示。
![](https://epubservercos.yuewen.com/CA4FF7/3591161403656701/epubprivate/OEBPS/Images/figure_0075_0001.jpg?sign=1738995818-tBSEFtTZGhZUtghjTh75koraRh9rRaBb-0-f0fd4753a447ac26102ef18d4d6851c3)
图3-5 寄存器间接寻址示意图
4.位寻址
PIC单片机不仅可以对寄存器某一单元进行寻址,还可以直接对寄存器中的某一位进行操作,包括判断其是否为0或是否为1,对其进行置零或置1操作。这使得编程变得更加灵活。
例: BSF 20H,7
其功能为:把地址为20H的寄存器单元内的bit7置为1,如图3-6所示。
![](https://epubservercos.yuewen.com/CA4FF7/3591161403656701/epubprivate/OEBPS/Images/figure_0075_0002.jpg?sign=1738995818-JomJ97Q9VBFFmXmIVGbtCCiC6Zy3STKI-0-3d96d5029c5049a080b647d0f4326b41)
图3-6 位寻址示意图