Библиотека knigago >> Учебники и пособия >> Статьи и рефераты >> Введение в NASM (низкоуровневое программирование для Windows)


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1079, книга: Неопытное привидение
автор: Герберт Джордж Уэллс

Научная фантастика «Неопытное привидение» Герберта Уэллса — это классическая научно-фантастическая повесть, которая исследует тему смерти, духовности и границ человеческого понимания. Сюжет следует за главным героем, который недавно умер и обнаруживает, что он стал неопытным привидением. Он пытается приспособиться к своему новому существованию, исследуя мир живых и борясь со своими собственными страхами и заблуждениями. Уэллс мастерски передает чувство растерянности и отчуждения главного...

Игорь Орещенков - Введение в NASM (низкоуровневое программирование для Windows)

Введение в NASM (низкоуровневое программирование для Windows)
Книга - Введение в NASM (низкоуровневое программирование для Windows).  Игорь Орещенков  - прочитать полностью в библиотеке КнигаГо
Название:
Введение в NASM (низкоуровневое программирование для Windows)
Игорь Орещенков

Жанр:

Статьи и рефераты, Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, Assembler

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Введение в NASM (низкоуровневое программирование для Windows)"

Краткое введение в макроассемблер NASM для Windows.

Читаем онлайн "Введение в NASM (низкоуровневое программирование для Windows)". [Страница - 5]

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

Здесь необходимо сделать небольшое отступление и вкратце рассказать о специфике разработки приложений для Windows с использованием ассемблера. Дело в том, что каждая операционная система, предоставляя программисту определенный сервис в решении наиболее общих и востребованных задач, как-то: управление памятью, файловый ввод-вывод и интерфейс с пользователем, устанавливает и определенные правила, которым тот должен следовать при написании программ. Практически любая программа, предназначенная для выполнения в среде операционной системы Windows, использует вызовы функций Win32 API. Поэтому так важно ознакомиться с правилами их использования. Разрабатывая Windows, Microsoft придерживалась рекомендаций Intel 80x86 ABI (Application Binary Interface), в которых как раз и описываются правила взаимодействия модулей программ. Отметим только самые ключевые аспекты этих правил.

В процессе своей работы программы на ассемблере активно используют регистры. Для процессоров семейства i386 это 32-разрядные регистры EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP (в использовании сегментных регистров необходимость возникает очень редко). В соответствии с правилами ABI функции должны сохранять значения регистров EBX, ESI, EDI и EBP. Значения регистров EAX, ECX и EDX сохранять не обязательно (рис. 3). Важно понимать, что этому же правилу следуют и функции Win32 API. Поэтому после вызова какой-либо из них нельзя предполагать, что значения регистров EAX, ECX и EDX сохранятся. Если планируется их дальнейшее использование, программист должен сам позаботиться об их сохранности, например, задействовав стек.


Книгаго: Введение в NASM (низкоуровневое программирование для Windows). Иллюстрация № 3

Рис. 3. Использование регистров в соответствии с ABI

Передача параметров в функции Win32 API осуществляется через стек, причем помещаться в стек они должны в порядке, обратном тому, что можно увидеть в описании функций. За редким исключением (например, очень удобная функция wsprintf) функции Win32 API сами очищают стек от параметров. Подавляющее большинство, если не все функции Win32 API в качестве параметров принимают 32-битные значения. Если значение параметра не укладывается в указанные границы, используется 32-битный указатель. Функции Win32 API возвращают результат своей работы через регистр EAX. Рассмотрим на примере, как должен осуществляться вызов функции MessageBox, чтобы вывести диалоговое окно с сообщением pszMessage и заголовком pszCaption (предполагается, что владельцем диалога будет окно, манипулятор которого сохранен в 32-битной переменной hwnd):


push dword MB_ICONINFORMATION | MB_OK

push dword pszCaption

push dword pszMessage

push dword [hwnd]

call [MessageBox]


Здесь нужно заметить, что ассемблер NASM не отслеживает типов переменных даже если они описаны с указанием размера выделяемой памяти. Поэтому в операциях, не затрагивающих регистры, необходимо явное указание на размер операндов — в данном случае dword. Так как в программах для Windows вызовы функций Win32 API встречаются сплошь и рядом, использовать такие громоздкие описания было бы затруднительно. Поэтому хорошим выходом из сложившейся ситуации будет разработка макроса, позволяющего записывать вызов в одну строку. Автор решил использовать синтаксис, подобный обращению к подпрограмме в языках семейства DBASE IV. Макрос для этих целей записывается так:


%imacro DO 1-*

%rep %0 — 1

%rotate –1

push dword %1

%endrep

%rotate –1

call [%1]

%endmacro

%idefine WITH,


а так выглядит вызов функции MessageBox:


DO MessageBox WITH [hwnd], pszMessage, pszCaption, MB_ICONINFORMATION | MB_OK


Как уже было сказано, для NASM существует готовая библиотека импорта функций Win32 API. Однако подобную библиотеку можно создать и самостоятельно. Для этого в NASM имеются директивы extern и import. Их описание приведено в сопроводительной документации, а в этой статье рассмотрим два макроса, которые позволяют оформлять исходные тексты библиотеки импорта в более читаемом виде:


%macro DLL 1

%define DLL %1

%endmacro


%imacro FUNCT 1-2

extern %1

%if %0 = 1

import %1 DLL

%else

--">

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


Ваш e-mail является приватным и не будет опубликован в комментарии.