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 |
… | … |
广告