找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2032|回复: 6
收起左侧

关于单片机DPTR查表类的问题

[复制链接]
ID:450037 发表于 2019-1-13 14:00 来自手机 | 显示全部楼层 |阅读模式
为什么R2R3要先清c然后左移一位啊,clr   c
rlc     a不明白为什么要这么做
Screenshot_20190113-134956.jpg
回复

使用道具 举报

ID:467418 发表于 2019-1-13 15:49 | 显示全部楼层
加法ADD可能会产生进位,然后ADDC是带进位的加法运算,所以C要先清零。(接触单片机没多久,但这应该是一个原因)
回复

使用道具 举报

ID:467418 发表于 2019-1-13 16:00 | 显示全部楼层
加法会产生进位,使C置1,所以要先清C,而且,ADDC是带进位的加法计算。
回复

使用道具 举报

ID:94031 发表于 2019-1-13 16:13 | 显示全部楼层
rlc     a  是循环左移,不清c,c值会左移到a的最低字节。
回复

使用道具 举报

ID:7485 发表于 2019-1-13 18:14 | 显示全部楼层
RLC是带C的循环左移指令,指令执行后:C的值送入最低位就是A0位,A0位送入A1......,依次往上,最高位A7送入C,执行该指令之前,C中的值不确定,就有可能出错,所以必须清零。RRC指令也一样。只是方向相反。
回复

使用道具 举报

ID:450037 发表于 2019-1-13 18:43 来自手机 | 显示全部楼层
ahshmj 发表于 2019-1-13 18:14
RLC是带C的循环左移指令,指令执行后:C的值送入最低位就是A0位,A0位送入A1......,依次往上,最高位A7送 ...

程序里循环左移一位是什么意思?为什么要循环左移一位
回复

使用道具 举报

ID:401564 发表于 2019-1-13 20:36 | 显示全部楼层
前面几个用过汇编16位查表吗?
R2和R3是分别放了一个16位数据的高位和低位,左移一位是为了要乘以2,先清除C标志位,等到低位的R3位移的时候,R3的7位(就是最高位)就会变成C位,之前的清除的C位就变成了R3的0位,再R2带进位位移的时候,C就变成了R2的0了,这样就可以达到一个乘以2的作用
至于为什么要乘以2,因为TAB2:DW  这个表是以两个字节来存放的,因为是占用了两个字节的,乘以2之后,再把这个结果当成表的偏移量来查表,才能得到正确的值
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表