使用子程序的8085程序,用于累加十个压缩BCD数。
我们将在此了解如何使用8085累加十个压缩BCD数。
问题陈述
一组十个压缩BCD数存储在从8040H到8049H开始的内存位置。
编写一个带有子程序的程序来以BCD形式累加这些数字。如果产生进位,则将其保存到寄存器B中,并将其调整为BCD。最终的和将小于9999BCD。将和存储在8060H和8061H位置。
编写第二个子程序来解压存储在寄存器A和B中的BCD和,并将它们存储在从8062H开始的OutputBuffer内存中。最高有效位(BCD4)应存储在8065H,最低有效位(BCD1)应存储在8062H。
讨论
数字从8040开始。由于B将存储进位,因此我们必须先清除B。在第一阶段,我们必须从内存中获取数字,然后将它们作为BCD数字相加,并相应地存储它们。在下一阶段,将完成解压任务。在该部分中,我们获取16位BCD数,然后将其分解为4位数字。然后将它们存储到指定位置。
输入
| 地址 | 数据 |
|---|---|
| … | … |
| 8040 | 12 |
| 8041 | 23 |
| 8042 | 42 |
| 8043 | 55 |
| 8044 | 10 |
| 8045 | 99 |
| 8046 | 35 |
| 8047 | 45 |
| 8048 | 76 |
| 8049 | 81 |
| … | … |
流程图


程序
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| 8000 | 21, 40, 80 | | LXI H 8040H | 用IN-BUFFER的第一个位置初始化指针 |
| 8003 | 0E, 0A | | MVI C 0AH | 用要累加的数据个数初始化计数器 |
| 8005 | AF | | XRA A | 清除累加器和寄存器B的内容 |
| 8006 | 47 | | MOV B, A | |
| 8007 | CD, 23, 80 | NEXTBCD | CALL BCDADD | 累加BCD数的子程序 |
| 800A | 23 | | INX H | 转到下一个位置 |
| 800B | 0D | | DCR C | 递减计数器,直到达到0 |
| 800C | C2, 07, 80 | | JNZ NEXTBCD | |
| 800F | 32, 60, 80 | | STA 8060 H | 存储A中可用的结果字节 |
| 8012 | 57 | | MOV D, A | 临时D = A |
| 8013 | 78 | | MOV A, B | 将B放入A |
| 8014 | 32, 61, 80 | | STA 8061 H | 将其存储到OUT-BUFFER中 |
| 8017 | 7A | | MOV A, D | 恢复A |
| 8018 | 21, 62, 80 | | LXI H 8062H | 用OUT-BUFFER的最后一个位置初始化指针 |
| 801B | CD, 2E, 80 | | CALL UNPAK | 从压缩BCD数中分离两个半字节的子程序 |
| 801E | 78 | | MOV A, B | 将B复制到A |
| 801F | CD, 2E, 80 | | CALL UNPAK | 从压缩BCD数中分离两个半字节的子程序 |
| 8022 | 76 | | HLT | 终止程序 |
| 8023 | 86 | BCDADD | ADD M | 将HL寄存器对指定的内存位置的内容与A相加 |
| 8024 | 27 | | DAA | 十进制调整累加器 |
| 8025 | D0 | | RNC | 如果没有产生进位,则返回到调用程序 |
| 8026 | 57 | | MOV D, A | 将A复制到D |
| 8027 | 78 | | MOV A, B | 如果产生进位,则调整寄存器B的内容 |
| 8028 | C6. 01 | | ADI 01H | |
| 802A | 27 | | DAA | |
| 802B | 47 | | MOV B, A | |
| 802C | 7A | | MOV A, D | 将D复制到A |
| 802D | C9 | | RET | 返回到调用程序 |
| 802E | 57 | UNPAK | MOV D, A | 将A复制到D |
| 802F | E6, 0F | | ANI 0FH | 屏蔽掉最高有效四位 |
| 8031 | 77 | | MOV M, A | 将A写入内存 |
| 8032 | 23 | | INX H | 转到下一个位置 |
| 8033 | 7A | | MOV A, D | 将D复制到A |
| 8034 | E6, F0 | | ANI F0H | 屏蔽掉最低有效四位 |
| 8036 | 0F | | RRC | 旋转累加器4次以获得第一个BCD数字 |
| 8037 | 0F | | RRC | |
| 8038 | 0F | | RRC | |
| 8039 | 0F | | RRC | |
| 803A | 77 | | MOV M, A | 将A写入内存 |
| 803B | 23 | | INX H | 转到下一个位置 |
| 803C | C9 | | RET | 返回到调用程序 |
输出
| 地址 | 数据 |
|---|---|
| … | … |
| 8060 | 78 |
| 8061 | 04 |
| 8062 | 08 |
| 8063 | 07 |
| 8064 | 04 |
| 8065 | 00 |
| … | … |
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP