Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

vassamblere

.pdf
Скачиваний:
10
Добавлен:
21.02.2016
Размер:
479 Кб
Скачать
☆

Символические константы являются именами константных выражений.

rows = 5 columns = 10

tablePos = rows * columns

Обратите внимание на то, что хотя это утверждение и выглядит подобно выражению времени выполнения в языках высокого уровня, но определяется оно во время трансляции.

Символы или символьные константы могут быть представлены отдельными символами или строками символов, заключенными в двойные или одинарные кавычки. Внутренние

ивнешние кавычки должны быть разного типа, как показано в следующих примерах:

#'ABC';

#'X';

#"This is a test";

#'4096';

#"This isn't a test";

#'Say "hello" to Bill.'.

При этом необходимо хорошо представлять, что символьная константа ‘‘4096’’ занима" ет в памяти четыре байта, так как каждая цифра определяется в соответствии с кодом ASCII и занимает один байт, о чем уже говорилось ранее. Также не забывайте, что кодировки сим" волов русского алфавита для DOS и Windows в диапазоне 127–255 не совпадают. Поэтому когда вы пишете программу в текстовом редакторе для Windows, а потом выполняете ее с выводом на экран консоли, которая все символы отображает в кодировке для DOS, то буквы русского алфавита будут отображаться неправильно. Поэтому либо используйте английский алфавит, либо делайте перекодировку с помощью специальной процедуры.

Утверждения

В языке ассемблера утверждение состоит из имени, мнемокода, операндов и коммен" тариев. Утверждения бывают двух типов: команды и директивы. Команды """ это утвер" ждения, выполняемые в программе, а директивы """ утверждения, информирующие ас" семблер о том, как создавать выполняемый код. Общая форма утверждения выглядит так:

[имя] [мнемокод] [операнды] [; комментарии]

Утверждение имеет свободную форму записи. Это означает, что его можно записы" вать с любой колонки и с произвольным количеством пробелов между операндами. Ут" верждение должно быть записано на одной строке и не заходить за 128"ю колонку. Мож" но продолжить запись со следующей строки, но при этом первая строка должна заканчиваться символом ‘‘\’’ (обратная косая черта), как показано в примере ниже.

longArrayDefinition DW l000h, 1020h, 1030h \ 1040h, 1050h, 1060h, 1070h, 1080h

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

CALL MySub

; Передача управления.

MOV

EAX,5

; Передача данных.

ADD

EAX,20

; Арифметическая.

JZ next1

;

Логическая (переход, если установлен флаг нуля).

IN AL,20

;

Ввод-вывод (чтение из аппаратного порта).

Глава 3. Введение в язык ассемблера

63

Директива """ это утверждение, которое выполняется ассемблером во время трансля" ции исходной программы в машинные коды. Например, директива DB заставляет ас" семблер выделить память для однобайтовой переменной, названной count, и поместить туда значение 50.

count DB 50

Следующая директива .STACK заставляет ассемблер зарезервировать пространство памяти для стека.

.STACK 4096

Имена

Имена определяют метки, переменные, символы или ключевые слова. Они могут со" стоять из символов, приведенных в табл. 3.11.

Таблица 3.11. Допустимые для имен символы

Символы

Описание

 

 

A ... Z, a ... z

Буквы

0

... 9

Цифры

?

 

Знак вопроса

_

 

Подчеркивание

@

 

Знак @

$

 

Знак доллара

 

 

 

Для имен есть следующие ограничения.

#Максимальное количество символов """ 247 (в MASM).

#Заглавные и строчные буквы не различаются.

#Первым символом могут быть @, _ или $. Последующими могут быть эти же сим" волы, буквы или цифры. Избегайте использования в начале имени символа ‘‘@’’, так как многие предопределенные имена начинаются именно с него.

#Выбранные программистом имена не должны совпадать со словами, зарезервиро" ванными в языке ассемблера.

