问题–使用以下方法编写汇编语言程序以将两个16位数字相加:
- (a)8位操作
- (b)16位操作
例子 –
(a)使用8位操作增加16位数字–与16位操作相比,这是一种冗长的方法,并且需要更多的存储空间。
算法 –
- 将第一个数字的低部分加载到B寄存器中
- 将第二个数字的下半部分加载到A(累加器)中
- 将数字相加并存储
- 将第一个数字的较高部分加载到B寄存器中
- 将第二个数字的较高部分加载到A(累加器)中
- 将两个数字与低位字节(如果有)中的进位相加,然后存储在下一个位置
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | LDA 2050 | A ← 2050 |
2003 | MOV B, A | B ← A |
2004 | LDA 2052 | A ← 2052 |
2007 | ADD B | A ← A+B |
2008 | STA 3050 | A → 3050 |
200B | LDA 2051 | A ← 2051 |
200E | MOV B, A | B ← A |
200F | LDA 2053 | A ← 2053 |
2012 | ADC B | A ← A+B+CY |
2013 | STA 3051 | A → 3051 |
2016 | HLT | Stops execution |
解释 –
- LDA 2050将2050的值存储在A(累加器)中
- MOV B,A将A的值存储到B寄存器中
- LDA 2052将2052处的值存储在A中
- ADD B将B和A的内容相加并存储在A中
- STA 3050将结果存储在内存位置3050中
- LDA 2051将2051的值存储在A中
- MOV B,A将A的值存储到B寄存器中
- LDA 2053将2053的值存储在A中
- ADC B将B,A的内容相加并从低位相加并存储在A中
- STA 3051将结果存储在内存位置3051中
- HLT停止执行
(b)使用16位操作添加16位数字–与8位操作相比,这是一种非常短的方法,并且需要的存储空间也更少。
算法 –
- 一次加载第一个数字的低位和高位
- 将第一个数字复制到另一个寄存器对
- 一次加载第二个数字的低位和高位
- 将两个寄存器对相加并将结果存储在存储位置中
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | LHLD 2050 | H-L ← 2050 |
2003 | XCHG | D H & E L |
2004 | LHLD 2052 | H-L ← 2052 |
2007 | DAD D | H ← H+D & L ← L+E |
2008 | SHLD 3050 | A → 3050 |
200B | HLT | Stops execution |
解释 –
- LHLD 2050将L寄存器中的2050和H寄存器中的2051中的值加载(第一个数字)
- XCHG将H的内容复制到D寄存器并将L的内容复制到S寄存器
- LHLD 2052将L寄存器中的2052和H寄存器中的2053中的值加载(第二个数字)
- DAD D将H的值与D和L的值与E相加,并将结果存储在H和L中
- SHLD 3050将结果存储在内存位置3050
- HLT停止执行