Statement: Assume the DAA instruction is not present. Write a sub routine which will perform the same task as DAA.
| Sample Problem: Execution of DAA instruction: 1. If the value of the low order four bits (03-00) in the accumulator is greater than 9 or if auxiliary carry flag is set, the instruction adds 6 '(06) to the low-order four bits. 2. If the value of the high-order four bits (07-04) in the accumulator is greater than 9 or if carry flag is set, the instruction adds 6(06) to the high-order four bits. | Source program :
- LXI SP, 27FFH : Initialize stack pointer
- MOV E, A : Store the contents of accumulator
- ANI 0FH : Mask upper nibble
- CPI 0A H : Check if number is greater than 9
- JC SKIP : if no go to skip
- MOV A, E : Get the number
- ADI 06H : Add 6 in the number
- JMP SECOND : Go for second check
- SKIP: PUSH PSW : Store accumulator and flag contents in stack
- POP B : Get the contents of accumulator in B register and flag register contents in C register
- MOV A, C : Get flag register contents in accumulator
- ANI 10H : Check for bit 4
- JZ SECOND : if zero, go for second check
- MOV A, E : Get the number
- ADI 06 : Add 6 in the number
- SECOND: MOV E, A : Store the contents of accumulator
- ANI FOH : Mask lower nibble
- RRC
- RRC
- RRC
- RRC : Rotate number 4 bit right
- CPI 0AH : Check if number is greater than 9
- JC SKIPl : if no go to skip 1
- MOV A, E : Get the number
- ADI 60 H : Add 60 H in the number
- JMP LAST : Go to last
- SKIP1: JNC LAST : if carry flag = 0 go to last
- MOV A, E : Get the number
- ADI 60 H : Add 60 H in the number
- LAST: HLT
| Flowchart for program | |
Related Programs : (Click down)
Multiply two 8-bit numbers
Subtract two 16-bit numbers.
Add two 8-bit numbers
Pack the unpacked BCD numbers