Читать онлайн «Ассемблер. Самоучитель»

Автор Александр Крупник

Обычно это делают директивы, которые не переводятся в инструкции процессора, а лишь управляют программой-ассемблером. Кроме инструкций процессора и директив, программа на ассемблере содержит вызовы различных процедур, без которых она окажется голой и беспомощной под «испепеляющим огнем процессора». Ведь программы работают не сами по себе, а под управлением операционной системы, которая их запускает, обеспечивает взаимодействие с внешней средой (вывод символов на экран, чтение и запись на жесткие диски и т. д. ) и затем помогает правильно завершиться. Для всего этого и созданы процедуры операционной системы, часто называемые API, то есть, Application Programming Interface — интерфейс прикладных программ. Мы будем называть их Windows API, потому что в этой книге нас будут прежде всего интересовать системы семейства Windows 95*. Каждой процедуре Windows API передаются параметры, то есть сведения, необходимые ей для работы. Если, например, процедура, выводит какое-то сообщение на экран, то ей необходимо знать, где находится это сообщение, сколько в нем символов и т. д. Самой простой процедуре ExitProcess, с которой мы вот-вот познакомимся, требуется всего один параметр. Это код завершения — обычное число, которое получает операционная система после окончания работы программы. Если код завершения равен нулю, система поймет, что все нормально. Ненулевой код завершения говорит операционной системе о какой-то неполадке в программе. Процедуры операционной системы вызываются специальной директивой invoke, за которой следует имя процедуры, а дальше — разделенный запятыми список параметров. Например, вызов процедуры ExitProcess выглядит так: invoke ExitProcess. О Единственный передаваемый ей параметр — число 0 отделено от имени процедуры запятой. *В это семейство входят операционные системы Windows 95/NT/98/ME/2000/XP. 14 Глава 1. Начало Процедура ExitProcess вызывается в каждой ассемблерной программе, даже если та и не пытается взаимодействовать с чем-то кроме процессора, как, например, наша первая программа, просто складывающая два числа (листинг 1. 1).
Листинг 1. 1. Первая программа . 386 . model flat, stdcall includelib \myasm\1ib\kernel32. 1 ib ExitProcess proto :DWORD . code start: mov eax. 2 add eax. 3 invoke ExitProcess. 0 end start В ней инструкции процессора mov eax. 2 add eax. 3 окружены директивами — специальными командами, которые должен выполнить не процессор, а сама программа-ассемблер. Первая директива нашей первой программы . 386 начинается с точки и показывает, для какого процессора предназначена программа. В нашем случае это процессор Intel 80386 и более поздние модели, ведь семейство процессоров Intel совместимо снизу вверх и то, что умеет процессор 80386, под силу и процессорам 80486, Pentium, Pentium III, Pentium 4 и т. д. Вторая директива . model flat, stdcall показывает, в какой среде будет «жить» программа. В нашем случае это операционная система семейства Windows 95 (в дальнейшем будем говорить просто Windows).