Запись программ на языке ассемблера
ВВЕДЕНИЕ
В данном руководстве содержатся все сведения о системе команд, директивах языка ассемблера, системе программирования TASM, операционной системе MS-DOS, необходимые для выполнения работ. Однако эти сведения не претендуют на полноту описания, поэтому данное руководство лучше использовать как практическое дополнение к другим источникам информации о языке ассемблера ПЭВМ IBM PC.
Структура описания лабораторной работы
Описание каждой работы состоит из следующих разделов:
цель работы – кратко излагается основная цель работы и перечисляются ожидаемые результаты;
основные сведения – приводятся минимальный объем сведений, необходимых для выполнения работы;
пример выполнения работы – приводится типовое задание и программа, реализующая поставленную задачу. Пример можно рассматривать как шаблон выполнения соответствующей работы;
варианты заданий;
контрольные вопросы – перед защитой работы рекомендуется попытаться ответить на все поставленные вопросы.
ВЫПОЛНЕНИЕ РАБОТЫ
При выполнении каждой работы следует руководствоваться следующей последовательностью шагов:
прочесть описание и разобрать предложенный пример;
написать программу(ы) согласно варианту задания;
создать с помощью текстового редактора файл с текстом программы(ы);
оттранслировать программу(ы), добиться отсутствия ошибок трансляции;
запустить и отладить программу при нескольких наборах исходных данных;
ответить на контрольные вопросы.
ФОРМА ОТЧЕТА
Отчет по лабораторной работе должен включать:
· вариант задания;
· тексты программ (желательно в виде листинга трансляции);
· исходные данные и результаты выполнения программы для нескольких наборов данных.
Лабораторная работа |
ÐÀÇÐÀÁÎÒÊÀ È ÎÒËÀÄÊÀ ÏÐÎÃÐÀÌÌ ÍÀ ßÇÛÊÅ ÀÑÑÅÌÁËÅÐÀ |
ЦЕЛЬ РАБОТЫ
Цель настоящей работы – выработка навыков подготовки и трансляции программ на языке ассемблера в операционной системе MS-DOS и отладки программ с использованием отладчика.
ОСНОВНЫЕ СВЕДЕНИЯ
Запись программ на языке ассемблера
Программа на языке ассемблера представляет собой текст, разбитый на строки. Каждая строка либо соответствует машинной команде, либо является директивой ассемблера или макрокомандой. Команды и директивы можно набирать как заглавными, так и строчными латинскими буквами. Русские буквы можно использовать только в комментариях.
Строка программы в общем случае состоит из четырех полей: поля метки или имени, поля операции, поля операндов и поля комментария.
Поля удобно разделять табуляцией.
Имена данных, процедур, сегментов или метки команд могут состоять не более чем из 255 латинских буквы или цифр, причем первым символом должна быть обязательно буква. По умолчанию в имени значащими являются первые 32 символа. Заглавные и строчные буквы могут ассемблером различаться или не различаться (ключи: /ML, /MU и /MX). Метки машинных команд должны заканчиваться символом двоеточия.
При трансляции каждому имени ставится в соответствие ряд атрибутов.
Поле операции содержит мнемокод машинной команды, директивы или макрокоманды. Заглавные и строчные буквы в мнемокоде операции ассемблером не различаются.
Поле операндов служит для записи операндов, если они требуются.
Если операндов несколько они, как правило, разделяются запятыми.
Поле комментариев служит для пояснений к командам. Это поле не обязательно. Комментарий начинается с символа точка с запятой и заканчивается с концом строки.
В программах на языке ассемблер допустимы несколько типов констант:
· десятичные – последовательность цифр от 0 до 9;
· шестнадцатеричные – последовательность шестнадцатеричных цифр от 0 до 9 и от A или a до F или f, завершающаяся буквой H или h, первой должна быть десятичная цифра;
· восьмеричные – последовательность цифр от 0 до 7, завершающаяся буквами Q, q, O или o;
· двоичные – последовательность цифр 0 или 1, завершающаяся буквой B или b.
Ниже приведена типичная структура простой программы на ассемблере.
model SMALL
stack 100h
dataseg
. . . ;данные
codeseg
startupcode
. . . ;код
QUIT: exitcode 0
end
Директивы stack, dataseg и codeseg служат для выделения сегментов.
Макрокоманда startupcode содержит инициализирующий код, который обеспечивает загрузку сегментных регистров DS и SS.
Макрокоманда exitcode <код возврата> осуществляет завершение выполнения программы и передачу управления ОС. Необязательный параметр <код возврата> служит для возврата значения, которое можно проверить в командных файлах ОС.
Директива end <метка точки входа> отмечает конец текста программы и указывает ассемблеру, где завершить трансляцию. Поэтому директива end должна присутствовать в каждой программе. Необязательный параметр <метка точки входа> указывает инструкцию, с которой должно начинаться выполнение программы.
Директивы
<имя> DW <выражение>,<выражение>,... и
<имя> DB <выражение>,<выражение>,...
служат для определения данных, слов или байтов, соответственно.
<выражение> может быть константой или, если значение не определено, можно использовать символ вопросительного знак.
Конструкция <число> dup (<выражение>,<выражение>,...) используется для повторения последовательности выражений в скобках заданное <число> раз.