8085程序,用于确定该数字是否为素数

问题—— 使用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]-8085程序,用于确定该数字是否为素数-yiteyi-C++库

素数只有两个除数,1和数本身。 另一方面,一个复合数有3个或更多的除数。

算法:

  1. 以n作为输入
  2. 从i=n到1运行一个循环。对于每个迭代,检查我是否将n完全除掉。如果是,那么i就是n的除数
  3. 记下n的除数总数
  4. 如果除数是2,那么这个数就是素数,否则就是复合数

如何确定我是否是除数? 继续从股息中减去i,直到股息变成0或小于0。现在,检查股息的价值。如果是0,那么i是除数,否则不是。

步骤:

  1. 将数据从内存位置(2029H,任意选择)加载到累加器中
  2. 用00H初始化寄存器C。它存储n的除数
  3. 将累加器中的值移动到E中。这将作为循环的迭代器,从n到1。
  4. 将累加器中的值移动到B中。B永久存储n,因为累加器中的值将发生变化
  5. 将E中的值移动到D,并以累加器作为被除数,D作为除数执行除法。
  6. 除法:继续从A中减去D,直到A中的值变为0或小于0。之后,检查累加器中的值。如果它等于0,则通过将C中的值增加1来增加除数计数
  7. 通过将B中的值移动到A来恢复累加器的值,并继续循环,直到E变为0
  8. 现在,将除数从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
喜欢就支持一下吧
点赞6 分享