8085微处理器程序:累加N个字存储单元的内容
在这里,我们将看到一个8085微处理器程序。该程序将累加N个字存储单元的内容。
问题陈述−
编写一个8085汇编语言程序,用于累加存储在内存中的N个16位数字。
讨论−
这些16位数字从内存地址8001H开始存储。N的值存储在地址8000H。累加完成后,结果将从地址8050H开始存储。
在8085中,我们只有少量寄存器。因此,我们将计数存储到内存中,当我们需要更新它时,我们将从内存中获取它,更新它,然后再次将其存储到内存中。
这里16位数字存储在DE和HL寄存器对中,通过使用DAD指令来进行累加。
输入
第一个输入
| 地址 | 数据 |
|---|---|
| … | … |
| 8000 | 03 |
| 8001 | 34 |
| 8002 | 12 |
| 8003 | 78 |
| 8004 | 56 |
| 8005 | BC |
| 8006 | 9A |
| … | … |
流程图

程序
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| F000 | 31, 00, C0 | LXI SP,C000H | 初始化堆栈指针 | |
| F003 | 21, 00, 00 | LXI H,0000H | 清零HL寄存器对 | |
| F006 | 22, 52, 80 | SHLD 8052H | 将HL寄存器对内容存储到8052H和8053H | |
| F009 | 01, 00, 80 | LXI B,8000H | 指向地址以获取数字计数 | |
| F00C | 0A | LDAX B | 将计数加载到累加器 | |
| F00D | 32, 00, 90 | STA 9000H | 临时存储累加器内容 | |
| F010 | 03 | LOOP | INX B | 指向获取低字节 |
| F011 | 0A | LDAX B | 将内存内容加载到累加器 | |
| F012 | 5F | MOV E,A | 将累加器内容存储到E寄存器 | |
| F013 | 03 | INX B | 指向获取高字节 | |
| F014 | 0A | LDAX B | 将内存内容加载到累加器 | |
| F015 | 57 | MOV D,A | 将累加器内容存储到D寄存器 | |
| F016 | 19 | DAD D | 将DE寄存器对与HL寄存器对相加 | |
| F017 | D2, 23, F0 | JNC SKIP | 如果CY=0则跳转到SKIP | |
| F01A | E5 | PUSH H | 将HL寄存器对内容压入堆栈 | |
| F01B | 2A, 52, 80 | LHLD 8052H | 将HL寄存器对加载为8052H和8253H的内容 | |
| F01E | 23 | INX H | 增加HL寄存器对内容 | |
| F01F | 22, 52, 80 | SHLD 8052H | 将HL寄存器对内容存储到8052H和8053H | |
| F022 | E1 | POP H | 从堆栈中取回HL寄存器对内容 | |
| F023 | 3A, 00, 90 | SKIP | LDA 9000H | 加载临时存储的数据 |
| F026 | 3D | DCR A | 将A寄存器减1 | |
| F027 | 32, 00, 90 | STA 9000H | 存储更新后的值 | |
| F02A | C2, 10, F0 | JNZ LOOP | 如果Z=0则跳转到LOOP | |
| F02D | 22, 50, 80 | SHLD 8050H | 将HL寄存器对内容存储到8050H和8051H | |
| F030 | 76 | HLT | 终止程序 |
输出
第一个输出
| 地址 | 数据 |
|---|---|
| … | … |
| 8050 | 68 |
| 8051 | 03 |
| 8052 | 01 |
| 8053 | 00 |
| … | … |
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP