📜  8085代码将二进制数转换为ASCII代码

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

问题– 8085中的汇编级程序将二进制数字转换为ASCII数字。

例子 –

假设–必须转换为ASCII值的二进制数存储在存储位置2050中,输出将显示在存储位置3050和3051中。

算法 –

  1. 加载内容2050。
  2. 然后分离编号的LSB。通过再次加载2050的内容并将其旋转一位4次,使用ANI 0F指令和数字的MSB以获得数字的反转,然后再次使用ANI 0F分隔数字。
  3. 如果数字大于或等于0A(十六进制),则加37,否则加30转换为ASCII值(要检查数字是否大于或等于A,请使用指令:CPI 0A,然后检查进位标志,如果为0,则表示数字大于或等于A,并且如果1个数字小于A)。
  4. 现在,将两个数字的ASCII值分别存储在3050和3051中。

程序 –

主要例程:

ADDRESS MNEMONICS COMMENTS
2000 LDA 2050 A<-[2050]
2003 CALL 2500 go to address 2500
2006 STA 3050 A->[3050]
2009 LDA 2050 A<-[2050]
200C RLC Rotate the number by one bit to left without carry
200D RLC Rotate the number by one bit to left without carry
200E RLC Rotate the number by one bit to left without carry
200F RLC Rotate the number by one bit to left without carry
2010 CALL 2500 go to address 2500
2013 STA 3051 A->[3051]
2016 HLT Terminates the program

子例程:

ADDRESS MNEMONICS COMMENTS
2500 ANI 0F A<-[A] AND 0F
2502 CPI 0A [A]-0A
2504 JNC 250A Jump to [250A] if carryflag is 0
2507 ADI 30 A<-[A]+30
2509 RET Return to the next instruction from where subroutine address was called in main routine
250A ADI 37 A<-[A]+37
250C RET Return to the next instruction from where subroutine address was called in main routine

解释 –

主要例程:

  1. LDA 2050:该指令会将地址2050中的数字加载到累加器。
  2. CALL 2500:此指令将在其后停止执行主例程指令,并将移至子例程地址2500以执行子任务,并且在执行子例程指令后,它将返回主例程并在CALL 2500之后执行指令。
  3. STA 3050:该指令会将累加器的结果(在子例程中执行)存储到地址3050。
  4. LDA 2050:当在累加器中更改了先前加载的编号时,该指令将再次将地址2050中的编号加载到累加器。
  5. RLC:将累加器的内容向左旋转一位而不带进位。
  6. RLC:将累加器的内容向左旋转一位而不带进位。
  7. RLC:将累加器的内容向左旋转一位而不带进位。
  8. RLC:将累加器的内容向左旋转一位而不带进位。
    (应用RLC 4次将反转累加器的内容)
  9. 9. CALL 2500:此指令将在其后停止执行主例程指令,并将移至子例程地址2500以执行子任务,并且在执行子例程指令后,它将返回主例程并在CALL 2500之后执行指令。
  10. 10. STA 3051:该指令会将累加器的结果(在子例程中执行)存储到地址3051。
  11. 11. HLT:该指令将终止程序。

子例程:

  1. ANI 0F:该指令将分隔累加器中存在的数字的LSB,并将结果存储回累加器中。
  2. CPI 0A:该指令将累加器的内容与0A进行比较,即[A] -0A。
  3. JNC 205A:如果进位标志变为0,则它将跳至205A,否则移至下一条指令。
  4. ADI 30:它将30累加到累加器的内容中,然后再次将结果存储回累加器中。
  5. RET:现在,它将在下一条CALL指令后返回主程序,并开始执行主程序的指令。
  6. 它将37累加到累加器的内容中,然后再次将结果存储回累加器中。
  7. RET:现在,它将在下一条CALL指令后返回主程序,并开始执行主程序的指令。

下一篇文章:8085程序将8位BCD编号转换为ASCII代码