C++ + Asm

Тема в разделе "WASM.BEGINNERS", создана пользователем lomerok, 12 апр 2011.

  1. lomerok

    lomerok New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    60
    есть такой сырок

    Код (Text):
    1. #include <windows.h>
    2.  
    3. __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    4. {
    5.     char Message[9]="Message\0";
    6.     char Text[14]="Message Text\0";
    7.     _asm
    8.     {
    9.         push 0
    10.         push Text
    11.         push Message
    12.         push 0
    13.         call MessageBoxA
    14.     }
    15.    
    16.     //MessageBox(0, "Message Text", "Message", 0);
    17.    
    18.     return 0;
    19.     //24 576
    20. }
    и вот такие ошибки

    Код (Text):
    1. --------------------Configuration: main - Win32 Debug--------------------
    2. Compiling...
    3. main.cpp
    4. C:\Users\Ankh\Desktop\test\main.cpp(11) : warning C4409: illegal instruction size
    5. C:\Users\Ankh\Desktop\test\main.cpp(12) : warning C4409: illegal instruction size
    6.  
    7. main.obj - 0 error(s), 2 warning(s)
    почему такие ошибки вылазят, и почему прога не выдаёт месадж бокс
     
  2. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    Наверное потому что в 2 и 3'ем аргументе нужно передавать адрес строки ?
     
  3. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    push указатели на переменные. И кстати параметры нужно в обратном порядке пихать.
     
  4. lomerok

    lomerok New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    60
    всё всродебы сделал как высказали,но всеравно неработает и тем более вылетает с завершением процесса..вот код

    Код (Text):
    1. #include <windows.h>
    2.  
    3. __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    4. {
    5.     char *Message="Message";
    6.     char *Text="Message Text";
    7.     _asm
    8.     {
    9.         push 0
    10.         push Message
    11.         push Text
    12.         push 0
    13.         call MessageBoxA
    14.     }
    15.    
    16.     //MessageBox(0, "Message Text", "Message", 0);
    17.    
    18.     return 0;
    19.     //24 576
    20. }
     
  5. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Честно говоря я не знаю асмовский синтаксис под плюсы, потому помочь не могу.
     
  6. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    я про

    Код (Text):
    1.     {
    2.         push 0
    3.         push [b]offset[/b] Text
    4.         push [b]offset[/b] Message
    5.         push 0
    6.         call MessageBoxA
    7.     }
     
  7. lomerok

    lomerok New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    60
    Код (Text):
    1. #include <windows.h>
    2.  
    3. __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    4. {
    5.     char *Message="Message";
    6.     char *Text="Message Text";
    7.     _asm
    8.     {
    9.         push 0
    10.         push offset Message
    11.         push offset Text
    12.         push 0
    13.         call MessageBoxA
    14.     }
    15.    
    16.     //MessageBox(0, "Message Text", "Message", 0);
    17.    
    18.     return 0;
    19.     //24 576
    20. }
    Код (Text):
    1. --------------------Configuration: test - Win32 Release--------------------
    2. Compiling...
    3. main.cpp
    4. C:\Users\Ankh\Desktop\test\main.cpp(11) : error C2415: improper operand type
    5. C:\Users\Ankh\Desktop\test\main.cpp(12) : error C2415: improper operand type
    6. Error executing cl.exe.
    7.  
    8. test.exe - 2 error(s), 0 warning(s)
     
  8. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Код (Text):
    1. #include <windows.h>
    2.  
    3. int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    4. {
    5.    char * Message="Message";
    6.    char * Text="Message Text";
    7.  
    8.     _asm
    9.     {
    10.         push 0
    11.         push Message
    12.         push Text
    13.         push 0
    14.         call dword ptr [MessageBoxA]
    15.     }
    16.        
    17.     return 0;
    18. }
     
  9. lomerok

    lomerok New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    60
    ура , заработало ,спасибо krid24
     
  10. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    ps: call dword ptr [MessageBoxA] либо call ds:MessageBoxA