27
AT89C51CC03
4182i–can–06/05
双 数据 pointer
描述
这 at89c51cc03 实现 一个 第二 数据 pointer 为 speeding 向上 代号 执行
和 减少 代号 大小 在 情况 的 intensive 用法 的 外部 记忆 accesses.
dptr 0 和 dptr 1 是 seen 用 这 cpu 作 dptr 和 是 accessed 使用 这 sfr
地址 83h 和 84h 那 是 这 dph 和 dpl 地址. 这 dps 位 在 auxr1
寄存器 (看 图示 8) 是 使用 至 选择 whether dptr 是 这 数据pointer 0 或者 这 数据
pointer 1 (看 图示 13).
图示 13.
双 数据 pointer implementation
应用
软件 能 引领 有利因素 的 这 额外的 数据 pointers 至 两个都 增加 速 和
减少 代号 大小, 为 例子, 块 行动 (copy, compare…) 是 好 served 用
使用 一个 数据 pointer 作 一个 “source” pointer 和 这 其它 一个 作 一个 “destination” pointer.
hereafter 是 一个 例子 的 块 move implementation 使用 这 二 pointers 和 coded
在 assembler. 这 最新的 c compiler takes 也 有利因素 的 这个 特性 用 供应
增强 algorithm libraries.
这 inc 操作指南 是 一个 短的 (2 字节) 和快 (6 机器 循环)方法 至 manipulate 这
dps 位 在 这 auxr1 寄存器. 不管怎样, 便条那 这 inc 操作指南 做 不 直接地
强迫 这 dps 位 至 一个 particular 状态, 但是 simply toggles 它. 在 简单的 routines, 此类 作
这 块 move 例子, 仅有的 这 事实 那dps 是 toggled 在 这 恰当的 sequence mat-
ters, 不 它的 真实的 值. 在 其它 words, 这 块 move routine 工作 这 一样 whether
dps 是 '0' 或者 '1' 在 entry.
; ascii 块 move 使用 双 数据 pointers
; modifies dptr0, dptr1, 一个 和 psw
; ends 当 encountering 无效的 character
; 便条: dps exits opposite 至 这 entry 状态 除非 一个 extra inc auxr1 是 增加
AUXR1EQU0A2h
move:movdptr,#source ; 地址 的 源
incauxr1 ; 转变 数据 pointers
movdptr,#dest ; 地址 的 dest
mv_循环:incauxr1; 转变 数据 pointers
movxa,@dptr; 得到 一个 字节 从 源
incdptr; increment 源 地址
incauxr1; 转变 数据 pointers
movx@dptr,一个; 写 这 字节 至 dest
incdptr; increment dest 地址
jnzmv_循环; 审查 为 无效的 terminator
终止_move:
0
1
DPH0
DPH1
DPL0
0
1
DPS
auxr1.0
DPH
DPL
DPL1
DPTR
DPTR0
DPTR1