现在让我们看一下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 |
.
.
..
.
.