问题– 8085中的汇编级程序将二进制数字转换为ASCII数字。
例子 –
假设–必须转换为ASCII值的二进制数存储在存储位置2050中,输出将显示在存储位置3050和3051中。
算法 –
- 加载内容2050。
- 然后分离编号的LSB。通过再次加载2050的内容并将其旋转一位4次,使用ANI 0F指令和数字的MSB以获得数字的反转,然后再次使用ANI 0F分隔数字。
- 如果数字大于或等于0A(十六进制),则加37,否则加30转换为ASCII值(要检查数字是否大于或等于A,请使用指令:CPI 0A,然后检查进位标志,如果为0,则表示数字大于或等于A,并且如果1个数字小于A)。
- 现在,将两个数字的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 |
解释 –
主要例程:
- LDA 2050:该指令会将地址2050中的数字加载到累加器。
- CALL 2500:此指令将在其后停止执行主例程指令,并将移至子例程地址2500以执行子任务,并且在执行子例程指令后,它将返回主例程并在CALL 2500之后执行指令。
- STA 3050:该指令会将累加器的结果(在子例程中执行)存储到地址3050。
- LDA 2050:当在累加器中更改了先前加载的编号时,该指令将再次将地址2050中的编号加载到累加器。
- RLC:将累加器的内容向左旋转一位而不带进位。
- RLC:将累加器的内容向左旋转一位而不带进位。
- RLC:将累加器的内容向左旋转一位而不带进位。
- RLC:将累加器的内容向左旋转一位而不带进位。
(应用RLC 4次将反转累加器的内容) - 9. CALL 2500:此指令将在其后停止执行主例程指令,并将移至子例程地址2500以执行子任务,并且在执行子例程指令后,它将返回主例程并在CALL 2500之后执行指令。
- 10. STA 3051:该指令会将累加器的结果(在子例程中执行)存储到地址3051。
- 11. HLT:该指令将终止程序。
子例程:
- ANI 0F:该指令将分隔累加器中存在的数字的LSB,并将结果存储回累加器中。
- CPI 0A:该指令将累加器的内容与0A进行比较,即[A] -0A。
- JNC 205A:如果进位标志变为0,则它将跳至205A,否则移至下一条指令。
- ADI 30:它将30累加到累加器的内容中,然后再次将结果存储回累加器中。
- RET:现在,它将在下一条CALL指令后返回主程序,并开始执行主程序的指令。
它将37累加到累加器的内容中,然后再次将结果存储回累加器中。 - RET:现在,它将在下一条CALL指令后返回主程序,并开始执行主程序的指令。
下一篇文章:8085程序将8位BCD编号转换为ASCII代码