Переменные """ это данные какой"либо программы, которым присвоены имена. count1 DB 50 ; Переменная (место в памяти размером 1 байт).

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

Label1: MOV EAX,0

MOV EBX,0

Label2:

JMP Label1 ; Переход на Label1.

Ключевые слова всегда имеют предопределенный смысл в языке ассемблера. Это могут быть команды или директивы, например MOV, PROC, TITLE, ADD, AX или END. Ключевые

64

Глава 3. Введение в язык ассемблера

слова не могут использоваться программистом для каких"либо других целей, например как имена. Если использовать ключевое слово ADD как метку, это будет синтаксической ошибкой.

ADD: MOV EAX,10 ; Синтаксическая ошибка!

Разработка программы на языке ассемблера

Хотя внешне программы, написанные на языке ассемблера, сильно отличаются от программ, созданных на языке высокого уровня, тем не менее технология их разработки одинакова. Однако следует учесть, что разработка программ на языке ассемблера требует большего внимания и аккуратности. При этом необходимо последовательно выполнить следующие этапы.

#Поставить задачу и составить проект программы. На этом этапе нередко состав" ляются блок"схемы """ эскиз выполняемых программой действий.

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

#Откомпилировать программу с помощью ассемблера. Если ассемблер обнаружит ошибки, исправить их в редакторе и откомпилировать программу заново.

#Преобразовать результат работы ассемблера в исполняемый модуль с помощью компоновщика.

#Выполнить программу.

#Проверить результаты. Если они не соответствуют ожидаемым, найти ошибки с помощью отладчика. Данный этап называется отладкой и обычно занимает большую часть времени, затрачиваемого на разработку программы.

Если программа простая и короткая, то ее разработка не займет много времени. Од" нако сложные программы требуют значительного времени на каждом этапе, поэтому не" обходимо тщательно планировать процесс разработки уже на этапе проектирования, иначе этап отладки может никогда не закончиться.

Программа, написанная в командах ассемблера, называется исходной программой, а ее преобразованный в коды процессора вид именуется объектной программой. Таким обра" зом, функцией ассемблера является преобразование исходной программы, доступной восприятию человеком, в объектную программу, понятную процессору.

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

Обычно объектным модулем называется файл, содержащий результат трансляции программы ассемблером. А файл, содержащий перемещаемую версию оттранслирован" ной программы, называется исполняемым модулем. Таким образом, функцией компонов" щика LINK является создание исполняемого модуля из объектного модуля.

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

Глава 3. Введение в язык ассемблера

65

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

Компоновщик должен вызываться для любой написанной программы, даже если она состоит только из одного объектного модуля. Одномодульные программы компоновщик сразу преобразует в перемещаемый модуль. Если программа состоит из двух или боль" шего количества модулей, то компоновщик сначала объединяет их, а затем преобразовы" вает результат в перемещаемый модуль.

Завершенную программу можно вызвать для выполнения двумя способами:

#набрать ее имя в качестве команды или щелкнуть на имени программы мышкой;

#выполнить ее под управлением программы DEBUG.

Обычно программу следует выполнять только в том случае, если есть уверенность в ее безошибочной работе. Пока она не будет полностью отлажена, необходимо вызывать программу только под управлением отладчика DEBUG. Это связано с тем, что непрове" ренная программа может нанести системе непоправимые повреждения. При программи" ровании под Win32 это маловероятно, но если вы программируете под DOS, то это пра" вило необходимо соблюдать.

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

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

 

 

 

 

Библиотека

 

 

 

 

 

 

 

 

 

 

 

 

загрузочных

 

 

 

 

 

 

 

 

 

 

 

 

модулей

 

 

 

 

 

 

 

 

Текстовый редактор

 

 

Загрузчик

 

 

 

 

 

 

 

 

 

 

Исходная программа

Ассемблер

Объектный модуль

 

Исполняемый модуль

 

 

