8085程序:求N个字单元内容之和
现在让我们来看一个Intel 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 | 用8052H和8253H的内容加载HL | |
| 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