来水一发,汇编 | Include masm32rt.inc | | .const | | Table DB | | .data? | | Input db 5 dup (?) | | Num dd ? | | Align 10h | | Buffer db 9*10000+1 dup (?) | | .code | | Start: | | Invoke ArgClC,1,Offset Input | | Sub esp,4 | | Invoke atodw_ex,Offset Input | | Mov Num,Eax | | Add Esp,4 | | | | Lea Esi,Table | | Mov Ecx,Eax | | | | .Repeat | | Push Ecx | | Lea Edi,Buffer | | Mov Ecx,10000 | | Align 10h | | .Repeat | | Push Ecx | | Invoke nrandom,26 | | Lea Eax,[Eax+65] | | StoSB | | Mov Ecx,6 | | Align 4h | | .Repeat | | Push Ecx | | Invoke nrandom,SizeOf Table | | Mov Al,[Eax+Esi] | | StoSB | | Pop Ecx | | .UntilCxZ | | Mov Ax,0A0DH | | Mov Word Ptr [Edi],Ax | | Inc Edi | | Inc Edi | | Pop Ecx | | .UntilCxZ | | Xor Eax,Eax | | StoSB | | Invoke StdOut,Offset Buffer | | Pop Ecx | | .UntilCxZ | | | | | | Invoke ExitProcess,NULL | | End StartCOPY |
I3 CPU+机械
100w个,输出到控制台,40s(真感人)
输出到txt,220ms
直接>nul,180ms
test 要生成的数目/1w
生成100w:test 100
代码将指令、数据对齐到内存4整数倍地址,提高速度
随机数生成使用masmlib中的函数,不涉及api调用,浮点计算
由于懒得调api得时间做种子,目前种子固定。 |