问题–在8085微处理器中编写汇编语言程序,以减去两个16位数字。
假设 –
- 程序的起始地址:2000
- 输入存储器位置:2050、2051、2052、2053
- 输出存储位置:2054、2055
例子 –
INPUT:
(2050H) = 19H
(2051H) = 6AH
(2052H) = 15H
(2053H) = 5CH
OUTPUT:
(2054H) = 04H
(2055H) = OEH
结果:
因此,我们减去了两个16位数字。
算法 –
- 在16位数字的L寄存器中获取LSB,在H寄存器中获取MSB。
- 用DE寄存器交换HL寄存器的内容。
- 再次获得16位数字的L寄存器中的LSB和H寄存器中的MSB。
- 从E寄存器的内容中减去L寄存器的内容。
- 从D寄存器的内容中减去H寄存器的内容,并从上一步中借用。
- 将结果存储在内存位置。
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | LHLD 2050 | Load H-L pair with address 2050 |
2003 | XCHG | EXCHANGE H-L PAIR WITH D-E PAIR |
2004 | LHLD 2052 | Load H-L pair with address 2052 |
2007 | MVI C, 00 | C<-00H |
2009 | MOV A, E | A<-E |
200A | SUB L | A<-A-L |
200B | STA 2054 | 2054<-A |
200E | MOV A, D | A<-D |
200F | SBB H | SUBTRACT WITH BORROW |
2010 | STA 2055 | 2055<-A |
2013 | HLT | TERMINATES THE PROGRAM |
解释 –
- LHLD 2050:将地址为2050的HL对加载。
- XCHG:与DE交换HL对的内容。
- LHLD 2052:将地址对2050装入HL对。
- MOV A,E:将寄存器E的内容移至A。
- SUB L:用寄存器L的内容减去A的内容。
- STA 2054:将来自累加器的结果存储到内存地址2054。
- MOV A,D:将寄存器D的内容移至A。
- SBB H:用借位将寄存器H的内容减去A的内容。
- STA 2055:将结果从累加器存储到内存地址2055。
- HLT:停止执行程序,并停止任何进一步的执行。