SLAU367P October 2012 – April 2020 MSP430FR5041 , MSP430FR5043 , MSP430FR50431 , MSP430FR5847 , MSP430FR58471 , MSP430FR5848 , MSP430FR5849 , MSP430FR5857 , MSP430FR5858 , MSP430FR5859 , MSP430FR5867 , MSP430FR58671 , MSP430FR5868 , MSP430FR5869 , MSP430FR5870 , MSP430FR5872 , MSP430FR58721 , MSP430FR5887 , MSP430FR5888 , MSP430FR5889 , MSP430FR58891 , MSP430FR5922 , MSP430FR59221 , MSP430FR5947 , MSP430FR59471 , MSP430FR5948 , MSP430FR5949 , MSP430FR5957 , MSP430FR5958 , MSP430FR5959 , MSP430FR5962 , MSP430FR5964 , MSP430FR5967 , MSP430FR5968 , MSP430FR5969 , MSP430FR5969-SP , MSP430FR59691 , MSP430FR5970 , MSP430FR5972 , MSP430FR59721 , MSP430FR5986 , MSP430FR5987 , MSP430FR5988 , MSP430FR5989 , MSP430FR5989-EP , MSP430FR59891 , MSP430FR5992 , MSP430FR5994 , MSP430FR59941 , MSP430FR6005 , MSP430FR6007 , MSP430FR6035 , MSP430FR6037 , MSP430FR60371 , MSP430FR6041 , MSP430FR6043 , MSP430FR60431 , MSP430FR6045 , MSP430FR6047 , MSP430FR60471 , MSP430FR6820 , MSP430FR6822 , MSP430FR68221 , MSP430FR6870 , MSP430FR6872 , MSP430FR68721 , MSP430FR6877 , MSP430FR6879 , MSP430FR68791 , MSP430FR6887 , MSP430FR6888 , MSP430FR6889 , MSP430FR68891 , MSP430FR6920 , MSP430FR6922 , MSP430FR69221 , MSP430FR6927 , MSP430FR69271 , MSP430FR6928 , MSP430FR6970 , MSP430FR6972 , MSP430FR69721 , MSP430FR6977 , MSP430FR6979 , MSP430FR69791 , MSP430FR6987 , MSP430FR6988 , MSP430FR6989 , MSP430FR69891
* DADD[.W] | Add source word and carry decimally to destination word | |
* DADD.B | Add source byte and carry decimally to destination byte | |
Syntax | DADD src,dst or DADD.W src,dst | |
DADD.B src,dst | ||
Operation | src + dst + C → dst (decimally) | |
Description | The source operand and the destination operand are treated as 2 (.B) or 4 (.W) binary coded decimals (BCD) with positive signs. The source operand and the carry bit C are added decimally to the destination operand. The source operand is not affected. The previous content of the destination is lost. The result is not defined for non-BCD numbers. | |
Status Bits | N: | Set if MSB of result is 1 (word > 7999h, byte > 79h), reset if MSB is 0 |
Z: | Set if result is zero, reset otherwise | |
C: | Set if the BCD result is too large (word > 9999h, byte > 99h), reset otherwise | |
V: | Undefined | |
Mode Bits | OSCOFF, CPUOFF, and GIE are not affected. | |
Example | Decimal 10 is added to the 16-bit BCD counter DECCNTR. |
DADD #10h,&DECCNTR ; Add 10 to 4-digit BCD counter
Example | The 8-digit BCD number contained in 16-bit RAM addresses BCD and BCD+2 is added decimally to an 8-digit BCD number contained in R4 and R5 (BCD+2 and R5 contain the MSDs). The carry C is added, and cleared. |
CLRC ; Clear carry
DADD.W &BCD,R4 ; Add LSDs. R4.19:16 = 0
DADD.W &BCD+2,R5 ; Add MSDs with carry. R5.19:16 = 0
JC OVERFLOW ; Result >9999,9999: go to error routine
... ; Result ok
Example | The 2-digit BCD number contained in word BCD (16-bit address) is added decimally to a 2-digit BCD number contained in R4. The carry C is added, also. R4.19:8 = 0 |
CLRC ; Clear carry
DADD.B &BCD,R4 ; Add BCD to R4 decimally.
R4: 0,00ddh