Отладчик

 

 

 

 

 

 

 

 

 

(.asm)

 

 

 

(.obj)

 

 

 

 

(.exe)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Файл листинга

 

 

 

 

Файл перекрестных

 

 

 

 

 

 

 

(.lst)

 

 

 

 

ссылок (.crt)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.8. Этапы разработки программ на ассемблере

Разработка программы методом ‘‘сверху вниз’’

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

Разработка методом ‘‘сверху вниз’’ означает, что вначале создается набросок про" граммы в виде текста на обычном языке, а затем этот набросок постепенно дополняется

66

Глава 3. Введение в язык ассемблера

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

;Изобразить меню возможных функций

;Запросить у пользователя выбор из меню

;Прочитать ответ пользователя

;Проверить допустимость ответа

;Если ответ допустим, выполнить требуемую функцию

Точки с запятой означают, что эти строки представляют собой не команды, а коммен" тарии, которые необходимы только разработчику. Ассемблер пропускает все до конца строки после точки с запятой.

Затем, с учетом этого текста, производится вставка необходимых команд между стро" ками. Так как каждая строка описывает относительно небольшую задачу, проще всего выполнить каждую задачу в отдельности, проверяя решение перед тем, как двинуться дальше. Иначе говоря, начните со вставки первой группы команд (в представленном примере с команд для изображения меню), затем запишите полученную программу на диск и завершите все последующие этапы (трансляцию, компоновку и выполнение). Реализация такой частичной программы покажет, правильно ли она работает. Если она работает неправильно, отладьте ее и попробуйте еще раз. После того как первая часть от" лажена, перейдите ко второй части, затем к третьей и т.д.

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

#четко просматривается логика программы;

#производится документирование программы с помощью комментариев, впослед" ствии программу будет легко модифицировать;

#обеспечивается правильность работы каждой части до того, как произойдет пере" ход к разработке следующей части программы.

Работа в DOS под Windows NT

Хотя термины ‘‘Windows 3x’’ и ‘‘Windows 9х’’ связывают с операционными системами, эти графические интерфейсы пользователя являются только оболочкой, сооруженной над DOS. Довольно часто эти системы останавливаются, и связано это с тем, что если одна программа для Windows (или программа DOS, работающая под Windows) дает сбой, то зависает и вся система. Приходится перезагружать компьютер, и, вероятнее всего, часть готовой работы будет потеряна. И все же, благодаря внутренним конструктивным доработкам, в Windows 98 отказов стало меньше, хотя пользователи, работающие с этими системами, ограничены ар" хитектурой DOS, которая не позволяет создать оболочку, устойчивую к неисправностям.

