8085程序:两个多字节数的减法
现在让我们来看一个Intel 8085微处理器的程序。这个程序主要用于减去多字节数。
问题陈述:
编写8085汇编语言程序,以添加两个多字节数。
讨论:
我们使用3字节数。这些数字存储在内存位置8001H和8004H中。8000H位置存储了另一个信息。在这里,我们存储字节计数。结果存储在位置8050H中。
我们将第一个操作数块地址放入DE寄存器对中,并将第二个操作数块地址放入HL寄存器对中。BC寄存器对存储结果的目标地址。首先,我们清除进位标志。在8085中,没有指令可以将CY标志设置为0,因此我们需要两个连续的指令。STC和CMC,第一个是将CY设置为1,然后对其取反使其为0。我们从内存中获取数字,并执行带借位的减法指令SBB以获得结果。因此,生成整个结果。
输入:
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 03 |
8001 | 73 |
8002 | 21 |
8003 | 65 |
8004 | 88 |
8005 | 51 |
8006 | 27 |
. . . | . . . |
流程图:
程序:
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 11, 01, 80 | LXI D,8001H | 指向第一个操作数 | |
F003 | 21, 04, 80 | LXI H,8004H | 指向第二个操作数 | |
F006 | 01, 50, 80 | LXI B,8050H | 指向目标地址 | |
F009 | 37 | STC | 设置进位 | |
F00A | 3F | CMC | 取反进位 | |
F00B | 1A | LOOP | LDAX D | 从DE指向的内存加载A |
F00C | 9E | SBB M | 减去内存元素和借位 | |
F00D | 02 | STAX B | 将结果存储到BC指向的内存中 | |
F00E | 23 | INX H | 增加HL寄存器对 | |
F00F | 13 | INX D | 增加DE寄存器对 | |
F010 | 03 | INX B | 增加BC寄存器对 | |
F011 | 3A, 00, 80 | LDA 8000H | 将大小加载到A中 | |
F014 | 3D | DCR A | 将A减1 | |
F015 | 32, 00, 80 | STA 8000H | 将更新的大小存储到内存中 | |
F018 | C2, 0B, F0 | JNZ LOOP | 如果Z=0,则跳转到LOOP | |
F01B | 76 | HLT | 终止程序 |
输出:
地址 | 数据 |
---|---|
. . . | . . . |
8050 | EB |
8051 | CF |
8052 | 3D |
. . . | . . . |
广告