8085程序:将两位十六进制数转换为两个ASCII值


现在让我们来看一个Intel 8085微处理器的程序。这个程序将把8位数转换为两位ASCII值。

问题陈述

编写一个8085汇编语言程序,其中一个8位二进制数存储在内存地址8050H中。将每个四位数分离出来,并将其转换为相应的ASCII码,然后将其存储到内存地址8060H和8061H中。

讨论

在这个问题中,我们使用一个子程序将一位十六进制数(四位数)转换为其等效的ASCII值。由于8位数包含两个四位数,因此我们可以执行此子程序来查找它们的ASCII值。我们可以很容易地通过屏蔽高四位数来获得低四位数,而对于高四位数,我们必须首先屏蔽低四位数,然后将寄存器内容向右旋转四次,现在我们可以将其更改为ASCII值。

这里我们将输入3AH,程序将返回33和41。这些分别是3和A的ASCII值。

输入

地址
数据
.
.
.
.
.
.
8050
3A
.
.
.
.
.
.


流程图

程序

地址
十六进制代码
标签
助记符
注释
8000
31, 00, 81

LXI SP, 8100
初始化堆栈指针
8003
21, 50, 80
START
LXI H, 8050H
将指针初始化为输入缓冲区的第一个位置
8006
11, 60, 80

LXI D, 8060H
将指针初始化为输出缓冲区的第一个位置
8009
7E

MOV A, M
将8050H的内容移动到A
800A
47

MOV B, A
将A复制到B
800B
0F

RRC
将累加器向右旋转4次
800C
0F

RRC

800D
0F

RRC

800E
0F

RRC

800F
CD, 1A, 80

CALL ASCII
此子程序将二进制数转换为ASCII
8012
12

STAX D
将累加器的内容存储到由DE寄存器对指定的位置
8013
13

INX D
转到下一个位置
8014
78

MOV A, B
将B复制到A
8015
CD, 1A, 80

CALL ASCII
此子程序将二进制数转换为ASCII
8018
12

STAX D
将累加器的内容存储到由DE寄存器对指定的位置
8019
76

HLT
终止程序
801A
E6, 0F
ASCII
ANI 0FH
将BCD数转换为其对应的ASCII值
+ 48
0 到 9 ———————à 48 到 57
+ 55
A 到 F ———————à 65 到 70
+ 48 +7
所以 +48 是通用的,但如果十六进制数字在 A 到 F 之间,则需要额外添加 +7。
801C
FE, 0A

CPI 0AH

801E
DA, 23, 80

JC CODE

8021
C6, 07

ADI 07H

8023
C6, 30
CODE
ADI 30H

8025
C9

RET
返回控制权给调用程序


输出

地址
数据
.
.
.
.
.
.
8060
33
8061
41
.
.
.
.
.
.

更新于:2019年7月30日

251 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告