📜  8085程序,将十六进制数转换为ASCII码

📅  最后修改于: 2021-06-28 17:04:07             🧑  作者: Mango

问题:编写汇编级语言程序以将HEX代码转换为其相应的ASCII代码。
假设程序的起始地址和输入存储位置分别为2000和2050。

例子:

Input: 2050 E4 (Hex data)

Output:
2051 34 (ASCII code for 4)
2052 45 (ASCII code for E) 

算法:

  1. 将给定数据加载到累加器中并移至B寄存器
  2. 屏蔽累加器中十六进制十进制数的最高有效4位(上部半字节)。
  3. 调用子例程以获取最低有效4位的ASCII。
  4. 将其存储在内存中
  5. 将B寄存器移至累加器并屏蔽最低有效4位(低半字节)。
  6. 旋转上下半字节位置。
  7. 调用子例程以获取高位半字节的ASCII
  8. 将其存储在内存中
  9. 终止程序。

代码:

MEMORY ADDRESS MNEMONICS COMMENTS
2000 LDA 2050H Load the hex data
2003 MOV B, A move content of accumulator to B
2004 ANI OFH mask upper nibble
2006 CALL SUB1 get ascii code for upper nibble
2009 STA 2051H
2012 MOV A, B move content of B to accumulator
2013 ANI F0H mask lower nibble
2015 RLC
2016 RLC
2017 RLC
2018 RLC
2019 CALL SUB1 get ascii code for lower nibble
2022 STA 2052H
2025 HLT
SUB1 CPI 0AH
JC SKIP
ADI 07H
SKIP ADI 30H
RET

解释:

  1. LDA 2050H:在累加器中加载存储单元2050H的内容。
  2. MOV B,A:将累加器的内容复制到寄存器B。
  3. ANI OFH:在累加器和0FH值之间执行AND操作。
  4. CALL SUB1:调用存储位置SUB1上的子例程。
  5. STA 2051H:将累加器的内容存储在内存位置2051H中。
  6. MOV A,B:将寄存器B的内容复制到累加器。
  7. ANI F0H:在累加器和F0H值之间执行AND操作。
  8. RLC:向左旋转蓄能器。
  9. HLT:停止执行程序,并停止任何进一步的执行。
  10. CPI 0AH:将累加器内容与0AH值进行比较。
  11. JC SKIP:如果进位设置为1,则跳转到存储位置SKIP。
  12. ADI 07H:将07H值添加到累加器的内容中。
  13. RET:无条件地从子程序返回。