问题–编写一个程序,将位的块从2500开始的源位置移动到2600以后的目标位置,其中块的大小为05字节。
例子 –
算法 –
- 地址为2500H的加载寄存器对HL
- 将地址为2600H的寄存器对DE装入
- 将内存位置的内容移到累加器中
- 将累加器的内容存储到DE指向的内存中
- 寄存器对HL和DE的值增加1
- 将寄存器C的值减1
- 如果零标志不等于1,请转到步骤3
- 停止
程序 –
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 |
说明–寄存器A,D,E,H,L,C用于一般用途:
- MOV用于将数据从内存传输到累加器(1字节)
- LXI用于立即使用16位地址(3字节指令)加载寄存器对
- MVI用于将数据立即移入任何寄存器(2字节)
- STAX用于将累加器间接存储到寄存器对中(3字节指令)
- DCR用于将寄存器减少1(1字节指令)
- INX用于将寄存器对增加1(1字节指令)
- 如果不为零,则使用JNZ跳转到给定的存储器位置(3字节指令)
- HLT用于暂停程序