8085程序:相减数组中两个连续字节
在这里,我们将学习如何使用8085微处理器来减去数组中两个连续的元素。
问题陈述
编写一个8085程序,该程序减去数组中两个连续的元素并将结果存储在同一位置。结果将放置在与获取它们相同的位置。数字从8001号位置开始存储。数组的大小存储在8000号位置。
讨论
我们将使用一个子程序来解决这个问题。该子程序将减去两个连续的数字并将它们存储到正确的位置。将多次调用该子程序以减去所有连续的数对。任务将执行元素数量的一半次。因此,我们获取计数,然后将其右移以使其减半。我们通过进位位进行旋转。如果进位位已为高电平,则可能会存储不同的结果,因此我们使用STC和CMC指令清除进位位。
输入
| 地址 | 数据 |
|---|---|
| … | … |
| 8000 | 0A |
| 8001 | E9 |
| 8002 | D3 |
| 8003 | AD |
| 8004 | 61 |
| 8005 | 2A |
| 8006 | 1F |
| 8007 | 5D |
| 8008 | 26 |
| 8009 | A9 |
| 800A | 35 |
| … | … |
流程图

程序
| 地址 | 十六进制代码 | 标号 | 助记符 | 注释 |
|---|---|---|---|---|
| F000 | 21, 00, 80 | | LXI H,8000 | 指向获取数组大小的位置 |
| F003 | 7E | | MOV A,M | 将数组大小加载到累加器A |
| F004 | 37 | | STC | 设置进位标志 |
| F005 | 3F | | CMC | 反转进位标志 |
| F006 | 0F | | RRC | 右移,带进位 |
| F007 | 47 | | MOV B,A | 将A存储到B |
| F008 | 23 | LOOP: | INX H | 指向下一个位置 |
| F009 | CD, 11, F0 | | CALL PADD | 调用PADD子程序 |
| F00C | 05 | | DCR B | 将B减1 |
| F00D | C2, 08, F0 | | JNZ LOOP | 跳转到LOOP |
| F010 | 76 | | HLT | 终止程序 |
| F011 | 0E, 00 | PADD: | MVI C,00H | 清除C寄存器 |
| F013 | 7E | | MOV A,M | 将第一个数字从内存加载到A |
| F014 | 23 | | INX H | 指向下一个位置 |
| F015 | 96 | | SUB M | A减去内存单元的值 |
| F016 | D2, 1A, F0 | | JNC STORE | 如果进位标志未设置,跳转到STORE |
| F019 | 0C | | INR C | 否则,将C加1 |
| F01A | 71 | STORE: | MOV M,C | 将C存储到内存 |
| F01B | 2B | | DCX H | 指向前一个位置 |
| F01C | 77 | | MOV M,A | 将A存储到内存 |
| F01D | 23 | | INX H | 指向下一个位置 |
| F01E | C9 | | RET | 从子程序返回 |
输出
| 地址 | 数据 |
|---|---|
| … | … |
| 8001 | 16 |
| 8002 | 00 |
| 8003 | 4C |
| 8004 | 00 |
| 8005 | 0B |
| 8006 | 00 |
| 8007 | 37 |
| 8008 | 00 |
| 8009 | 74 |
| 800A | 00 |
| … | … |
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP