вообщем взял учебник Ассемблер для Win32, а приведенные автором примеры не компилируются указанным им образом! вообщем пример: Код (Text): TITle (.asm) .386 .model flat, stdcall STD_OUTPUT_HANDLE = -11 STD_INPUT_HANDLE = -10 Initialize PROTO WaitMsg PROTO WriteString PROTO ExitProces PROTO, x:dword GetStdHandle PROTO, STD_OUTPUT_HANDLE:DWORD WriteConsoleA PROTO, handle:DWORD, lpBuffer:PTR BYTE, nNumberOfCharsToWrite:DWORD, lpNumberOfCharsWritten:PTR DWORD, lpReserved:PTR DWORD ReadConsoleA PROTO, handle:DWORD, lpBuffer:PTR BYTE, nNumberOfCharsToRead:DWORD, lpNumberOfCharsRead:PTR DWORD, lpReserved:PTR DWORD FlushConsoleInputBuffer PROTO, nConsoleHandle:DWORD .data strHello BYTE "Hello, world!",13,10,0 .code main PROC invoke Initialize mov EDX, OFFSET strHello invoke WriteString invoke WaitMsg invoke ExitProcess,0 main ENDP .data consoleOutHandle DWORD ? consoleInHandle DWORD ? .code pushad INVOKE GetStdHandle, STD_INPUT_HANDLE mov [consoleInHandle], eax popad ret Initialize ENDP Str_length PROC USES edi, pString:PTR BYTE mov edi,pString mov eax,0 L1: cmp BYTE PTR [edi],0 je L2 inc edi inc eax jmp L1 L2: ret Str_length ENDP WriteString PROC pushad INVOKE Str_length,edx cld INVOKE WriteConsoleA, consoleOutHandle, edx, eax, OFFSET strHello, 0 popad ret WriteString ENDP WaitMsg PROC .data waitmsgstr DB "Press [Enter] to continue...",0 localBuf BYTE 5 DUP(?) bytesRead DWORD ? .code pushad mov edx, OFFSET waitmsgstr call WriteString w1: INVOKE FlushConsoleInputBuffer, consoleInHandle INVOKE ReadConsoleA consoleInHandle, OFFSET localBuf, 5, OFFSET bytesRead, 0 cmp bytesRead,2 jnz w1 popad ret WaitMsg ENDP END main f: cd source\asm ml /nologo /Zi /Bl link32 /coff "%1.asm" /link /nologo /DEBUG /SUBSYSTEM:CONSOLE C:\masm32\lib\kernel32.lib C:\masm32\lib\user32.lib выдаёт ошибки, и вообще даже простенькие примеры не компиляца.. объясните может я в чем то ошибся.
И так. В книжке перенос выполнен для экономии места. В масме подобное не допустимо. вот такое масм без спец. макросов не понимает. это нужно влепить в одну строку: Ну и с остальными запятыми так же. Строка в асм-коде в масме запятой заканчиваться не может.
по поводу *.bat: где он у тебя лежит, я обычно храню его в папке с проектом, который собираюсь компилировать, а проект соответственно находится на одном диске с masm32. Переменных окружения я не задавал, поэтому строки для компиляции в твоем случае я написал бы вот так: \masm32\bin\ml.exe /nologo /Zi /Bl link32 /coff file.asm \mams32\bin\link.exe /nologo /DEBUG /SUBSYSTEM:CONSOLE \masm32\lib\kernel32.lib \masm32\lib\user32.lib file.obj А что ты линковать собираешься, откуда линкеру это известно? Короче твои командные строки в мусор. Посмотри в других проектах как пишутся навороченные (в отличие от этого) батники.
mc black ml передаёт ему всё необходимое + то, что идёт за "/link". Стандартное поведение компиляторов MS.
Огромное вам спасибо, в асме я новичек и было подумал что книга некчёмная.. а батник я назвал amake.bat и поместил его в masm32\bin задал в переменные окружения.. вообщем попробую скомпилить, если будут ошибки то отпишусь.. ИМХО: wasm.ru толковый ресурс, респект!
ОБЬЯСНИТЕ, пож. начинающему - нафик все эти заморочки с линковкой ? да ещё для начинающих ? Почему нельзя поставить MasmBuilder, компилировать проекты хоть по 40 штук в минуту и не отвлекаться на уйню-муйню всякую?
Veter когда человек эту поймет, тогда сам поставит себе то, что ему удобно. А до тех пор, не зная, что происходит, такая вот прозрачность не совсем уместна.
Veter этой уйни - майни не так уж и много зато её очень полезно знать чтоб чувствовать себя более свободно P/s была недавно тема где выкладывали свои батники.
нашел конечно язык "для начинающих" ... н - да. каждый ключик в командной строке - для чего нить да нужен... вот узнаешь для чего , глядишь - компановку исполняемых модулей - да узнаешь.