问题—— 使用8085微处理器编写一个汇编语言程序,以确定给定的数字是否为素数。
null
如果数字为素数,则在存储结果的内存位置存储01H,否则存储00H。
例如:
Input : 03H Output : 01H The number 3 only has two divisors, 1 and 3. Hence, it is prime. Input : 09H Output : 00H The number 9 has three divisors, 1, 3 and 9. Hence, it is composite.
素数只有两个除数,1和数本身。 另一方面,一个复合数有3个或更多的除数。
算法:
- 以n作为输入
- 从i=n到1运行一个循环。对于每个迭代,检查我是否将n完全除掉。如果是,那么i就是n的除数
- 记下n的除数总数
- 如果除数是2,那么这个数就是素数,否则就是复合数
如何确定我是否是除数? 继续从股息中减去i,直到股息变成0或小于0。现在,检查股息的价值。如果是0,那么i是除数,否则不是。
步骤:
- 将数据从内存位置(2029H,任意选择)加载到累加器中
- 用00H初始化寄存器C。它存储n的除数
- 将累加器中的值移动到E中。这将作为循环的迭代器,从n到1。
- 将累加器中的值移动到B中。B永久存储n,因为累加器中的值将发生变化
- 将E中的值移动到D,并以累加器作为被除数,D作为除数执行除法。
- 除法:继续从A中减去D,直到A中的值变为0或小于0。之后,检查累加器中的值。如果它等于0,则通过将C中的值增加1来增加除数计数
- 通过将B中的值移动到A来恢复累加器的值,并继续循环,直到E变为0
- 现在,将除数从C移到A,检查它是否等于2。如果是,则存储01H至202AH(任意),否则存储00H。
202AH包含结果。
住址 | 标签 | 记忆的 |
---|---|---|
2000小时 | LDA 2029H | |
2001H | ||
2002H | ||
2003H | MVI C,00H | |
2004H | ||
2005H | MOV E,A | |
2006H | 莫夫B,A | |
2007年 | 循环1 | 电影D,E |
2008H | 回路2 | CMP D |
2009年h | JC dividendlessthan 0 | |
200AH | ||
200BH | ||
200CH | SUB D | |
200DH | JNZ LOOP2 | |
200EH | ||
200FH | ||
2010小时 | 除数小于0 | CPI 00H |
2011H | ||
2012年2月 | JNZ除数 | |
2013H | ||
2014H | ||
2015小时 | 印度卢比C | |
2016H | 除数 | 电影A,B |
2017H | DCR E | |
2018H | JNZ LOOP1 | |
2019H | ||
201AH | ||
201BH | MOV A,C | |
201CH | MVI C,00H | |
201DH | ||
201EH | CPI 02H | |
201FH | ||
2020H | JNZ复合材料 | |
2021H | ||
2022H | ||
2023H | 印度卢比C | |
2024H | 混合成的 | MOV A,C |
2025H | STA 202AH | |
2026H | ||
2027H | ||
2028H | HLT |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END