📜  8085程序添加两个16位数字

📅  最后修改于: 2021-06-28 16:13:53             🧑  作者: Mango

问题–使用以下方法编写汇编语言程序以将两个16位数字相加:

  • (a)8位操作
  • (b)16位操作

例子 –


(a)使用8位操作增加16位数字–与16位操作相比,这是一种冗长的方法,并且需要更多的存储空间。

算法 –

  1. 将第一个数字的低部分加载到B寄存器中
  2. 将第二个数字的下半部分加载到A(累加器)中
  3. 将数字相加并存储
  4. 将第一个数字的较高部分加载到B寄存器中
  5. 将第二个数字的较高部分加载到A(累加器)中
  6. 将两个数字与低位字节(如果有)中的进位相加,然后存储在下一个位置

程序 –

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

解释 –

  1. LDA 2050将2050的值存储在A(累加器)中
  2. MOV B,A将A的值存储到B寄存器中
  3. LDA 2052将2052处的值存储在A中
  4. ADD B将B和A的内容相加并存储在A中
  5. STA 3050将结果存储在内存位置3050中
  6. LDA 2051将2051的值存储在A中
  7. MOV B,A将A的值存储到B寄存器中
  8. LDA 2053将2053的值存储在A中
  9. ADC B将B,A的内容相加并从低位相加并存储在A中
  10. STA 3051将结果存储在内存位置3051中
  11. HLT停止执行

(b)使用16位操作添加16位数字–与8位操作相比,这是一种非常短的方法,并且需要的存储空间也更少。

算法 –

  1. 一次加载第一个数字的低位和高位
  2. 将第一个数字复制到另一个寄存器对
  3. 一次加载第二个数字的低位和高位
  4. 将两个寄存器对相加并将结果存储在存储位置中

程序 –

MEMORY ADDRESS MNEMONICS COMMENTS
2000 LHLD 2050 H-L ← 2050
2003 XCHG D \leftrightarrow H & E \leftrightarrow 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

解释 –

  1. LHLD 2050将L寄存器中的2050和H寄存器中的2051中的值加载(第一个数字)
  2. XCHG将H的内容复制到D寄存器并将L的内容复制到S寄存器
  3. LHLD 2052将L寄存器中的2052和H寄存器中的2053中的值加载(第二个数字)
  4. DAD D将H的值与D和L的值与E相加,并将结果存储在H和L中
  5. SHLD 3050将结果存储在内存位置3050
  6. HLT停止执行