汇编语言素数判断程序 红太狼 2022-12-22 08:55 172阅读 0赞 题目: 编写一个程序,提示用户输入一个数字,然后显示信息说明该数字是否是素数。素数(Prime)是只能被自身和1整除的自然数。 (1)采用直接简单的算法:假设输入N,将其逐个除以2~N-1,只要能整除(余数为0)说明不是素数,只有都不能整除才是素数。 (2)采用只对奇数整除的算法:1、2和3是素数,所有大于3的偶数不是素数,从5开始的数字只要除以从3开始的奇数,只有都不能整除才是素数。 第一问: ;素数的判断程序 ; eg0000.asm in Windows Console include io32.inc .data msg byte 13,10,'this number is one prime',0 mmsg byte 13,10,'this number is not a prime',0;做出必要的提示说明 var dword ? ; 数据定义 .code start: call readuid;素数的判断只是针对无符号数进行的,所以我们这里面要调用指令来进行无符号数的输入 cmp eax,3;首先小于等于三的数都是素数 jbe doney cdq;该指令的作用是将edx的最高位设置到edx每一位上 mov esi,eax;将eax的值先赋给esi,因为做过出发运算之后需要我们将eax的值进行恢复 mov edi,edx;将我们的扩展位赋值给edi和前面的原理是一样的都是为了除法运算之后进行数据的恢复 mov ebx,2;我们从2开始向后判断 again: div ebx;调用div指令进行除法的运算 test edx,edx;因为edx中保存的是我们的余数,可以使用text来检验最终除法运算的余数是不是零 jz donen;如果是0的话代表有因子所以不是素数,结束循环 inc ebx;增加1来继续进行判断 cmp ebx,esi;结束循环的条件 mov eax,esi;数值恢复 mov edx,edi;数值恢复 jb again doney:;下面都是一些提示信息的显示 mov eax,offset msg call dispmsg jmp done donen: mov eax,offset mmsg call dispmsg done: exit 0 ; 子程序 end start 第二问: ;素数的判断程序 ; eg0000.asm in Windows Console include io32.inc .data msg byte 13,10,'this number is one prime',0 mmsg byte 13,10,'this number is not a prime',0;做出必要的提示说明 var dword ? ; 数据定义 .code start: call readuid;素数的判断只是针对无符号数进行的,所以我们这里面要调用指令来进行无符号数的输入 cmp eax,3 jbe doney cdq;该指令的作用是将edx的最高位设置到edx每一位上 mov esi,eax mov edi,edx mov ebx,3;和前一个程序不同的地方在此处,从三开始 again: div ebx test edx,edx jz donen add ebx,2;每次加2 cmp ebx,esi mov eax,esi mov edx,edi jb again doney: mov eax,offset msg call dispmsg jmp done donen: mov eax,offset mmsg call dispmsg done: exit 0 ; 子程序 end start
还没有评论,来说两句吧...