前面几个用过汇编16位查表吗? R2和R3是分别放了一个16位数据的高位和低位,左移一位是为了要乘以2,先清除C标志位,等到低位的R3位移的时候,R3的7位(就是最高位)就会变成C位,之前的清除的C位就变成了R3的0位,再R2带进位位移的时候,C就变成了R2的0了,这样就可以达到一个乘以2的作用 至于为什么要乘以2,因为TAB2:DW 这个表是以两个字节来存放的,因为是占用了两个字节的,乘以2之后,再把这个结果当成表的偏移量来查表,才能得到正确的值 |
ahshmj 发表于 2019-1-13 18:14 程序里循环左移一位是什么意思?为什么要循环左移一位 |
RLC是带C的循环左移指令,指令执行后:C的值送入最低位就是A0位,A0位送入A1......,依次往上,最高位A7送入C,执行该指令之前,C中的值不确定,就有可能出错,所以必须清零。RRC指令也一样。只是方向相反。 |
rlc a 是循环左移,不清c,c值会左移到a的最低字节。 |
加法会产生进位,使C置1,所以要先清C,而且,ADDC是带进位的加法计算。 |
加法ADD可能会产生进位,然后ADDC是带进位的加法运算,所以C要先清零。(接触单片机没多久,但这应该是一个原因) |