先决条件– 8085程序查找8位数字的1和2的补码
问题– –编写程序以查找16位数字的1和2的补码,其中起始地址为2000,并且该数字存储在3000存储地址中,并将结果存储到3002和3004存储地址中。
例子 –
算法 –
- 将存储器3000中的16位数字加载到寄存器对(HL)中
- 将寄存器L的内容移至累加器
- 累加器补足含量
- 将累加器的内容移至寄存器L
- 将寄存器H的内容移至累加器
- 累加器补足含量
- 将累加器的内容移至寄存器H
- 将寄存器对的内容存储在存储器3002中( 1的补码)
- 寄存器对的内容加1
- 将寄存器对的内容存储在存储器3004中( 2的补码)
- 停止
程序 –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | LHLD | [3000] | [H-L] <- [3000] |
2003 | MOV | A, L | [A] <- [L] |
2004 | CMA | [A] <- [A^] | |
2005 | MOV | L, A | [L] <- [A] |
2006 | MOV | A, H | [A] <- [H] |
2007 | CMA | [A] <- [A^] | |
2008 | MOV | H, A | [H] <- [A] |
2009 | SHLD | [3002] | 1’s complement |
200C | INX | H | [H-L] <- [H-L] + 1 |
200D | SHLD | [3004] | 2’s complement |
2010 | HLT | Stop |
解释 –
- A是一个8位累加器,用于加载和存储数据
- LHLD用于通过16位地址(3字节指令)直接加载寄存器对HL
- MOV用于将数据从累加器传输到寄存器(任意)或将寄存器(任何)传输到累加器(1字节)
- CMA用于补充累加器的内容(1字节指令)
- SHLD用于使用16位地址(3字节指令)将寄存器对HL中的数据直接存储到存储器中
- INX用于将HL寄存器对增加1(1字节指令)
- HLT用于暂停程序