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 |
| . . . | . . . |
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP