汇编中 ADD 和ADDC 的理解
时间:11-28
来源:互联网
点击:
书上讲到ADDC指令会加上进位标志位CY,可以方便的进行多字节数连加运算。我想想,比如两个数用ADDC相加有溢出,CY置1了,最后岂不是比正确的结果多了1?百思不得其解……
ADD 两数相加,不加进位位。 ADDC 两数相加,同时再加个进位位。进位当时为1就加1 为0就加0相当于不加 一般用在多字节数相加中。最低位相加,用ADD ,加完后,可能产生进位,高字节相加就用ADDC 这样,低字节相加产生的进位就会被加进来。 比如 0080H + 0180H 低字节相加用 ADD 80H+80H=100H 用ADD指令得到 00H 并溢出产生进位 C=1 高字节 相加用 ADDC 00H+01H=01H 用 ADDC 指令两数相加结果 01H会再加上进位位 1 得到 02H 0080H+0180H = 02 00H 再比如 0080H + 0101H 80H+01H = 81H 没有溢出进位为 C=0 00H+01H =01H 用ADDC指令会 再加进位位 C=0 得到 01H 结果 0080H+0101H = 0181H
原来ADDC指令用于8位以上的数相加,而且要把低8位先分解出来,用ADD先进行运算,这时候的CY会影响高于8位的运算,要考虑进去,此时再用ADDC,把CY也考虑进去,算出高位的结果,再组合起来。原来如此。不过据自己了解,16位数据的操作,只能用DPTR,难倒结果要存在这里?噢,忘了可拆分保存在Rn里面了……
还有关于ADD对OV标志位的影响,我也不大明白。书中说的是,和第六,第七位成异或关系(最低位是0),这两位同时有、无进位,则OV清0;若这两位一个有进位,一个没有,则OV置1。我也想了很久:发现这个问题,貌似挺复杂的:
汇编ADDADD 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)