;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;*--==--* fasm console MultiThread example;*--==--* By G-Spider;*--==--* fasm mt.asm mt.exe;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>format PE consoleentry startinclude 'win32a.inc';sum=0;;for (i=0;i<N;i++); sum=sum+i; ;sum1=0;;for (i=0;i<=M;i++); sum1=sum1+i; ;sum2=0;;for (i=M+1;i<=N;i++); sum2=sum2+i; ;sum=sum1+sum2; INFINITE = -1N = 10000 ;求sum=0+1+..+N ,注意N不能过大,否则溢出;在主线程中,创建两个计算线程,将N分成两段,如上所示。;---------------------------------------------section '.text' code readable executable start: xor esi,esi @@: xor eax,eax push esi shl esi,3 add esi,dwParam invoke CreateThread,eax,eax,ThreadProc,esi,eax,eax pop esi mov [hTrd+esi*4],eax inc esi test esi,1 jnz @B invoke WaitForMultipleObjects,2,hTrd,TRUE,INFINITE xor eax,eax add eax,[dwParam+16] add eax,[dwParam+24] cinvoke printf,szFmt,eax cinvoke system,szPause ret proc ThreadProc uses esi,lParam mov esi,[lParam] stdcall SumFunc,[esi],[esi+4] mov [esi+16],eax retendpproc SumFunc n1,n2;invoke Sleep,5000 xor eax,eax mov ecx,[n1] mov edx,[n2]@@: cmp ecx,edx ja A1 add eax,ecx inc ecx jmp @B A1: retendp;---------------------------------------------section '.data' data readable writeable hTrd rd 2 dwParam dd 0,N/2,N/2+1,N,0,0,0 szFmt db 'sum=%d',0ah,0 szPause db 'pause',0;---------------------------------------------section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ msvcrt,'msvcrt.dll' import msvcrt,\ printf,'printf',\ system,'system' include 'api\kernel32.inc'