Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
907.78 Кб
Скачать

2.4.3. Символьные и строковые константы

Символьная константа представляет собой один символ ASCII или ANSI, строковая - последовательность из двух и более символов, заключенных в апострофы или кавычки. Результатом трансляции этих констант являются коды соответствующих символов. Пример символьной константы;"W" или 'W'. Пример строковой константы;"HELLO" или 'ПРИВЕТ'. Символы могут быть представлены в UNICODE, тогда код одного символа занимает два байта.

2.5. Структура строки языка ассемблера

Программа на языке ассемблера состоит из последовательности строк (предложений). Строка представляет собой комбинацию лексем, заканчивающуюся символами "Возврат каретки"(CR), "Перевод строки"(LF). Строка может быть пустой, содержать машинную команду или директиву с комментарием или без комментария, содержать только комментарий.

2.5.1. Структура строки, содержащей машинную команду

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

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

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

Поле кода операции содержит мнемоническое представление кода команды и отделяется от полей префикса команды и операндов полем табуляции или пробелами.

Поле операндов содержит один или два операнда. Если операнда два, то они разделяются запятой.

Поле комментария отделяется от поля операндов символом ;. Поле комментария может содержать любые символы, в том числе и символы, не принадлежащие алфавиту ассемблера.

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

2.5.2.Структура строки, содержащей только комментарий

Если строка содержит только комментарий, она должна начинаться символом ;.

2.6. Директивы

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

2.6.1. Установка режимов трансляции

По умолчанию TASM транслирует команды процессора 8086.

Директива .8087 позволяет транслировать арифметические команды с плавающей запятой для сопроцессора 8087.

Директива .386 разрешает трансляцию команд процессора 80386

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

2.6.2. Директива MODEL

Директива MODEL позволяет задавать в программе одну из нескольких стандартных моделей управления памятью, когда используется упрощенное описание сегментов. Кроме того, ее можно использовать для указания языкового соглашения, определяющего порядок передачи параметров функциям API, и возврата из подпрограммы.

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

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

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

Ключевое слово NOLANGUAGE в качестве языкового соглашения означает отмену автоматической генерации пролога и эпилога. В этом случае передача аргументов через стек и код пролога и эпилога должны присутствовать в тексте программы в явном виде [5].

MODEL <модель_памяти>,<языковое_соглашение>

В режиме MASM применяется тот же синтаксис, но с директивой .MODEL.

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