8085程序用于乘以两个两位BCD数


现在让我们来看一个Intel 8085微处理器的程序。这个程序将找到两个BCD数的乘积结果。

问题陈述

编写8085汇编语言程序以查找两个BCD数的乘积。这些数字存储在8000H和8001H位置。

讨论

在这个程序中,数据是从8000H和8001H获取的。结果存储在8050H和8051H位置。

众所周知,8085没有乘法指令,因此我们必须使用重复加法方法。在这个过程中,在每次加法之后,我们都会调整累加器值以获得十进制等价物。当存在进位时,我们会增加MS-Byte的值。 我们可以使用INR指令进行递增,但这里使用ADI 01H。INR指令不影响CY标志,因此我们需要ADI指令。

输入

第一个输入

地址
数据
.
.
.
.
.
.
8000
12
8001
20
.
.
.
.
.
.

第二个输入

地址
数据
.
.
.
.
.
.
8000
27
8001
03
.
.
.
.
.
.

流程图

程序

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

LXI H,8000H
加载第一个操作数地址
F003
46

MOV B, M
将第一个操作数存储到B
F004
23

INX H
增加HL对
F005
4E

MOV C, M
将第二个操作数存储到寄存器C
F006
1E, 00

MVI E, 00H
清除寄存器E
F008
63

MOV H, E
清除H寄存器
F009
7B

MOV A, E
清除A寄存器
F00A
B9

CMP C
将C与A比较
F00B
CA, 23, F0

JZ DONE
当Z=0时,跳转到DONE
F00E
80
LOOP
ADD B
将B与A相加
F00F
27

DAA
十进制调整
F010
57

MOV D, A
将A存储到D
F011
D2, 19, F0

JNC NINC
跳转到NINC
F014
7C

MOV A, H
将H存储到A
F015
C6, 01

ADI 01H
将A增加1
F017
27

DAA
十进制调整
F018
67

MOV H, A
从A恢复H
F019
7B
NINC
MOV A, E
将E加载到A
F01A
C6, 01

ADI 01H
将A增加1
F01C
27

DAA
十进制调整
F01D
5F

MOV E, A
从A恢复E
F01E
B9

CMP C
将C与A比较
F01F
7A

MOV A,D
将D加载到A
F020
C2, 0E, F0

JNZ LOOP
跳转到LOOP
F023
6F
DONE
MOV L, A
将A加载到L
F024
22, 50, 80

SHLD 8050H
将HL对存储在8050和8051位置
F027
76

HLT
终止程序


输出

第一个输出

地址
数据
.
.
.
.
.
.
8050
40
8051
02
.
.
.
.
.
.

第二个输出

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

更新于: 2019年7月30日

3K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告