fasm 控制台多线程示例

这是一个使用fasm编写的控制台应用程序,演示如何创建和管理多线程来并行计算数值。程序将计算0到N的和分成两部分,由两个独立的线程分别处理,然后将结果合并。线程通过调用`CreateThread`创建,并使用`WaitForMultipleObjects`同步。计算过程包含一个简单的加法循环,并提供了暂停功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;*--==--* fasm console MultiThread example
;*--==--* By G-Spider
;*--==--* fasm mt.asm mt.exe
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

format PE console
entry start

include '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 = -1
N = 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
     ret
endp


proc 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:
     ret
endp

;---------------------------------------------
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'
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值