汇编语言素数判断程序

题目:
编写一个程序,提示用户输入一个数字,然后显示信息说明该数字是否是素数。素数(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
  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值