3.4 寻址方式
由于PIC单片机采用了精简指令集结构,相对于其他同类采用复杂指令集的单片机,其寻址操作就得到了极大的简化。根据数据的来源不同,为PIC单片机设计了4种不同的寻址方式:立即寻址、直接寻址、寄存器间接寻址和位寻址。其中,位寻址是PIC单片机独具特色的一类寻址方式,它使编程变得更加灵活,可操作性更强。
1.立即寻址
在立即寻址方式下,实际的操作数可以从指令码中直接获得,立即寻址也因此而得名。
例:ANDLW 0FH
其功能为:将立即数0FH与W寄存器的内容(假设为39H)做“与”运算,结果(09H)送到W。其指令码的二进制形式为:11100100001111,其中前6位是指令码,后8位是操作数,如图3-3所示。
图3-3 立即寻址示意图
2.直接寻址
直接寻址方式在指令中直接给出操作数所在的寄存器地址,可以是专用寄存器,也可以是通用寄存器。
例: ANDWF 20H,1
其功能为:将地址为20H的RAM单元的内容(假设是0FH)与W的内容(假设是39H)做“与”运算,由于d=1,因此结果(09H)送入到地址为20H的寄存器单元中,而不是W寄存器中。参加逻辑“与”运算的一个数据(0FH)所在的单元地址(20H),可以从指令中直接得到,如图3-4所示。
图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所示。
图3-5 寄存器间接寻址示意图
4.位寻址
PIC单片机不仅可以对寄存器某一单元进行寻址,还可以直接对寄存器中的某一位进行操作,包括判断其是否为0或是否为1,对其进行置零或置1操作。这使得编程变得更加灵活。
例: BSF 20H,7
其功能为:把地址为20H的寄存器单元内的bit7置为1,如图3-6所示。
图3-6 位寻址示意图