DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Ассемблер для начинающих. Урок 1 — Вызов API функций.

Posted by devprog на 17 октября, 2008

Привет. Итак приступим к делу, для этого нам нужно скачать какой-нибудь компилятор ассемблера, качайте или FASM или MASM, так как отличия в синтаксисе минимальны. Выбрать компилятор по душе можете вот сдесь. Лучше конечно скачать FASM, так как этот компилятор нравиться мне больше остальных и обьяснять я буду именно на нём.

Итак, давайте напишем приложение которое будет показывать простое окошко с какой-либо фразой, как и подобает обучаться програмированию. Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.

Создадим простой текстовый файлик и назовём его «first.asm» и начинаем программировать:

include ‘win32ax.inc’
.code
start:
invoke  ExitProcess,0       ; вызываем функцию ExitProcess c параметром 0 (нуль)
.end start

Что делает этот код? Да ничего… Если мы его скомпилируем то получим полноценную программу которая просто завершает сама себя. Компилируем:

fasm.exe first.asm

Итак, вы попытались скомпилировать… Но не получилось, а всё потому что компилятор не знает где находиться файл-инклудник — «win32ax.inc». Необходимо ему явно указать этот файл для этого меняем код программы, например вот так:

include ‘D:\FASM\include\win32ax.inc’
.code
start:
invoke  ExitProcess,0       ; вызываем функцию ExitProcess c параметром 0 (нуль)
.end start

Теперь всё скомпилируеться отлично, но чтобы это не писать каждый раз, можно задействовать переменные среды, присвоив например переменной %inc% путь «D:\FASM\include». Но этим мы займемся в следующем туториале, так как в этом я собираюсь показать как вызываеться функция Windows API (какой и являеться ExitProcess).

Кстати invoke — это макрос, который обьявлен в инклуднике win32ax.inc. Он позволяет нам вызывать функции привычным образом как например в С++ или Delphi. Без него мы будем писать в следующих туториалах. Короче усвойте что invoke это вызов функций (но только на первый туториал, ну или на все если в будущем вы собираетесь программировать именно с его помощью).

Теперь давайте добавим в нашу программу ещё одну функцию — MessageBox:

include ‘D:\FASM\include\win32ax.inc’
.code
start:
invoke  MessageBox,HWND_DESKTOP,»Hallo Xaker.Name»,»Caption»,MB_ICONASTERISK
invoke  ExitProcess,0       ; вызываем функцию ExitProcess c параметром 0 (нуль)
.end start

Первый параметр функции MessageBox являеться дескриптор окна-родителя нашего окошка, в качестве него мы передаём константу HWND_DESKTOP — дескриптор Рабочего Стола.

Второй параметр — адрес на текст самого окошка. Возникает вопрос — почему же мы не пишем: invoke MessageBox,HWND_DESKTOP,offset Message….? Да потому что, макрос invoke достаточно универсален, чтобы принимать в параметре просто текст… Подробнее обьясню в следующих уроках.

Третий параметр — заголовок окна, то есть его адрес.
Ну а четвёртый параметр — стиль окна, у нас это MB_ICONASTERISK то есть окошко с восклицанием.

Кстати дополнительную информацию об API — можно получить либо на MSDN либо из любой справки Windows SDK, которая поставляеться с любым продуктом Borland. Вот и написали и разобрали вызов функций и написали полноценное приложение. Всё, до следующего туториала, всего хорошего…

———-
Интересное на блогах:
Сокращаем JavaScript код
Сервисы для программистов

———-
Полезная заметка? Есть способ получать новые посты не заходя на этот сайт! Как? Да просто подпишись на RSS-Фид !

