PIC16C71X
ds30272a-页 24
1997 微芯 技术 公司
例子 4-1显示 这 calling 的 一个 子例程 在
页1 的 这 程序 记忆. 这个 例子 假设
那 pclath 是 saved 和 restored 用 这 中断 ser-
恶行 routine (如果 中断 是 使用).
例子 4-1: CALL的 一个 子例程 在
PAGe 1 从 页 0
org 0x500
bsf pclath,3 ;选择 页 1 (800h-fffh)
bcf pclath,4 ;仅有的 在 >4k 设备
call sub1_p1 ;call 子例程 在
: ;页 1 (800h-fffh)
:
:
org 0x900
sub1_p1: ;called 子例程
: ;页 1 (800h-fffh)
:
返回 ;返回 至 call 子例程
;在 页 0 (000h-7ffh)
4.5 间接的 寻址, indf 和 fsr
寄存器
这 indf 寄存器 是 不 一个 物理的 寄存器. 寻址
这 indf 寄存器 将 导致 间接的 寻址.
间接的 寻址 是 可能 用 使用 这 indf reg-
ister.任何 操作指南 使用 这 indf 寄存器 的确
accesses 这 寄存器 pointed 至 用 这 文件 选择 reg-
ister, fsr. 读 这 indf 寄存器 它自己 indirectly
(fsr = '0') 将 读 00h. writing 至 这 indf 寄存器
indirectly 结果 在 一个 非-运作 (虽然 状态 位
毫安y 是 影响). 一个 有效的 9-位 地址 是 得到
by concatenating 这 8-位 fsr 寄存器 和 这 irp 位
(status<7>), 作 显示 在 图示 4-15. 不管怎样, irp
是 不 使用 在 这 pic16c71x 设备.
一个 简单的 程序 至 clear 内存 locations 20h-2fh
使用 间接的 寻址 是 显示 在 例子 4-2.
例子 4-2: 间接的 寻址
movlw 0x20 ;initialize pointer
movwf fsr ;至 内存
next clrf indf ;clear indf 寄存器
incf fsr,f ;inc pointer
btfss fsr,4 ;所有 完毕?
goto next ;非 clear next
CONTINUE
: ;yes continue
图示 4-15: 直接/间接的 寻址
为 寄存器 file 编排 detail 看 图示 4-4.
便条 1:
这 rp1 和 irp 位 是 保留, 总是 维持 这些 位 clear.
数据
记忆
间接的 addressingdirect 寻址
bank 选择 location 选择
rp1:RP0 6
0
从 opcode
IRP
(1)
fsr 寄存器
7
0
bank 选择
location 选择
00 01 10 11
bank 0 bank 1 bank 2 bank 3
FFh
80h
7Fh
00h
17Fh
100h
1FFh
180h
不
使用