Ассемблер для начинающих. Урок 1 — Вызов API функций.
Posted by devprog на 17 октября, 2008
Итак, давайте напишем приложение которое будет показывать простое окошко с какой-либо фразой, как и подобает обучаться програмированию. Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.
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-Фид !
Pashak said
Статья г….
Разбираются всё те же сраные библиотеки, никих чистых приемов на самом ассемблере. Это, увы, притупляет профессионального программиста, но для рядового пользователя может быть полезно.
Вывод: для нубов
Rob said
>> Вывод: для нубов
Ну ты блин даёшь ))) Оракул хренов ))) Читай заголовок статьи — Ассемблер для начинающих. Во даёт ))))
Kerny said
О спасибо автору за статью, я тока начинаю изучать асм, и это первая статья, что прочитал!!!
Дмитрий said
Начинаю компилировать , выпрыгивает окошко ,как только
несохранял . После этого сообщение об ошибке
Error:file not found Soupce:999.ASM (1)пробовал
повсякому.Напишите по подробней пожалуйста про настройки под windows и как компилировать и как сохранять перед этим.Кстати попадаются статьи, где
инклуды в путях прописаны с заглавных букв.ЖДУ ОТВЕТА .
Дмитрий said
Все разобрался .
grey said
все гуд, автару респект. пиши ещё все достаточно понятно =)
izverrg said
Честно признаюсь, что облазил пока не весь блог, но все таки спрошу) Где можно скачать хороший (подробный) справочник по API-функциям? На данный момент главное требование — чтобы были описаны все функции, а то лучше что я смог найти — это демо-версию с 50-ю функциями и онлайн-справочники…
devprog said
Самая лучшая справка — это конечно MSDN (msdn.microsoft.com). У меня вот до сих пор валяется на 4 дисках за 2001 год ) Можно ещё выдрать справку (кстати очень неплохую) из продукта от Borland, весит примерно 25 метров.
Spoottcal said
Все-таки на самом деле нравится мне Ваш блог. Всегда очень интересно читать, включая эту тему
Рабазов said
Интересно было почитать, спасибо
Радьков said
Для Вас Местонахождение человека по номеру мобильного телефона GSM. Пеленгатор определяет местонахождение владельца сотового телефона, сотовый номер которого принадлежит одному из GSM операторов (например Билайн, Теле2, МТС, Мегафон).
hopyelogess said
C наступающим Вас! Пусть Ваши мечты сбудутся!
C0ffe1n said
Хорошо, когда можно подглядеть, как на асме тот или иной кусок кода оформить. Публикуй больше ;)
TheNozza said
Цитата: «Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.»
Автор жжёт! Статья бесценна для науки!
Glym said
Народ у меня не получилось подскжите первый пример ошибку при компиляции выдает путь свой указал…
Glym said
пишет инвалид аргумент (((
Lime said
во во,та же проблема,когда уже прописал путь к инклуднику, пишет ошибку ,а в нижней строчке,имя файла и в квадратных скобках [1] ,вообще нуб нубом,помогите плиз =(
abajentioto said
Сбылась мечта миллионов поклонников Сумеречной саги, самой трогательной истории непростых взаимоотношений двух любящих сердец. Сердец девушки-человека и юноши-вампира. Объявлена официальная дата выхода финальной части фильма «Сумерки 4. Рассвет».
«Сумерки 4. Рассвет» смотреть онлайн мы сможем уже совсем скоро, а пока стоит еще совсем немного затаить дыханье в ожидании премьеры кинофильма, а пока давайте рассмотрим, что предлагают нам создатели в качестве сюжета.[URL=»http://sumerki-4-film.ru/» — сумерки 4 дата выхода[/URL —
Kikboxer said
Первая программа компилируется нормально. А вот когда вторую компилирую выдает ошибку: Неверный аргумент (invalid argument). Подскажите что делать.
joker said
огромное спасибо первая статья которую я читаю и более-мение дохотчива(более-мение потомучто вообще ничего не знаю по языку).
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
KarGTU said
Поступаем в КарГТУ http://www.kstu.kz
Warez said
Спасибо за интересный урок, очень познавательно! Надумал буду учить! На форумах людей спрашивал, они говорят, учи лучше СИ или С++!
но мне как то Assembler по душе! Еще и с WIN API со встроенными библиотеки! Вообще буду Assembler учить! Он много чего даст, в знании и во многом
test prep said
Math learning
Ассемблер для начинающих. Урок 1