Problem – Write a program to move blocks of bits from source location starting at 2500 to destination location starting from 2600 where size of blocks is 05 bytes. Example –
- Load register pair H-L with the address 2500H
- Load register pair D-E with the address 2600H
- Move the content at memory location into accumulator
- Store the content of accumulator into memory pointed by D-E
- Increment value of register pair H-L and D-E by 1
- Decrements value of register C by 1
- If zero flag not equal to 1, go to step 3
- Stop
Program –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | MVI | C, 05 | [C] <- 05 |
2002 | LXI | H, 2500 | [H-L] <- 2500 |
2005 | LXI | D, 2600 | [D-E] <- 2600 |
2008 | MOV | A, M | [A] <- [[H-L]] |
2009 | STAX | D | [A] -> [[D-E]] |
200A | INX | H | [H-L] <- [H-L] + 1 |
200B | INX | D | [D-E] <- [D-E] + 1 |
200C | DCR | C | [C] <- [C] – 1 |
200D | JNZ | 2008 | Jump if not zero to 2008 |
2010 | HLT | Stop |
Explanation – Registers A, D, E, H, L, C are used for general purpose:
- MOV is used to transfer the data from memory to accumulator (1 Byte)
- LXI is used to load register pair immediately using 16-bit address (3 Byte instruction)
- MVI is used to move data immediately into any of registers (2 Byte)
- STAX is used to store accumulator into register pair indirectly (3 Byte instruction)
- DCR is used to decrease register by 1 (1 Byte instruction)
- INX is used to increase register pair by 1 (1 Byte instruction)
- JNZ is used to jump if not zero to given memory location (3 Byte instruction)
- HLT is used to halt the program
Advantages:
- The program is simple and easy to understand, making it useful for teaching purposes.
- It can be used to efficiently move blocks of data within a memory, such as copying data from one buffer to another, or shifting bits within a data structure.
- The program is customizable, as the source and destination addresses, as well as the block size, can be easily changed.
Disadvantages:
- The program is not optimized for speed, as it uses multiple instructions to move each byte of data.
- It is not suitable for moving large blocks of data, as it requires a loop that iterates over each byte individually.
- The program does not check for errors or boundary conditions, such as when the source or destination address is outside the valid memory range.