8085程序用于乘以两个16位二进制数
现在让我们来看一个 Intel 8085 微处理器的程序。这个程序将计算两个16位数的乘积。
问题陈述
编写 8085 汇编语言程序,将存储在 8000H - 8001H 和 8002H - 8003H 的两个 16 位数相乘。
讨论
此程序从内存位置 8000H – 8001H 和 8002H – 8003H 获取 16 位数据。32 位结果存储在位置 8050H – 8053H。
这里我们用两个 16 位数进行了测试。结果如下
1111H × 1111H = 01234321H
1C24H × 0752H = 00CDFF88H
输入
第一个输入
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8000 | 11 |
| 8001 | 11 |
| 8002 | 11 |
| 8003 | 11 |
| . . . | . . . |
第二个输入
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8000 | 24 |
| 8001 | 1C |
| 8002 | 52 |
| 8003 | 07 |
| . . . | . . . |
流程图
程序
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| F000 | 31, 00, 20 | LXI SP,2000H | 初始化堆栈指针 | |
| F003 | 2A, 00, 80 | LHLD 8000H | 从 8000H - 8001H 加载 16 位数据 | |
| F006 | EB | XCHG | 交换 HL 和 DE 中的数据 | |
| F007 | 2A, 02, 80 | LHLD 8002H | 加载第二个 16 位数 | |
| F00A | E5 | PUSH H | 将 HL 对压入堆栈 | |
| F00B | C1 | POP B | 从堆栈中加载 BC 与 HL 对的内容 | |
| F00C | 21, 00, 00 | LXI H,0000H | 清除 HL 对 | |
| F00F | 22, 52, 80 | SHLD 8052H | 将 0000H 存储为结果的低 2 个字节 | |
| F012 | 19 | LOOP | DAD D | 将第一个数加到 HL 对中 |
| F013 | D2, 1F, F0 | JNC NINC | 如果 CY = 0,跳转到 NINC | |
| F016 | E5 | PUSH H | 将 HL 压入堆栈 | |
| F017 | 2A, 52, 80 | LHLD 8052 | 从结果的低 2 个字节加载 HL 对 | |
| F01A | 23 | INX H | 增加 HL 对 | |
| F01B | 22, 52, 80 | SHLD 8052H | 将 HL 对存储为结果的低 2 个字节 | |
| F01E | E1 | POP H | 将堆栈内容弹出到 HL 对 | |
| F01F | 0B | NINC | DCX B | 减少 BC 寄存器对 |
| F020 | 78 | MOV A,B | 将 B 加载到 A | |
| F021 | B1 | ORA C | 将 C 与 A 进行或运算 | |
| F022 | C2, 12, F0 | JNZ LOOP | 当 Z = 0 时,跳转到 LOOP | |
| F025 | 22, 50, 80 | SHLD 8050H | 将 HL 对存储到 8050H | |
| F028 | 76 | HLT | 终止程序 |
输出
第一个输出
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8050 | 21 |
| 8051 | 43 |
| 8052 | 23 |
| 8053 | 01 |
| . . . | . . . |
第二个输出
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8050 | 88 |
| 8051 | FF |
| 8052 | CD |
| 8053 | 00 |
| . . . | . . . |
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP