问题–编写一个汇编语言程序,将存储在寄存器HL,DE,BC中的三个16位数字相加,然后用最少的指令数将结果存储在DE中。
例子 –
假设–
- 要添加的数字已存储在寄存器HL,DE,BC中
- 寄存器中存储的数字应使最终结果不大于FFFF
DAD D执行以下任务:
H <- H + D
L <- L + E
DAD指令采用一个自变量,并且该自变量可以是寄存器B,D,H或SP XCHG指令将寄存器D的内容与H和E交换为L
算法 –
- 通过DAD指令在HL中添加DE寄存器的内容并将结果存储在HL中
- 将寄存器B的内容移至D并将C移至E
- 重复步骤1
- 使用XCHG指令将DE的内容与HL交换。我们将在DE中得到结果
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT | |
---|---|---|---|
2000 | DAD D | H <- H + D, L <- L + E | |
2001 | MOV D, B | D <- B | |
2002 | MOV E, C | E <- C | |
2003 | DAD D | H <- H + D, L <- L + E | |
2004 | XCHG | Swap content of HL with DE | |
2005 | HLT | END |
解释 –
- DAD D –将寄存器D的内容添加到H中,将寄存器E的内容添加到L中,并将结果存储在HL中
- MOV D,B –将寄存器B的值移动到寄存器D中
- MOV E,C将寄存器C的值移到寄存器E中
- 与步骤1相同
- XCHG –将寄存器H的内容与寄存器D交换,将L的内容与E交换。
- HLT –停止执行程序,并停止任何进一步的执行