Однако все еще работают сотни миллионов копий DOS и десятки тысяч приложений, созданных для этих систем. Довольно часто программа состоит только из версии DOS, что относится как к большим приложениям, так и к незаметным утилитам. Поэтому тех" нология DOS сохранена и в новейших операционных системах, в которых она использу" ется совсем по"другому. Операционные системы Windows NT (Windows 2000 и Windows XP) совсем не используют DOS. Программа DOS является только отдельной исполняемой программой, как и многие другие. При инициализации Windows система DOS не загру" жается вообще. Технология NT имеет операционную систему с ядром, которое отвечает за большую часть того, что ‘‘умеет’’ DOS (например, ввод"вывод с помощью клавиатуры

Глава 3. Введение в язык ассемблера

67

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

Windows NT имеет специальное окно для DOS, которое называется командная кон соль, и работа в этом окне очень похожа на сеанс MS DOS в Windows 3x или Windows 9x. Интерпретатор команд содержит богатый набор команд, размеры окна можно изменять, окно имеет полосу прокрутки и не ограничено 24 строками, как в DOS.

Эмуляцию DOS обеспечивает 32"разрядное приложение с именем cmd.exe, которое яв" ляется расширенной версией MS DOS и не только обеспечивает совместимость с MS DOS, но и позволяет запускать приложения Windows, OS/2 и POSIX в режиме командной строки.

Сеанс DOS, который создается при запуске приложения DOS из командного окна, можно сконфигурировать с помощью загружаемых драйверов устройств, TSR и т.д.

При запуске программы DOS из Windows NT создается виртуальная машина DOS, благодаря которой программа DOS работает как бы на отдельном компьютере. Windows NT создает отдельную виртуальную машину для каждого запускаемого приложения DOS. Каждая такая машина имеет весь сервис, необходимый для работы как с 16"разрядными, так и с 32"разрядными вызовами DOS в соответствии с требованиями DOS 6. Этой вир" туальной машине выделяется 16 Мбайт памяти. При необходимости могут поддержи" ваться диспетчеры памяти. Есть и ограничения. В целях безопасности и защиты ядра приложения DOS должны быть изолированы. Для этого подсистема среды DOS перехва" тывает все процессы ввода"вывода, проверяет их, а затем направляет данные по назначе" нию. Этот процесс обслуживается перехватчиками ввода"вывода, которые, в свою оче" редь, передают данные программе NT Executive для доставки по назначению.

Любые традиционно написанные программы DOS, которые выполняют ввод"вывод с помощью стандартных системных вызовов DOS, будут работать под Windows NT без проблем. А программы, выполняющие запись непосредственно на устройство, для кото" рого драйверы не разрешают прямого доступа (например, драйверы жестких дисков), бу" дут прерваны программой контроля безопасности, что приведет к сообщению об ошибке и завершению опасной программы.

Если программа пытается записывать и читать из портов СОМ и LPT, с экрана или клавиатуры, то Windows NT выполнит это безупречно, однако другие виды прямого управления памятью, диском или системным устройством разрешены не будут.

Большинство программ DOS, которые используют драйвер мыши или клавиатуры, бу" дут работать, поскольку строки ввода драйвера мыши и клавиатуры эмулируются (их ис" пользуют очень многие программы DOS).

Операционная система DOS использует командную строку для ввода отдельных ко" манд. Перечень всех доступных команд можно получить, если ввести команду help. Список всех команд приведен в табл. 3.13.

Инструментальные средства

Термины ‘‘трансляция’’, ‘‘компоновка’’, ‘‘отладка’’ и другие, связанные с этапами ра" боты ассемблера, уже упоминались в этой книге, но о самом ассемблере пока ничего не говорилось. В этом разделе будут даны начальные сведения о наиболее популярных ас" семблерах TASM и MASM.

68

Глава 3. Введение в язык ассемблера

Ассемблер фирмы Borland (TASM)

Ассемблер фирмы Borland, как и любой другой, поставляется с полным набором про" грамм, необходимых для компиляции исходного файла, получения выполняемого файла, компоновки и редактирования. Последняя версия ассемблера Borland Turbo Assembler 5.0 реализует следующие функциональные особенности:

#объектно"ориентированную технику программирования;

#поддержку 32"разрядной модели и кадра стека;

#полную поддержку процессоров Intel 386, Intel 486 и Pentium;

#использование директив упрощенной сегментации;

#поддержку таблиц;

#гибкую систему макросов.

К преимуществам данного компилятора следует также отнести высокую скорость компиляции. Используя данный ассемблер, можно программировать для Windows. Од" нако поскольку фирма Borland закрыла свое направление для языков C/C++, она отка" залась и от TASM как от отдельного продукта. И теперь новые версии TASM приходят только в составе таких продуктов, как Delphi и C++ Builder.

Фирма Borland разработала отличный ассемблер, располагающий возможностями, недоступными в других компиляторах, например объектно"ориентированная техника программирования. Так как TASM удобно использовать при написании программ для операционной системы Windows, которая состоит из сообщений, исключений и классов, то эта возможность оказалась как нельзя кстати.

Ассемблер фирмы Microsoft (MASM)

