我知道DAW指令在将两个压缩的BCD数相加后调整WREG中的8位结果,但是DAW指令能够调整WREG中更高的位结果吗?
发布于 2021-03-12 15:20:19
在ADDWF或SUBWF期间,DC (数字进位)标志捕获加法期间从位3开始的进位输出,而C (进位)标志捕获加法期间从位7开始的进位输出。减法中的进位是基于x-y=x+ NOT (y) + 1生成的,其中NOT是一的补码。这意味着这些进位标志的值是各自借用的补码。
DAW将6加到W的最低有效半字节,即W<3:0>,如果半字节的值大于9,则设置或 DC。
DAW将6加到W的最高有效半字节,即W<7:4>,如果半字节的值大于9,则设置或 C。
如果将表示BCD数字的两个半字节相加,则得到的半字节值为0x0、0x12,这就是为什么需要组合两个条件以检测该四位字节的小数进位。例如,当我们将0x99与0x99相加时,和是0x32,并且DC=1和C=1,因为0x9 + 0x9 = 0x12意味着从每个半字节进行进位。因为这两个标志都已设置,所以后面的DAW会将6加到每个半字节上,从而产生0x98,这是正确的BCD结果。
DAW指令仅仅遵循上述规则,并且无法知道W寄存器的内容和标志是否实际上是两个BCD数字相加的结果。因此,假设我们添加了0xee (不是有效的BCD编号)和0x11,结果是0xff。DC和C都将为零。下面的DAW会发现每个半字节都大于9,并将6加到每个半字节上,结果是0x55。
https://stackoverflow.com/questions/66592293
复制相似问题