问题–写一个程序减去两个带有或不带有借位的8位数字,其中第一个数字在2500存储器地址,第二个数字在2501存储器地址,然后将结果存储到2502并借入2503存储器地址。
例子 –
算法 –
- 将00加载到寄存器C中(用于借用)
- 将两个8位数字从内存加载到寄存器中
- 将一个数字移到累加器
- 用累加器减去第二个数字
- 如果借位不等于1,请转到步骤7
- 借贷增量登记1
- 将累加器内容存储在内存中
- 将寄存器的内容移入累加器
- 将累加器的内容存储在其他存储位置
- 停止
程序 –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | MVI | C, 00 | [C] <- 00 |
2002 | LHLD | 2500 | [H-L] <- [2500] |
2005 | MOV | A, H | [A] <- [H] |
2006 | SUB | L | [A] <- [A] – [L] |
2007 | JNC | 200B | Jump If no borrow |
200A | INR | C | [C] <- [C] + 1 |
200B | STA | 2502 | [A] -> [2502], Result |
200E | MOV | A, C | [A] <- [C] |
2010 | STA | 2503 | [A] -> [2503], Borrow |
2013 | HLT | Stop |
说明–寄存器A,H,L,C用于一般用途:
- MOV用于将数据从内存传输到累加器(1字节)
- LHLD用于通过16位地址(3字节指令)直接加载寄存器对
- MVI用于将数据立即移入任何寄存器(2字节)
- STA用于将累加器的内容存储到内存中(3字节指令)
- INR用于将寄存器增加1(1字节指令)
- 如果没有借位,则使用JNC跳转(3字节指令)
- SUB用于减去两个数字,其中一个在累加器中(1字节)
- HLT用于暂停程序
请参见: 8086程序在有或没有借位的情况下减去两个16位数字