基于X内容对两个BCD数进行运算的8085程序


现在让我们来看一个Intel 8085微处理器的程序。在这个程序中,我们将看到如何根据选择对BCD数进行不同的运算。

问题陈述:

编写8085汇编语言程序,根据选择对两个8位BCD数执行一些运算。

讨论:

在这个程序中,我们选择一个选项。选项值存储在内存位置8000H(命名为X)。BCD数存储在位置8001H和8002H。我们将结果存储在位置8050H和8051H。

如果选择是00H,则执行加法;对于01H,执行减法;对于02H,执行乘法运算。

输入:

第一个输入

地址
数据
.
.
.
.
.
.
8000
00
8001
97
8002
88
.
.
.
.
.
.

第二个输入

地址
数据
.
.
.
.
.
.
8000
01
8001
97
8002
88
.
.
.
.
.
.

第三个输入

地址
数据
.
.
.
.
.
.
8000
02
8001
05
8002
04
.
.
.
.
.
.

流程图:

程序:

地址
十六进制代码
标签
指令助记符
注释
F000
21, 00, 80

LXI H,8000H
指向获取选择的地址
F003
7E

MOV A,M
将选择加载到A寄存器
F004
FE, 00

CPI 00H
比较是否为加法
F006
CA,14, F0

JZ ADD
跳转到加法运算
F009
FE, 01

CPI 01H
比较是否为减法
F00B
CA,27, F0

JZ SUB
跳转到减法运算
F00E
FE, 02

CPI 02H
比较是否为乘法
F010
CA, 3F, F0

JZ MUL
跳转到乘法运算
F013
76

HLT
终止程序
F014
23
ADD
INX H
指向第一个操作数
F015
7E

MOV A,M
将操作数加载到A寄存器
F016
23

INX H
指向下一个操作数
F017
86

ADD M
将M与A相加
F018
27

DAA
十进制调整
F019
6F

MOV L,A
将A寄存器存储到L寄存器
F01A
D2, 22, F0

JNC SKP1
如果CY=0,跳转到SKP1
F01D
26, 01

MVI H,01H
将01H加载到H寄存器
F01F
C3, 62, F0

JMP STORE
存储结果
F022
26, 00
SKP1
MVI H,00H
清除HL寄存器
F024
C3, 62, F0

JMP STORE
将HL寄存器作为结果存储
F027
23
SUB
INX H
指向第一个操作数
F028
46

MOV B,M
将操作数加载到B寄存器
F029
3E, 99

MVI A,99H
将99H加载到A寄存器
F02B
23

INX H
指向下一个操作数
F02C
96

SUB M
从A寄存器减去M
F02D
C6, 01

ADI 01H
加上01H得到十的补码
F02F
80

ADD B
将B与A相加
F030
27

DAA
十进制调整
F031
6F

MOV L,A
将A寄存器存储到L寄存器
F032
DA, 3A, F0

JC SKP2
如果CY=1,跳转到SKP2
F035
26, FF

MVI H,FFH
将FFH加载到H寄存器
F037
C3, 62, F0

JMP STORE
存储结果
F03A
26, 00
SKP2
MVI H,00H
清除HL寄存器
F03C
C3, 62, F0

JMP STORE
将HL寄存器作为结果存储
F03F
23
MUL
INX H
指向第一个操作数
F040
46

MOV B,M
将操作数加载到B寄存器
F041
23

INX H
指向下一个操作数
F042
4E

MOV C,M
加载第二个操作数
F043
26, 00

MVI H,00H
清除H寄存器
F045
AF

XRA A
清除A寄存器
F046
B9

CMP C
将C与A比较
F047
CA, 5E, F0

JZ DONE
如果Z=1,跳转到DONE
F04A
80
LOOP
ADD B
将B与A相加
F04B
27

DAA
十进制调整
F04C
57

MOV D,A
将A寄存器移动到D寄存器
F04D
D2, 55, F0

JNC NINC
如果CY=0,则不增加H
F050
7C

MOV A,H
将H寄存器加载到A寄存器
F051
C6, 01

ADI 01H
增加A寄存器
F053
27

DAA
十进制调整
F054
67

MOV H,A
将数据返回H寄存器
F055
79
NINC
MOV A,C
将C寄存器加载到A寄存器
F056
C6, 99

ADI 99H
将A与99H相加
F058
27

DAA
十进制调整
F059
4F

MOV C,A
将A寄存器再次加载到C寄存器
F05A
7A

MOV A,D
将D寄存器的数据返回A寄存器
F05B
C2, 4A, F0

JNZ LOOP
如果Z=0,跳转到LOOP
F05E
6F
DONE
MOV L,A
将A寄存器的数据存入L寄存器
F05F
C3, 62, F0

JMP STORE
将HL寄存器作为结果存储
F062
22, 50, 80
STORE
SHLD 8050H
从HL寄存器存储结果
F065
76

HLT
终止程序

输出:

第一个输出

地址
数据
.
.
.
.
.
.
8050
85
8051
01
.
.
.
.
.
.

第二个输出

地址
数据
.
.
.
.
.
.
8050
09
8051
00
.
.
.
.
.
.

第三个输出

地址
数据
.
.
.
.
.
.
8050
20
8051
00
.
.
.
.
.
.


更新于:2019年7月30日

99 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告