代码如下:
MOV DPTR,#TAB ;置分支入口地址表首址
MOV A,R7 ; 分支转移序号送A
ADD A,R7 ;分支转移序号乘以2
MOV R3,A ;暂存人R3
MOVC A,@A+DPTR ;处理程序入口地址的低8位暂存入R3// ?问题所在,这个怎么就是把低八位存入呢
XCH A,R3
INC A
MOVC A,@A+DPTR ;处理程序入口地址的低8位送入DPL// ?这个一样道理??
MOV DPL,A
MOV DPH,R3 ;处理程序入口地址的高8位送入DPH
CLR A ;累加器清零
……
……
MOVC A,@A+DPTR ;处理程序入口地址的低8位暂存入R3//
?问题所在,这个怎么就是把低八位存入呢
解答:
DPTR 是一个16位的索引寄存器,比较特殊.它由 DPH(高字节) 与 DPL(低字节) 组合而成.----没有它,就无法直接或间接访问 64K 的内部或外部的地址空间!
通常,我们对 DPTR 进行直接赋值,可以直接给它最大 65535 的数据(16BIT).但是,如果我们通过其它寄存器(或 A))间接赋值时,由于这些寄存器只有 8 位,因此,这种操作总是把这个 8 位存入到 DPL 去.
就象一台汽车可以装载 8 吨物资,但是,你每次只能运送 100 公斤物资给它,不能一下子满载.
存入--写入--赋值---拷贝到----移动到----.....都代表相同意思,就是把一个数据放入去某个寄存器.
某些情况下,也可以把 DPTR 作为一个 16 位或 2 个 8 位通用临时寄存器来使用.----但是必须掌握清楚使用条件,不能有冲突!否则会影响到程序运行.
仅供参考!
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |