;以16进制数显示4294967295以内的素数。
;本文改编自我的一个vbs脚本。
;made by correy
;QQ:112426112
;Email:leguanyuan@126.com
;Homepage:http://correy.webs.com
;不足之处,敬请指导。
;如本文的编码极不规范,但还算能实现了。
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
;本文改编自我的一个vbs脚本。
;made by correy
;QQ:112426112
;Email:leguanyuan@126.com
;Homepage:http://correy.webs.com
;不足之处,敬请指导。
;如本文的编码极不规范,但还算能实现了。
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
.data
two db "00000002",0
entry db 13,10,0
two db "00000002",0
entry db 13,10,0
.data?
buffer db 256 DUP (?)
bufferl db 8 dup (?)
hstdin dd ?
hstdout dd ?
buffer db 256 DUP (?)
bufferl db 8 dup (?)
hstdin dd ?
hstdout dd ?
.code
showeax proc;坚决拒绝使用wsprintf等类似函数。
pushad
mov ecx,8
xor esi,esi
againp:
dec ecx
rol eax,4
push eax
and eax,0Fh
cmp eax,9
jg big
add eax,30h
mov [bufferl+esi],al
pop eax
inc esi
cmp ecx,0
jne againp
je showp
big:
add eax,37h
mov [bufferl+esi],al
pop eax
inc esi
cmp ecx,0
jne againp
showp:
popad
ret
showeax endp
pushad
mov ecx,8
xor esi,esi
againp:
dec ecx
rol eax,4
push eax
and eax,0Fh
cmp eax,9
jg big
add eax,30h
mov [bufferl+esi],al
pop eax
inc esi
cmp ecx,0
jne againp
je showp
big:
add eax,37h
mov [bufferl+esi],al
pop eax
inc esi
cmp ecx,0
jne againp
showp:
popad
ret
showeax endp
prime proc ;eax是要辨认的素数。
pushad
cmp eax,1
je exit
pushad
cmp eax,1
je exit
cmp eax,2
je exit2
je exit2
mov esi,eax
mov ebx,2
mov ecx,eax
divit:
xor edx,edx
mov eax,esi
div ebx
cmp edx,0
je exit
inc ebx
cmp ebx,esi
je show
jmp divit
xor edx,edx
mov eax,esi
div ebx
cmp edx,0
je exit
inc ebx
cmp ebx,esi
je show
jmp divit
show:
mov eax,esi
call showeax
invoke WriteFile,hstdout,addr bufferl,8,0,0
invoke WriteFile,hstdout,addr entry,2,0,0
popad
ret
mov eax,esi
call showeax
invoke WriteFile,hstdout,addr bufferl,8,0,0
invoke WriteFile,hstdout,addr entry,2,0,0
popad
ret
exit2:invoke WriteFile,hstdout,addr two,8,0,0;显示数字2
invoke WriteFile,hstdout,addr entry,2,0,0
exit:
popad
ret
prime endp
invoke WriteFile,hstdout,addr entry,2,0,0
exit:
popad
ret
prime endp
start:
invoke GetStdHandle,-10
mov hstdin,eax
invoke GetStdHandle,-11
mov hstdout,eax
mov hstdin,eax
invoke GetStdHandle,-11
mov hstdout,eax
mov ecx,-1
mov eax,2
again:
push eax
call prime
pop eax
inc eax
loop again
mov eax,2
again:
push eax
call prime
pop eax
inc eax
loop again
invoke ExitProcess,0
end start
;made at 2010.07.09
end start
;made at 2010.07.09
没有评论:
发表评论