Запись программ на языке ассемблера

ВВЕДЕНИЕ

В данном руководстве содержатся все сведения о системе ко­манд, директивах языка ассемблера, системе программирования 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 (<выражение>,<выражение>,...) исполь­зуется для повторения последовательности выражений в скобках заданное <число> раз.