![](http://datasheet.mmic.net.cn/370000/UPD17134ACT-xxx_datasheet_16740627/UPD17134ACT-xxx_111.png)
CHAPTER 11 ARITHMETIC AND LOGIC UNIT (ALU)
92
11.3.3 Addition and Subtraction When CMP = 0 and BCD = 1
BCD operations are performed.
The result of the operation is stored in the general register or data memory. When the result of the operation is
greater than 1001B (9D) or less than 0000B (0D), the carry flag is set (1), otherwise it is reset (0).
When the result of the operation is 0000B (0D), the Z flag is set (1), otherwise it is reset (0).
Operations in BCD are performed by first computing the result in binary and then by using the decimal correction
circuit to convert the result to decimal. For information concerning the binary to decimal conversion, see
Table
11-2
.
In order for operations in BCD to be performed properly, note the following:
(1) Result of an addition must be in the range 0D to 19D.
(2) Result of a subtraction must be in the range 0D to 9D, or in the range –10D to –1D.
The following shows which value is considered the CY flag in the range 0D to 19D (shown in 4-bit binary):
0, 0000B to 1, 0011B
CY
CY
The following shows which value is considered the CY flag in the range –10D to –1D (shown in 4-bit binary):
1, 0110B to 1, 1111B
CY
CY
When operations in BCD are performed outside of the limits of (1) and (2) stated above, the CY flag is set (1) and
the result of operation is output as a value greater than or equal to 1010B (0AH).
11.3.4 Addition and Subtraction When CMP = 1 and BCD = 1
BCD operations are performed.
The result is not stored in either the general register or data memory.
In other words, the operations specified by CMP = 1 and BCD = 1 are both performed at the same time.
Example
MOV
MOV
RPL,
PSW,
#0001B
#1010B
; Sets the BCD flag (BCD = 1).
; Sets the CMP and Z flag (CMP = 1, Z = 1) and resets the CY flag
; (CY = 0).
; (1)
; (2)
; (3)
SUB
SUBC
SUBC
M1,
M2,
M3,
#0001B
#0010B
#0011B
By executing the instructions in steps numbered (1), (2), and (3), the 12 bits in memory locations M1,
M2, and M3 and the immediate data (321) can be compared in decimal.
11.3.5 Notes Concerning Use of Arithmetic Operations
When performing arithmetic operations with the program status word (PSWORD), caution should be taken with
regard to the result of the operation being stored in the program status word.
Normally, the CY and Z flags in the program status word are set (1) or reset (0) according to the result of the
arithmetic operation being executed. However, when an arithmetic operation is performed on the program status word
itself, the result is stored in the program status word. This means that there is no way to determine if there is a carry
or borrow in the result of the operation nor if the result of the operation is zero.
However, when the CMP flag is set (1), results of arithmetic operations are not stored. Therefore, even in the above
case, the CY and Z flags will be properly set (1) or reset (0) according to the result of the operation.