xorshift.asm
comment *
MASM32 SDK
ml /c /coff xorshift.asm
link /subsystem:console xorshift
*
includelib <kernel32.lib>
includelib <user32.lib>
.386
.model flat, stdcall
option casemap:none
include <windows.inc>
include <kernel32.inc>
include <user32.inc>
rand32 proto stdcall
.const
format db "%2d %08x", 0dh, 0ah, 0
.data
seed dd 2463534242
.data?
hStdOut dd ?
.code
main proc
local written :dword
local buf[1024+1] :byte
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hStdOut, eax
mov ebx, 0
@@loop:
invoke rand32
invoke wsprintfA, addr buf, addr format, ebx, eax
invoke lstrlenA, addr buf
invoke WriteConsoleA, hStdOut, addr buf, eax, [written], NULL
inc ebx
cmp ebx, 10
jb @@loop
invoke ExitProcess, 0
main endp
rand32 proc
mov eax, seed
mov edx, eax ; y = y ^ (y << 13)
shl edx, 13
xor eax, edx
mov edx, eax ; y = y ^ (y >> 17)
shr edx, 17
xor eax, edx
mov edx, eax ; y = y ^ (y << 15)
shl edx, 15
xor eax, edx
mov seed, eax
ret
rand32 endp
end main
最終更新:2018年08月27日 09:32