Последняя версия ассемблера Microsoft Macro Assembler 6.15 реализует следующие возможности:

#поддержку 32"разрядной модели памяти и кадра стека;

#полную поддержку всех процессоров вплоть до Pentium II;

#директивы упрощенной сегментации;

#поддержку таблиц;

#директивы языков верхнего уровня.

В отличие от фирмы Borland, Microsoft поддерживала свой продукт и выпускала его как отдельный пакет, так и в составе таких программных пакетов, как Microsoft Quick C, Microsoft Visual Studio и др.

Использование этого ассемблера при написании программ для Windows будет более привычным для тех, кто начал использовать MASM еще с операционной системой DOS и продолжает его применять с Windows. В этом компиляторе предусмотрено все: от раз" работки простых оконных приложений для Windows до создания виртуальных драйверов устройств VxD (все подробно описано в документации и файлах помощи). В MASM нельзя применять объектно"ориентированный стиль программирования, но можно ис" пользовать дополнительные макроопределения, такие как .IF, .WHILE, .REPEAT,

.CONTINUE, .BREAK.

Еще одно преимущество данного ассемблера """ новый пакет MASM32, в котором со" брано все, что нужно программисту при написании программ для Win32.

Глава 3. Введение в язык ассемблера

69

Пример простой программы

В представленном листинге приведена простая программа для Win32, которая отобра" жает на экране традиционное приветствие ‘‘Hello, world!’’. В этой программе показаны основные особенности приложений на языке ассемблера. В первой строке использована директива Title, остальные символы строки трактуются как комментарий, подобно всем символам во второй строке. Исходный код этой программы написан на языке ассемблера и должен быть оттранслирован в машинные коды перед запуском программы.

Сегменты являются строительными блоками программы. Сегмент кодов определяет место, где хранятся коды программы, сегмент данных включает все переменные, а сегмент стека включает исполнительный стек. Стек """ это специальное пространство в памяти, которое обычно используется программой при вызове и возврате подпрограмм.

Программа ‘‘Hello World’’ для Win32

TITLE (.asm)

.386

.model flat, stdcall

ExitProcess PROTO,

x:dword

WaitMsg PROTO

WriteString PROTO

Crlf PROTO

.data

strHello BYTE "Hello Word!",0

.code

 

main PROC

; Аргументы для WriteString.

mov EDX, OFFSET strHello

invoke WriteString

; Вывод строки на консоль.

invoke Crlf

; Перевод каретки.

invoke WaitMsg

; Запрос для нажатия клавиши.

invoke ExitProcess,0

; Корректное окончание программы.

main ENDP

 

END main

 

 

 

Обратите внимание на структуру программы. Она начинается с директивы Title, ко" торая не является обязательной, но всегда лучше ее поставить и кратко описать назначе" ние программы (дополнительная информация в данном случае не помешает). Затем идет директива для задания минимального типа процессора, команды которого можно ис" пользовать, и директива модели памяти. При создании программ для Win32 всегда долж" на выбираться директива

.model flat, stdcall

Далее следуют объявления используемых в программе процедур. В данном случае это процедуры окончания программы (ExitProcess), ожидания нажатия клавиши (WaitMsg), вывода строки на консоль (WriteString) и перевода каретки (Crlf).

Далее в сегменте данных (.data) объявляется переменная strHello, которая пред" ставляет собой строку, выводимую на консоль. Наконец, в сегменте кодов (.code) опи" сывается логика программы, которая в данном случае реализует вывод строки на консоль и представляет собой последовательный вызов процедур. Эти процедуры могут быть как

70

Глава 3. Введение в язык ассемблера

процедурами операционной системы Windows (ExitProcess), так и процедурами, на" писанными самим пользователем и помещенными в библиотеки. Разницы между ними нет никакой (обо всем этом речь пойдет далее). Обратите внимание на обязательный по" рядок расположения директив и команд. Обязательно должна присутствовать процедура main, которая является точкой входа в программу, и заключительные директивы

