现在让我们看一下Intel 8085微处理器的程序。该程序将计算两个16位数字的乘法。
编写8085汇编语言程序,将两个分别存储在8000H -8001H和8002H-8003H的16位数字相乘。
该程序从存储单元8000H – 8001Hand 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 | InitializeStack指针 | |
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 | 用堆栈中的HL对内容加载BC | |
F00C | 21,00,00 | LXI H,0000H | 清除HL对 | |
F00F | 22、52、80 | SHLD 8052H | 存储0000具有LS 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 | 从LS的2字节结果中加载HL对 | |
F01A | 23 | INX H | 增加HLpair | |
F01B | 22、52、80 | SHLD 8052H | 将HL对存储为结果的LS 2字节 | |
F01E | E1 | POP H | 将堆栈内容弹出到HL对 | |
F01F | 0B | DCX B | DCX B | 减少BCregister对 |
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 |
. . . | . . . |