ccall ;-

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 8 июн 2009.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%\win32ax.inc'
    2.  
    3. start:
    4.         ccall  [mciSendString],_cmd_eject,0,0,0  
    5.         cinvoke  mciSendString,_cmd_close,0,0,0
    6.         stdcall  [ExitProcess],0
    7.  
    8. _cmd_eject db 'set cdaudio door open',0
    9. _cmd_close db 'set cdaudio door closed',0
    10.  
    11. data import
    12.         library kernel32,'KERNEL32.DLL',winmm,'WINMM.DLL'
    13.         import winmm,mciSendString,'mciSendStringA'
    14.         include '%fasm%\api\kernel32.inc'
    15. end data
    А есть ли ограничения какие-то для call, invoke...
    Всмысле работает вроде полюбому, но зачем тогда?
    Кстати, на что нужны секции ежели без этого код даже меньше получает!?
    Я сначала оставлял только '.code', но в какой-то момент подглюкивать стало, пришлось
    изолировать в '.data' пока вообще не допилил, что их оба можно кильнуть :)
    Ещё хотел было include '%fasm%\api\kernel32.inc' в начале включить, как и положенно в си языках,
    однако что это в data import валидно только?
     
  2. vover

    vover Владимир

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    202
    call это комманда а invoke это макрос.
    Ну секции нужны чтобы определить где у тя рессурсы где импор где отладочная информация итд. Так же они участвуют в загрузке exe.
     
  3. vover

    vover Владимир

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    202
    Долго думал, что же ты имеешь в виду
    Да, валидно только в импорте. Ты сам посмотри что находиться в kernel32.inc.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ccall и stdcall нужны для вызова соответствующих процедур в программе.
    invoke и cinvoke - для импортируемых функций. все просто.

    неправда, invoke x компилирутся так же, как и stdcall [x], аналогично с ccall.

    vover
    Тут про макрос ccall, а не команду call.
     
  5. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    без секций код короче, и в них наверное нет необходимости, но наверное для больших приложений
    это надо для порядка в ущерб 0,5 кб.
    2. я имел ввиду, чтоесть ли неподдерживаемые функции, всмысле не сишные в виндоус? или же макрос сам их контролирует, типа что если я вместо call вызову ccall там где это не валидно?
    или попрёт! :)
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    попрёт, фасм не может это контролировать.
     
  7. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Это потому, что не тратится место на выравнивание (секции выравниваются по 512 байтной границе). Нужны в основном в целях безопасности, чтобы нельзя было записывать в секцию, где должны быть одни константы. Да и многие программисты просто педанты и им нравиться раскладывать данные по "полочкам".

    ccall
    - это макрос, который компилятор разворачиват в код, который, естественно, будет валиден везде, где поддерживаются данные опкоды.
    ccall GetSomeInfo,eax,ebx,ecx - развернётся в
    push ecx
    push ebx
    push eax
    call GetSomeInfo (если быть точным, то call 00445566)
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Z3N
    Увы, как раз многие программисты далеко не педанты, если взглянуть на большую часть гoвнокода, что можно найти в инете. Нормальный код, где все грамотно на своих местах, а исключения хорошо аргументированы, увы, встречается очень редко.
    Из 10 просмотренных мною за последние 3 дня исходников только 2 оказались удовлетворительно-читабельными =) Причем исходники совершенно разных людей из совершенно разных областей и эти люди в них далеко не новички.

    Ой что-то меня понесло) На сим закончу.

    Неправда =)

     
  9. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    =)