main ENDP END main

Иначе компилятор не сможет найти начало и конец программы и не будет ее обраба" тывать. Для компиляции программы необходимо в окне консоли ввести команды, как показано на рис. 3.9.

Рис. 3.9. Компиляция программы

Это не единственный способ оформления программы, вы можете встретить другие ди" рективы, которые будут обрабатываться компилятором. Но в дальнейшем будем ис" пользовать только такой формат """ он довольно наглядный и обладает расширенными воз" можностями. Для сравнения ниже приведена программа для операционной системы DOS.

Программа ‘‘Hello World’’ для DOS

TITLE Hello World Program (hello.asm)

; Эта программа отображает слова "Hello, world!"

.MODEL small

.STACK 100h

.DATA

strHello DB "Hello, world!",0dh,0ah,'$'

.CODE main PROC

MOV AX,@data MOV DS,AX MOV AH,9

MOV DX,offset message INT 21h

MOV AX,4C00h INT 21h

main ENDP END main

Кратко рассмотрим основные строки программы.

#Директива .MODEL small сообщает ассемблеру, что в данной программе необходи" мо использовать не более 64 Кбайт памяти для кодов и не более 64 Кбайт для данных.

Глава 3. Введение в язык ассемблера

71

Директива .STACK устанавливает размер пространства для стека емкостью 100h (256) байт. Директива .DATA отмечает начало сегмента данных, где сохраняются переменные. Здесь под именем strHello сохраняется строка ‘‘Hello, world!’’, за которой следуют два служебных символа перехода на новую строку (0dh,0ah). Символ ‘‘$’’ используется как символ конца строки для подпрограмм, которые бу" дут считывать эту строку.

#Директива .CODE отмечает начало сегмента кодов, где должны находиться выпол" няемые команды. Директива PROC объявляет начало процедуры. В этой программе объявлена процедура с именем main.

#Первые две команды процедуры main копируют адрес сегмента данных (@data) в регистр DS. Команда MOV всегда сопровождается двумя операндами: первый ука" зывает, куда поместить данные, а второй """ откуда эти данные взять.

#Затем в процедуре main на экран выводится строка символов. При этом вызыва" ется функция DOS, которая непосредственно выводит на экран строку символов, начиная с адреса, который указан в регистре DX. Номер этой функции предвари" тельно должен быть помещен в регистр AH.

#Последние две команды процедуры main (MOV AX,4C00h и INT 21h) заканчи" вают программу и передают управление операционной системе.

#Утверждение main ENDP использует директиву ENDP, которая отмечает конец главной процедуры.

#В самом конце находится директива END, заканчивающая программу, которая долж" на быть оттранслирована. Следующая за ней метка main говорит об окончании главной процедуры, или программы. Эта директива необходима для компилятора.

Как видите, отличие есть, и оно заключается в том, что вместо процедур Windows здесь используются прерывания DOS и номера функций, которые выполняют аналогич" ные действия, но менее удобны в использовании, так как приходится запоминать боль" шое число номеров функций и прерываний и знать, как передавать и получать из них рассчитанные значения.

В табл. 3.12 приведен список наиболее часто используемых директив ассемблера.

Таблица 3.12. Стандартные директивы ассемблера

Директива

Описание

 

 

END

Окончание трансляции программы

ENDP

Конец процедуры

PAGE

Устанавливает формат листинга

PROC

Начало процедуры

TITLE

Название листинга

.CODE

Отмечает начало сегмента кодов

.DATA

Отмечает начало сегмента данных

.MODEL

Устанавливает режим памяти

.STACK

Устанавливает размер стека

 

 

После того как программа ‘‘Hello World’’ написана в текстовом редакторе, ее необхо" димо сохранить на диске под именем hello.asm. После этого ее можно компилировать.

72

Глава 3. Введение в язык ассемблера

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]