Для этого надо просто знать C и знать ассемблер. Например C: WSADATA wsaData; int iResult; iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { printf("WSAStartup failed: %d\n", iResult); return 1; } и аналог на асме (синтаксис fasm): invoke WSAStartup, 00020002h, wsaData test eax, eax jz .init_ok cinvoke wnsprintfA, buffer, 300, mask, eax invoke MessageBoxA, 0, buffer, 0, 0 mov eax, 1 retn .init_ok: wsaData WSADATA mask db 'WSAStartup failed: %d',0 buffer db 300 dup (0)
такого нет.
.init_ok надо перед retn. И почему на C оно через printf выводит, а на асме - через MesssageBox ?
.init_ok не надо перед ret, потому что это вообще условный пример. В реальности там же ещё много кода будет. выводить в printf сложнее, т.к. это будет консоль (GetStdHandle STD_OUTPUT_HANDLE, потом wnsprintfA в буфер, и буфер в WriteConsoleA).
Обсуждают сегодня