标题: 关于单片机DPTR查表类的问题 [打印本页]

作者: zhangzhao2423    时间: 2019-1-13 14:00
标题: 关于单片机DPTR查表类的问题
为什么R2R3要先清c然后左移一位啊,clr   c
rlc     a不明白为什么要这么做

Screenshot_20190113-134956.jpg (276.11 KB, 下载次数: 38)

Screenshot_20190113-134956.jpg

作者: 青天上的太阳    时间: 2019-1-13 15:49
加法ADD可能会产生进位,然后ADDC是带进位的加法运算,所以C要先清零。(接触单片机没多久,但这应该是一个原因)
作者: 青天上的太阳    时间: 2019-1-13 16:00
加法会产生进位,使C置1,所以要先清C,而且,ADDC是带进位的加法计算。
作者: xuyaqi    时间: 2019-1-13 16:13
rlc     a  是循环左移,不清c,c值会左移到a的最低字节。
作者: ahshmj    时间: 2019-1-13 18:14
RLC是带C的循环左移指令,指令执行后:C的值送入最低位就是A0位,A0位送入A1......,依次往上,最高位A7送入C,执行该指令之前,C中的值不确定,就有可能出错,所以必须清零。RRC指令也一样。只是方向相反。
作者: zhangzhao2423    时间: 2019-1-13 18:43
ahshmj 发表于 2019-1-13 18:14
RLC是带C的循环左移指令,指令执行后:C的值送入最低位就是A0位,A0位送入A1......,依次往上,最高位A7送 ...

程序里循环左移一位是什么意思?为什么要循环左移一位
作者: Y_G_G    时间: 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之后,再把这个结果当成表的偏移量来查表,才能得到正确的值




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1