комментария 24 to “Ассемблер для начинающих. Урок 1 — Вызов API функций.”

  1. Pashak said

    Статья г….
    Разбираются всё те же сраные библиотеки, никих чистых приемов на самом ассемблере. Это, увы, притупляет профессионального программиста, но для рядового пользователя может быть полезно.
    Вывод: для нубов

  2. Rob said

    >> Вывод: для нубов

    Ну ты блин даёшь ))) Оракул хренов ))) Читай заголовок статьи — Ассемблер для начинающих. Во даёт ))))

  3. Kerny said

    О спасибо автору за статью, я тока начинаю изучать асм, и это первая статья, что прочитал!!!

  4. Дмитрий said

    Начинаю компилировать , выпрыгивает окошко ,как только
    несохранял . После этого сообщение об ошибке
    Error:file not found Soupce:999.ASM (1)пробовал
    повсякому.Напишите по подробней пожалуйста про настройки под windows и как компилировать и как сохранять перед этим.Кстати попадаются статьи, где
    инклуды в путях прописаны с заглавных букв.ЖДУ ОТВЕТА .

  5. Дмитрий said

    Все разобрался .

  6. grey said

    все гуд, автару респект. пиши ещё все достаточно понятно =)

  7. izverrg said

    Честно признаюсь, что облазил пока не весь блог, но все таки спрошу) Где можно скачать хороший (подробный) справочник по API-функциям? На данный момент главное требование — чтобы были описаны все функции, а то лучше что я смог найти — это демо-версию с 50-ю функциями и онлайн-справочники…

  8. devprog said

    Самая лучшая справка — это конечно MSDN (msdn.microsoft.com). У меня вот до сих пор валяется на 4 дисках за 2001 год ) Можно ещё выдрать справку (кстати очень неплохую) из продукта от Borland, весит примерно 25 метров.

  9. Spoottcal said

    Все-таки на самом деле нравится мне Ваш блог. Всегда очень интересно читать, включая эту тему

  10. Интересно было почитать, спасибо

  11. Для Вас Местонахождение человека по номеру мобильного телефона GSM. Пеленгатор определяет местонахождение владельца сотового телефона, сотовый номер которого принадлежит одному из GSM операторов (например Билайн, Теле2, МТС, Мегафон).

  12. C наступающим Вас! Пусть Ваши мечты сбудутся!

  13. C0ffe1n said

    Хорошо, когда можно подглядеть, как на асме тот или иной кусок кода оформить. Публикуй больше ;)

  14. TheNozza said

    Цитата: «Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.»
    Автор жжёт! Статья бесценна для науки!

  15. Glym said

    Народ у меня не получилось подскжите первый пример ошибку при компиляции выдает путь свой указал…

  16. Glym said

    пишет инвалид аргумент (((

  17. Lime said

    во во,та же проблема,когда уже прописал путь к инклуднику, пишет ошибку ,а в нижней строчке,имя файла и в квадратных скобках [1] ,вообще нуб нубом,помогите плиз =(

  18. abajentioto said

    Сбылась мечта миллионов поклонников Сумеречной саги, самой трогательной истории непростых взаимоотношений двух любящих сердец. Сердец девушки-человека и юноши-вампира. Объявлена официальная дата выхода финальной части фильма «Сумерки 4. Рассвет».
    «Сумерки 4. Рассвет» смотреть онлайн мы сможем уже совсем скоро, а пока стоит еще совсем немного затаить дыханье в ожидании премьеры кинофильма, а пока давайте рассмотрим, что предлагают нам создатели в качестве сюжета.[URL=»http://sumerki-4-film.ru/» — сумерки 4 дата выхода[/URL —

  19. Kikboxer said

    Первая программа компилируется нормально. А вот когда вторую компилирую выдает ошибку: Неверный аргумент (invalid argument). Подскажите что делать.

  20. joker said

    огромное спасибо первая статья которую я читаю и более-мение дохотчива(более-мение потомучто вообще ничего не знаю по языку).

  21. casino said

    If you are going for best contents like me, just go to see this website all the time as it gives quality contents, thanks

  22. KarGTU said

    Поступаем в КарГТУ http://www.kstu.kz

  23. Warez said

    Спасибо за интересный урок, очень познавательно! Надумал буду учить! На форумах людей спрашивал, они говорят, учи лучше СИ или С++!
    но мне как то Assembler по душе! Еще и с WIN API со встроенными библиотеки! Вообще буду Assembler учить! Он много чего даст, в знании и во многом

  24. test prep said

    Math learning

    Ассемблер для начинающих. Урок 1

Оставьте комментарий