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