问题—— 8085中的汇编级程序,将二进制数转换为ASCII数。
null
例如——
假设—— 必须转换为ASCII值的二进制数存储在存储位置2050,输出将显示在存储位置3050和3051。
算法-
- 加载2050的内容。
- 然后使用ANI 0F指令分离编号的LSB,并再次加载2050的内容,将其旋转一位4次,以获得数字的倒数,然后再次使用ANI 0F分离数字。
- 如果数字大于或等于0A(十六进制),则加37,否则加30以转换为ASCII值(用于检查数字大于或等于A,则使用指令:CPI 0A,然后检查进位标志,如果为0,则表示数字大于或等于A,如果1位小于A)。
- 现在将两个数字的ASCII值分别存储在3050和3051中。
项目-
主要程序:
住址 | 记忆法 | 评论 |
---|---|---|
2000 | LDA 2050 | A |
2003 | 打2500 | 请到地址2500 |
2006 | STA 3050 | A->[3050] |
2009 | LDA 2050 | A |
200C | RLC | 将数字向左旋转一位,不带进位 |
200D | RLC | 将数字向左旋转一位,不带进位 |
200E | RLC | 将数字向左旋转一位,不带进位 |
200F | RLC | 将数字向左旋转一位,不带进位 |
2010 | 打2500 | 请到地址2500 |
2013 | STA 3051 | A->[3051] |
2016 | HLT | 终止程序 |
子程序:
住址 | 助记符 | 评论 |
---|---|---|
2500 | ANI 0F | A |
2502 | CPI 0A | [A] -0A |
2504 | JNC 250A | 如果结转滞后为0,则跳至[250A] |
2507 | ADI 30 | A |
2509 | RET | 返回到主例程中调用子程序地址的下一条指令 |
250A | ADI 37 | A |
250摄氏度 | RET | 返回到主例程中调用子程序地址的下一条指令 |
解释——
主要程序:
- LDA 2050: 此指令将从地址2050向累加器加载数字。
- 拨打2500: 此指令将停止执行主例行程序指令,并移动到子程序地址2500以执行子任务,执行子例行程序指令后,返回主例行程序并在调用2500后执行指令。
- STA 3050: 该指令将累加器的结果(在子程序中执行)存储到地址3050。
- LDA 2050: 此指令将再次将地址2050中的数字加载到累加器中,因为先前加载的数字在累加器中发生了更改。
- RLC: 将累加器的内容向左旋转一位,不带进位。
- RLC: 将累加器的内容向左旋转一位,不带进位。
- RLC: 将累加器的内容向左旋转一位,不带进位。
- RLC: 将累加器的内容向左旋转一位,不带进位。 (应用RLC 4次,将反转蓄能器的内容)
- 9.拨打2500: 此指令将停止执行主例行程序指令,并移动到子程序地址2500以执行子任务,执行子例行程序指令后,返回主例行程序并在调用2500后执行指令。
- 10.STA 3051: 该指令将累加器的结果(在子程序中执行)存储到地址3051。
- 11.HLT: 此指令将终止程序。
子程序:
- ANI 0F: 此指令将分离累加器中数字的LSB,并将结果存储回累加器。
- CPI 0A: 此指令将比较累加器的内容与0A,即[A]-0A。
- JNC 205A: 如果结转延迟变为0,则它将跳转到205A,否则将移动到下一条指令。
- ADI 30: 它将向累加器的内容中添加30,并再次将结果存储回累加器。
- RET: 现在,在调用下一条指令后,它将返回到主例程,并开始执行主例程的指令。
-
它将向累加器的内容中添加37,并再次将结果存储回累加器。 - RET: 现在,在调用下一条指令后,它将返回到主例程,并开始执行主例程的指令。
下一篇文章: 8085将8位BCD数转换为ASCII码的程序
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END