8085程序实现以下函数:(a*b) + (c*d)


在这里,我们将了解如何使用8085实现数学函数。

问题陈述

编写一个程序来实现以下函数 (a*b) + (c*d),并将结果存储在内存位置8204和8205中。使用子程序执行乘法运算。这里a、b、c和d数字分别存储在内存位置8200H、8201H、8202H和8203H中。

讨论

8085中没有乘法指令。因此,我们必须使用子程序来执行乘法。在这个子程序中,它从HL对指向的内存中获取数字,并将结果返回到DE寄存器对。在将两个部分相乘后,存储中间结果,然后将它们相加以获得最终结果。

输入

地址
数据


8200
02
8201
03
8202
04
8203
05


 

地址
数据


8200
CA
8201
C6
8202
C8
8203
64


 

流程图

 

程序

地址
十六进制代码
标签
助记符
注释
8000
31, 00, 83
START
LXI SP, 8300 H
初始化堆栈指针SP = 8300 H
8003
21, 00, 82
 
LXI H, 8200 H
初始化内存指针HL = 8200 H,它是起始数据块地址
8006
CD, 19, 80
 
CALL MULTI
调用子程序Multi..它将HL作为源数据块指针,并将结果返回到DE寄存器对
8009
D5
 
PUSH D
存储结果1,即a * b
800A 
23
 
INX H
指向下一对数据
800B 
CD, 19, 80
 
CALL MULTI
调用子程序Multi..它将HL作为源数据块指针,并将结果返回到DE寄存器对
800E 
C1
 
POP B
获取位于顶部的BC中的结果1
800F 
E5
 
PUSH H
存储指针
8010
EB
 
XCHG
获取HL中的结果2,即c * d
8011
9
 
DAD B
HL= HL+BC(结果1+结果2:乘积之和)。因此HL = a * b + c * d
8012
EB
 
XCHG
将结果存储在DE中,HL将是目标指针
8013
E1
 
POP H
恢复内存指针
8014
23
 
INX H
指向目标地址
8015
73
 
MOV M, E
存储在HL中,结果的LSB(HL)= E
8016
23
 
INX H
指向下一个位置
8017
72
 
MOV M, D
存储在HL中,结果的MSB(HL)=D
8018
76
 
HLT
停止
8019
4E
MULTI
MOV C, M
C = no1
801A 
23
 
INX H
HL= HL+1;指向下一个数字
801B 
46
 
MOV B, M
B = no2
801C 
E5
 
PUSH H
保存HL寄存器对
801D 
26, 00
 
MVI H, 00 H
H = 00;跟踪进位(进位寄存器:将包含结果的MSB)
801F 
3E, 00
 
MVI A, 00 H
A = 00(和寄存器)
8021
80
UP
ADD B
A = A + B
8022
D2, 26, 80
 
JNC LOOP
进位= 1?如果不是,则转到循环
8025
24
 
INR H
H = H + 1
8026
0D
LOOP
DCR C
C = C – 1
8027
C2, 21, 80
 
JNZ UP
Z = 0?如果不是,则转到up
802A 
6F
 
MOV L, A
从A获取L中的和(结果的LSB)
802B 
EB
 
XCHG
从HL获取DE中的结果
802C 
E1
 
POP H
恢复HL寄存器对
802D 
C9
 
RET
返回主程序

 

输出

地址
数据


8204
1A
8205
00


 

地址
数据


8204
5C
8205
EA


 

更新于: 2019年7月30日

3K+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告