Flat assembler (FASM) — свободно распространяемый многопроходной ассемблер, написанный Томашем Грыштаром (польск. Tomasz Grysztar). FASM написан на самом себе, обладает небольшими размерами и очень высокой скоростью компиляции, имеет богатый и ёмкий макро-синтаксис, позволяющий автоматизировать множество рутинных задач.[1][2] Поддерживаются как объектные форматы, так и форматы исполняемых файлов. Это позволяет в большинстве случаев обойтись без компоновщика. В остальных случаях нужно использовать сторонние компоновщики, поскольку таковой вместе с fasm не распространяется.
Офф сайт: http://flatassembler.net/
Скачать с офф сайта
ОНлайн Учебник(скоро будет)
Client.asm
Код:; A very simple Client demonstration using WSOCK32.DLL ; Made by Ruben format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' section '.data' data readable writeable _caption db 'Client application',0 _igang db 'The client has started very well.',13,10,'It is now going to connect to your own computer',0 _hostname db 'Wrong hostname',0 hostname db '85.173.218.83',0 hSock dd ? saddr sockaddr_in sizesaddr = sizeof.sockaddr_in buffer rb 0x3000 sender db 'This is sent from client',13,10 rb 0x100 wsadata WSADATA section '.code' code readable executable start: invoke WSAStartup,0101h,wsadata ; initialiserer winsock-bibliotek invoke ws_gethostbyname, hostname or eax,eax jz bad_hostname virtual at eax .host hostent end virtual mov eax, [.host.h_addr_list] mov eax, [eax] mov eax, [eax] mov [saddr.sin_addr], eax invoke MessageBox, 0, _igang, _caption, 0 mov al, 00 mov ah, 10 ; port 10 mov [saddr.sin_port],ax mov [saddr.sin_family],AF_INET invoke ws_socket, AF_INET, SOCK_STREAM, IPPROTO_TCP mov [hSock], eax xchg eax, esi invoke ws_connect, esi, saddr, sizesaddr mov ebx, buffer invoke ws_send,esi,sender,0x30,0 invoke ws_recv, esi, ebx, 300h, 0 invoke MessageBox,0, buffer, _caption,0 invoke ws_closesocket,esi invoke WSACleanup jmp stopp bad_hostname: invoke MessageBox,0,_hostname,_caption,0 jmp stopp stopp: invoke ExitProcess,0 section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ winsock,'WSOCK32.DLL',\ user,'USER32.DLL' import kernel,\ ExitProcess,'ExitProcess' import winsock,\ WSAStartup,'WSAStartup',\ ws_socket,'socket',\ ws_connect,'connect',\ ws_gethostbyname,'gethostbyname',\ ws_send,'send',\ ws_recv,'recv',\ ws_closesocket,'closesocket',\ WSACleanup,'WSACleanup' import user,\ MessageBox,'MessageBoxA' IPPROTO_TCP = 6server.asm
Код:; A very simple Server demonstration using WSOCK32.DLL ; made by Ruben format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' section '.data' data readable writeable _caption db 'Server Application',0 sender db 'This is sent from the server!!!!!!',13,10 rb 200 avslutt db 'The server has stopped',0 buffer rb 0x3000 hSock dd ? rSock dd ? saddr sockaddr_in sizesaddr = sizeof.sockaddr_in sraddr sockaddr_in sizesraddr = sizeof.sockaddr_in wsadata WSADATA section '.code' code readable executable start: invoke WSAStartup,0101h,wsadata ; initialiserer Winsock biblioteket mov [saddr.sin_addr], 0 ; legger 0 som addresse mov al, 00 ; portbestemmelse mov ah, 10 ; port 10 mov [saddr.sin_port], ax ; lagrer rette port mov [saddr.sin_family], AF_INET ; familie invoke ws_socket, AF_INET, SOCK_STREAM, IPPROTO_TCP ; hva slags socket, opprett socket mov [hSock], eax ; lagrer peker til socket i hSock invoke ws_bind, [hSock], saddr, sizesaddr ; binder [hSock] til port og annet lagret i saddr rr: invoke ws_listen, [hSock], 0x05 ; venter pa* innkommende requester til hSock. invoke ws_accept, [hSock], 0, 0 ; na*r det evt. kommer skal det aksepteres og ga* videre mov [rSock], eax ; peker for kontakten til requesteren skal beholdes i rSock invoke ws_recv, [rSock], buffer, 0x100, 0 ; mottar 0x100 tegn fra [rSock] og lagrer det i !buffer. invoke ws_send, [rSock], sender, 200, 0 ; sender tilbake til [rSock] 200 tegn fra !sender. invoke MessageBox, 0, buffer, _caption, 0 invoke ws_closesocket, [rSock] ; avslutter kontakt med akkurat denne client ; jmp rr ; venter videre pa* nye requester invoke ws_closesocket, [hSock] ; avslutter socket invoke MessageBox, 0, avslutt, _caption, 0 invoke WSACleanup ; stopper winsock-bibliotek standard jmp stopp ; avslutter stopp: invoke ExitProcess,0 ; stopper section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ winsock,'WSOCK32.DLL',\ user,'USER32.DLL' import kernel,\ ExitProcess,'ExitProcess' import winsock,\ WSAStartup,'WSAStartup',\ ws_socket,'socket',\ ws_send,'send',\ ws_recv,'recv',\ ws_closesocket,'closesocket',\ WSACleanup,'WSACleanup',\ ws_bind,'bind',\ ws_listen,'listen',\ ws_accept,'accept' import user,\ MessageBox,'MessageBoxA' IPPROTO_TCP = 6
FASM Editor – замечательная среда разработки для FASM. Программа довольно простая, но в ней есть всё, что нужно для удобного написания программ на ассемблере.