问题–编写一个程序以添加2-BCD编号,其起始地址为2000 ,并且编号存储在2500和2501存储器地址中,并将和存储到2502中并携带到2503存储器地址中。
例子 –
算法 –
- 将00H加载到寄存器中(用于进位)
- 将内存中的内容加载到寄存器对中
- 将内容从L寄存器移到累加器
- 用累加器添加H寄存器的内容
- 如果总和大于9或辅助进位不为零,则添加06H
- 如果进位标志不等于1,请转到步骤8
- 进位寄存器递增1
- 将累加器的内容存储到内存中
- 将内容从进位寄存器移到累加器
- 将累加器的内容存储到内存中
- 停止
程序 –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | MVI | C, 00H | [C] <- 00H, carry |
2002 | LHLD | [2500] | [H-L] <- [2500] |
2005 | MOV | A, L | [A] <- [L] |
2006 | ADD | H | [A] <- [A] + [H] |
2007 | DAA | Add 06 if sum > 9 or AC = 1 | |
2008 | JNC | 200C | Jump if no carry |
200B | INR | C | [C] <- [C] + 1 |
200C | STA | [2502] | [A] -> [2502], sum |
200F | MOV | A, C | [A] <- [C] |
2010 | STA | [2503] | [A] -> [2503], carry |
2013 | HLT | Stop |
说明–寄存器A,C,H,L用于通用
- MVI用于将数据立即移入任何寄存器(2字节)
- LHLD用于通过16位地址(3字节指令)直接加载寄存器对
- MOV用于将数据从内存传输到累加器(1字节)
- ADD用于将累加器与任何寄存器(1字节指令)相加
- STA用于将来自累加器的数据存储到存储器地址(3字节指令)
- DAA用于检查总和> 9或AC = 1是否加06(1字节指令)
- 如果没有进位到给定的存储器位置,则使用JNC跳转(3字节指令)
- INR用于将给定寄存器增加1(1字节指令)
- HLT用于暂停程序