现在让我们看一下Intel8085微处理器的程序。该程序将计算两个16位数字的乘法。
问题陈述
编写8085汇编语言程序,将两个分别存储在8000H-8001H和8002H-8003H的16位数字相乘。
讨论区
该程序从存储单元8000H–8001Hand8002H–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 |
| LXISP,2000H | InitializeStack指针 |
| F003 | 2A,00、80 |
| LHLD8000H | 从8000H-8001H加载16位数据 |
| F006 | EB |
| XCHG | 交换HL和DE的数据 |
| F007 | 2A,02、80 |
| LHLD8002H | 加载第二个16位数字 |
| F00A | E5 |
| PUSHH将HL对推入堆栈 |
| F00B | C1 |
| POPB | 用堆栈中的HL对内容加载BC |
| F00C | 21,00,00 |
| LXIH,0000H清除HL对 |
| F00F | 22、52、80 |
| SHLD8052H | 存储0000具有LS2字节的结果 |
| F012 | 19 | LOOPDADD
将第一个号码添加到HL对 |
| F013 | D2、1F,F0 |
| JNCNINC
如果CY=0,则跳至NINC |
| F016 | E5 |
| PUSHH
将HL推入堆栈 |
| F017 | 2A,52、80 |
| LHLD8052 | 从LS的2字节结果中加载HL对 |
| F01A | 23 |
| INXH | 增加HLpair |
| F01B | 22、52、80 |
| SHLD8052H | 将HL对存储为结果的LS2字节 |
| F01E | E1
| POPH | 将堆栈内容弹出到HL对 |
| F01F | 0B | DCXB
DCXB | 减少BCregister对 |
| F020 | 78 |
| MOVA,B | 将B加载到A |
| F021 | B1 |
| ORAC
或C与A |
| F022 | C2、12,F0 |
| JNZLOOP
当Z=0时跳至LOOP |
| F025 | 22、50、80 |
| SHLD8050H | 将HL对存储到8050H |
| F028 | 76 |
| HLT | 终止程序 |
输出结果
第一输出
地址 | 数据 | .
.
..
.
.
| 8050 | 21 |
| 8051 | 43 |
| 8052 | 23 |
| 8053 | 01 |
.
.
..
.
.
第二输出
地址 | 数据 | .
.
..
.
.
| 8050 | 88 |
| 8051 | FF |
| 8052 | CD
| 8053 | 00 |
.
.
..
.
.