8085程序用于乘以两个8位数
在这个程序中,我们将学习如何使用8085微处理器来乘以两个8位数。
问题陈述
编写8085汇编语言程序,将存储在内存位置中的两个8位数相乘,并将16位结果存储到内存中。
讨论
8085没有乘法运算。要获得乘法的结果,我们应该使用重复加法的方法。
乘以两个8位数后,它可能会生成1字节或2字节的数字,因此我们使用两个寄存器来保存结果。
我们将数据保存在8000H和8001H位置。结果存储在8050H和8051H位置。
输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | DC |
8001 | AC |
. . . | . . . |
流程图
程序
地址 | 十六进制代码 | 标签 | 指令 | 注释 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H,8000H | 加载第一个操作数地址 | |
F003 | 46 | MOV B, M | 将第一个操作数存储到B寄存器 | |
F004 | 23 | INX H | 增加HL寄存器对 | |
F005 | AF | XRA A | 清零累加器 | |
F006 | 4F | MOV C, A | 将00H存储到C寄存器 | |
F007 | 86 | LOOP: | ADD M | 将内存元素与累加器相加 |
F008 | D2, 0C, F0 | JNC SKIP | 当进位标志为0时,跳过下一个任务 | |
F00B | 0C | INR C | 当进位为1时,增加C寄存器 | |
F00C | 05 | SKIP: | DCR B | 减小B寄存器 |
F00D | C2, 07, F0 | JNZ LOOP | 当零标志不为1时,跳转到循环 | |
F010 | 21, 50, 80 | LXI H,8050H | 加载目标地址 | |
F013 | 71 | MOV M, C | 将C寄存器内容存储到内存 | |
F014 | 23 | INX H | 增加HL寄存器对 | |
F015 | 77 | MOV M, A | 将累加器内容存储到内存 | |
F016 | 76 | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
. . . | . . . |
8050 | 93 |
8051 | D0 |
. . . | . . . |
广告