Arithmetic Instructions:
The different instructions under this category are listed in table below:
1 | ADDReg/Mem | Adds accumulator with Reg or Memory word | Acc ← Acc + Reg/Mem |
2 | ADC Reg/Mem | Adds acc with carry to Reg or Memory | Acc ← Acc + Reg/Mem + Cy |
3 | ADI 8-bit data | Adds 8-bit immediate data to Accumulator | Acc ← Acc + 8-bit data |
4 | ACI 8-bit data | Adds with carry 8-bit data to Accumulator | Acc ← Acc + 8-bit data + Cy |
5 | DAD Rp | Add Register pair to HL | HL ← HL + Rp |
6 | SUB Reg/Mem | Subtract reg/Mem from accumulator | Acc ← Acc + Reg/Mem |
7 | SBB Reg / Mem | Subtract reg/Mem from acc with borrow | Acc ← Acc – Reg/Mem – Cy |
8 | SUI 8-bit data | subtract 8-bit data from acc | Acc ← Acc – 8-bit data |
9 | SBI 8-bit data | subtract 8-bit data from acc with borrow | Acc ← Acc – 8-bit data – Cy |
10 | INR Reg / Mem | Increments the content of Register or Memory | |
11 | DCR Reg / Mem | Increments the content of Register or Memory | |
12 | INX Reg pair | Increments content of a register pair | |
13 | DCX Reg Pair | Decrements the content of Register Pair | |
14 | DAA | Decimal Adjust Accumulator, when executed converts the hex result in Decimal |
Example programs:
Ex-1: WAP in AL to add two 8-bit numbers
Answer:
MVI A, 55h
MVI B, 45h
ADD B
STA 2050h
HLT
Ex-2: WAP in AL to fetch two data bytes from the memory, add them and store the result back to memory.
Answer: Assuming that the data is at memory location 2020h and 2021h and after addition it is to be stored at memory location 2050h
LXI H, 2020h
MOV A, M
INX H
ADD M
STA 2050h
HLT
Ex-3: WAP in AL to add two 16-bit numbers and store the result in memory location 2020h(low byte) and at 2021h(high Byte)
Answer: Assuming that the numbers are known, so we can use immediate addressing mode to load the HL and DE registers with 16-bit immediate data. We can make used of DAD instruction to add two 16-bit numbers. The requirement of this instruction is that one number must be in HL, and another:
LXI H, 2345H
LXI D, 1234H
DAD D
XCHG
LXI H, 2020H
MOV M, E
INX H
MOV M, D
HLT
SECOND METHOD
Assuming that the two 16-bit numbers are stored in memory at locations 2020,2021 and 2nd number at 2022h and 2023h. The low byte of two umbers are at 2020h and 2022h and the high byte of two numbers are at location2021h and 2023h. We would need two pointers to point to LSB of two numbers and since the memory active pointer is always the HL pair, we will need XCHG instruction to move to 2nd number.
LXI H, 2020h
LXI D, 2022h
MOV A, M
XCHG
ADD M
STA 2030h
INX H
INX D
XCHG
MOV A, H
XCHG
ADC M
STA 2051h
HLT