asm для Win32

Тема в разделе "WASM.BEGINNERS", создана пользователем dj0nik, 9 авг 2007.

  1. dj0nik

    dj0nik New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2007
    Сообщения:
    15
    вообщем взял учебник Ассемблер для Win32, а приведенные автором примеры не компилируются указанным им образом! вообщем пример:

    Код (Text):
    1. TITle (.asm)
    2. .386
    3. .model flat, stdcall
    4.  
    5. STD_OUTPUT_HANDLE = -11
    6. STD_INPUT_HANDLE  = -10
    7.  
    8. Initialize PROTO
    9. WaitMsg PROTO
    10. WriteString PROTO
    11.  
    12. ExitProces PROTO,
    13.   x:dword
    14.  
    15. GetStdHandle PROTO,
    16.   STD_OUTPUT_HANDLE:DWORD
    17.  
    18. WriteConsoleA PROTO,
    19.   handle:DWORD,
    20.   lpBuffer:PTR BYTE,
    21.   nNumberOfCharsToWrite:DWORD,
    22.   lpNumberOfCharsWritten:PTR DWORD,
    23.   lpReserved:PTR DWORD
    24.  
    25. ReadConsoleA PROTO,
    26.   handle:DWORD,
    27.   lpBuffer:PTR BYTE,
    28.   nNumberOfCharsToRead:DWORD,
    29.   lpNumberOfCharsRead:PTR DWORD,
    30.   lpReserved:PTR DWORD
    31.  
    32. FlushConsoleInputBuffer PROTO,
    33.   nConsoleHandle:DWORD
    34.  
    35. .data
    36. strHello BYTE "Hello, world!",13,10,0
    37.  
    38. .code
    39. main PROC
    40.   invoke Initialize
    41.   mov EDX, OFFSET strHello
    42.   invoke WriteString
    43.   invoke WaitMsg
    44.   invoke ExitProcess,0
    45. main ENDP
    46.  
    47. .data
    48.   consoleOutHandle DWORD ?
    49.   consoleInHandle  DWORD ?
    50.  
    51. .code
    52.   pushad
    53.  
    54.   INVOKE GetStdHandle, STD_INPUT_HANDLE
    55.   mov [consoleInHandle], eax
    56.  
    57.   popad
    58.   ret
    59. Initialize ENDP
    60.  
    61. Str_length PROC USES edi,
    62.   pString:PTR BYTE
    63.  
    64. mov edi,pString
    65. mov eax,0
    66. L1:
    67.   cmp BYTE PTR [edi],0
    68.   je  L2
    69.   inc edi
    70.   inc eax
    71.   jmp L1
    72. L2: ret
    73. Str_length ENDP
    74.  
    75. WriteString PROC
    76.  
    77. pushad
    78. INVOKE Str_length,edx
    79. cld
    80. INVOKE WriteConsoleA,
    81.     consoleOutHandle,
    82.     edx,
    83.     eax,
    84.     OFFSET strHello,
    85.     0
    86. popad
    87. ret
    88. WriteString ENDP
    89.  
    90. WaitMsg PROC
    91.  
    92. .data
    93. waitmsgstr DB "Press [Enter] to continue...",0
    94. localBuf BYTE 5 DUP(?)
    95. bytesRead DWORD ?
    96. .code
    97.   pushad
    98.   mov edx, OFFSET waitmsgstr
    99.   call WriteString
    100. w1:  INVOKE FlushConsoleInputBuffer, consoleInHandle
    101.   INVOKE ReadConsoleA
    102.     consoleInHandle,
    103.     OFFSET localBuf,
    104.     5,
    105.     OFFSET bytesRead,
    106.     0
    107.   cmp bytesRead,2
    108.   jnz w1
    109.  
    110.   popad
    111.   ret
    112. WaitMsg ENDP
    113.  
    114. 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

    выдаёт ошибки, и вообще даже простенькие примеры не компиляца..
    объясните может я в чем то ошибся.
     
  2. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    И так. В книжке перенос выполнен для экономии места.
    В масме подобное не допустимо.


    вот такое
    масм без спец. макросов не понимает.
    это нужно влепить в одну строку:
    Ну и с остальными запятыми так же. Строка в асм-коде в масме запятой заканчиваться не может.
     
  3. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Ошибки в студию.
     
  4. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    по поводу *.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

    А что ты линковать собираешься, откуда линкеру это известно? Короче твои командные строки в мусор. Посмотри в других проектах как пишутся навороченные (в отличие от этого) батники.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    mc black
    ml передаёт ему всё необходимое + то, что идёт за "/link". Стандартное поведение компиляторов MS.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Насчет масма хз, в фасме можно переносить строчки через символ "\"
     
  7. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Great
    В MASM тоже можно переносить через '\'
     
  8. Geen

    Geen New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2007
    Сообщения:
    51
    а где Initialize proc ?
     
  9. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Xerx
    Да верно, и заметь, в коде символа '\' не наблюдается. Просто голый перенос.
     
  10. dj0nik

    dj0nik New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2007
    Сообщения:
    15
    Огромное вам спасибо, в асме я новичек и было подумал что книга некчёмная..
    а батник я назвал amake.bat и поместил его в masm32\bin задал в переменные окружения.. вообщем попробую скомпилить, если будут ошибки то отпишусь..

    ИМХО: wasm.ru толковый ресурс, респект!
     
  11. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    ОБЬЯСНИТЕ, пож. начинающему - нафик все эти заморочки с линковкой ? да ещё для начинающих ?
    Почему нельзя поставить MasmBuilder, компилировать проекты хоть по 40 штук в минуту и не отвлекаться на уйню-муйню всякую?
     
  12. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Veter
    когда человек эту
    поймет, тогда сам поставит себе то, что ему удобно. А до тех пор, не зная, что происходит, такая вот прозрачность не совсем уместна.
     
  13. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    Veter этой уйни - майни не так уж и много зато её очень полезно знать чтоб чувствовать себя более свободно

    P/s была недавно тема где выкладывали свои батники.
     
  14. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
  15. Geen

    Geen New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2007
    Сообщения:
    51
    нашел конечно язык "для начинающих" ... н - да. каждый ключик в командной строке - для чего нить да нужен... вот узнаешь для чего , глядишь - компановку исполняемых модулей - да узнаешь.