【8085汇编程序(找到一个数字的阶乘)】问题–编写一个汇编语言程序, 以使用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寄存器中获得
推荐阅读
- Perl开发快速入门简介
- Python print()中的end参数用法详细介绍
- HTML DOM console.time()方法用法示例介绍
- CSS overflow(溢出)用法示例代码介绍
- 如何实现用Java打印三角形图案(代码示例)
- jQuery.fn.extend()方法用法示例介绍
- Linux虚拟化(Linux容器(lxc)详细指南)
- 如何使用Python读取、写入和解析JSON(完整指南)
- 解释JavaScript中for(.. in)和for(.. of)循环语句之间的区别()