问题–编写一个汇编语言程序, 以使用8085微处理器来计算数字的阶乘。
示例–
Input : 04H
Output : 18H
as 04*03*02*01 = 24 in decimal => 18H
在8085微处理器中, 不存在直接指令将两个数字相乘, 因此乘法是通过重复加法来完成的, 因为4×3等于4 + 4 + 4(即3次)。
将04H加载到D寄存器中->添加04H 3次-> D寄存器现在包含0CH->添加0CH 2次-> D寄存器现在包含18H->加18H 1次-> D寄存器现在包含18H->输出为18H
算法–
- 将数据加载到寄存器B
- 要开始乘法, 请将D设置为01H
- 跳至步骤7
- 递减B以乘以先前的数字
- 跳至步骤3, 直到B> 0
- 将内存指针移到下一个位置并存储结果
- 向E加载B的内容并清除累加器
- 重复将D的内容添加到累加器E次
- 将累加器内容存储到D
- 转到步骤4
地址 | 标签 | 助记符 | 注释 |
---|---|---|---|
2000H | 数据 | 数据字节 | |
2001H | 结果 | 阶乘结果 | |
2002H | LXI H, 2000H | 从内存加载数据 | |
2005H | MOV B, M | 将数据加载到B寄存器 | |
2006H | MVI D, 01H | 设置D寄存器为1 | |
2008H | 阶乘 | 多次呼叫 | 子程序乘法 |
200BH | DCR B | 递减B | |
200CH | JNZ MULTIPLYLOOP | 调用阶乘直到B变为0 | |
200FH | INX H | 增量 | |
2010H | MOV M, D | 将结果存储在内存中 | |
2011H | HLT | 停 | |
2100H | 乘 | MOV E, B | 将B的内容传输到C |
2101H | MVI A, 00H | 清除累加器以存储结果 | |
2103H | 多重循环 | ADD D | 将D的内容添加到A |
2104H | DCR E | 递减E | |
2105H | JNZ多重循环 | 重复添加 | |
2108H | MOV D, A | 将A的内容传输到D | |
2109H | RET | 从子程序返回 |
说明–
- 首先用数据设置寄存器B。
- 通过一次调用MULTIPLY子例程将寄存器D设置为数据。
- 通过将MULTIPLY子例程称为4 * 3等于4 + 4 + 4(即3次), 将B减1并将D加到自身B上。
- 重复上述步骤, 直到B达到0, 然后退出程序。
- 结果在存储在存储器中的D寄存器中获得
评论前必须登录!
注册