Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WOmwwemmjb.file.doc
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
256.51 Кб
Скачать
    1. 1.4. Отчет по лабораторной работе

Отчет по лабораторной работе должен содержать:

– текст полученных заданий с указанными номерами вариантов;

– тексты программ с комментариями.

Кроме отчета и демонстрации работающей программы студент отвечает на вопросы по теоретической части, относящейся к данной лабораторной работе.

2. Лабораторная работа №2

ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ:

СРЕДА ПРОГРАММИРОВАНИЯ,

ПЕРЕСЫЛКИ И АРИФМЕТИКА

    1. 2.1. Общие методические указания по выполнению лабораторной работы

Цели работы:

– ознакомиться со структурой программы на ассемблере;

– освоить работу с ассемблером MASM, редактором связей LINK;

– создать и выполнить первую программу на ассемблере;

– освоить работу c интерактивным отладчиком AFD (трассировка выполнения программы, отображение регистров, сегментов памяти и т.п.);

– получить знания о директивах описания данных;

– закрепить знания о представлении целочисленных (знаковых и беззнаковых) данных в памяти ПК;

– получить знания о форматах команд и типах операндов на примере команд пересылки;

– освоить работу с арифметическими командами сложения и вычитания для знаковых и беззнаковых целочисленных операндов;

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

– закрепить знания о флагах условий и их формировании арифметическими командами.

Среда выполнения:

Интерпретатор команд DOS, ассемблер MASM, интерактивный отладчик AFD.

Перед выполнением работы необходимо повторить:

– структуру микропроцессора I8086;

– понятие относительной адресации и принципы ее реализации в ПК;

– представление целых чисел (без знака и со знаком) в памяти ПК.

    1. 2.2. Теоретические сведения

    2. 2.2.1. Определение данных

Ассемблер обеспечивает два способа определения данных:

– через директивы определения данных;

– через директивы эквивалентности и присваивания.

Директивы определения данных

Основной формат директив определения данных выглядит примерно следующим образом:

[<имя>] DN (директива определения данных) [<операнды>]

Для определения элементов данных имеются следующие директивы: DB (байт), DW (слово), DD (двойное слово).

Выражение может содержать константу, например:

Y DB 25

или знак вопроса для неопределенного значения, например

X DB ?

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

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

Выражение может содержать несколько констант, разделенных запятыми и ограниченными только длиной строки:

X DB 11, 12, 13, 14, 15, 16, ...

Ассемблер определяет эти значения в виде последовательности смежных байт. Ссылка по имени X указывает на первое значение (11), по X+1 – на второе (12). X можно представить как X+0. Например, команда

MOV AL, X+3

загружает в регистр AL значение 14.

Также возможно следующее сокращение в директиве DB: если в ней несколько операндов – символы, то их можно объединить в одну строку. Например, следующие две директивы эквивалентны:

S DB ‘a’, ‘b’, ‘c’

и

S DB ‘abc’

Таким образом, под данные символы будет выделено 3 смежных байта.

Операнд – конструкция повторения DUP

Довольно часто требуется записать в память сразу несколько одинаковых значений. Наиболее удобный способ такой записи – применение директивы DUP:

[<имя>] DN <число повторений> DUP (<выражение>)

В качестве операнда используется так называемая конструкция повторения, в которой сначала указывается коэффициент повторения, затем служебное слово DUP (duplicate, копировать), а за ним в круглых скобках – повторяемая величина.

Следующие три примера иллюстрируют повторение:

DW 10 DUP(?) ;Десять неопределенных слов

DB 5 DUP(14) ;Пять байт, содержащих шесть14

DB 3 DUP(4 DUP(8));Двенадцать восьмерок

В третьем примере сначала генерируется четыре копии десятичной 8 (8888), и затем это значение повторяется три раза, давая в результате двенадцать восьмерок.

Выражение может содержать символьную строку или числовую константу.

Символьная строка используется для описания данных, таких как, например, имена людей или заголовки страниц. Содержимое строки отмечается одиночными кавычками, например, 'PC' или двойными кавычками - "PC". Ассемблер переводит символьные строки в объектный код в обычном формате ASCII.

Символьная строка определяется только директивой DB, в которой указывается более двух символов в нормальной последовательности слева направо. Например:

N DB ‘A’

X DB ‘hello’

Числовые константы используются для арифметических величин и для адресов памяти. Для описания константы кавычки не ставятся. Существуют различные числовые форматы.

Десятичный формат. Десятичный формат допускает десятичные цифры от 0 до 9 и обозначается последней буквой D, которую можно не указывать, например, 125 или 125D.

Шестнадцатеричный формат. Данный формат допускает цифры от 0 до F и обозначается последней буквой H. Так как ассемблер полагает, что с буквы начинаются идентификаторы, то первой цифрой шестнадцатеричной константы должна быть цифра от 0 до 9. Например, 2EH или 0FFFH, которые ассемблер преобразует соответственно в 2E и FF0F.

Двоичный формат. Двоичный формат допускает двоичные цифры 0 и 1 и обозначается последней буквой B.

Восьмеричный формат. Восьмеричный формат допускает восьмеричные цифры от 0 до 7 и обозначается последней буквой Q или O, например, 253Q. На сегодня восьмеричный формат используется весьма редко.

Десятичный формат с плавающей точкой. Этот формат поддерживается только ассемблером MASM.

Директивы эквивалентности и присваивания

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

<имя> EQU <операнд>

В команде обязательно должно быть указано имя, должен быть операнд (только один).

Эта директива аналогична описанию констант в языках высокого уровня.

Директива EQU носит чисто информационный характер. Ее можно ставить в любое место программы – и между командами, и между описаниями переменных и в других местах программы.

Варианты использования данной директивы.

Операнд – имя

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

A DW ?

B EQU A

C DW B ; эквивалентно: C DW A

Операнд – константное выражение

Если в правой части директивы EQU стоит константное выражение, тогда указанное слева имя принято называть именем константы.

N EQU 100

K EQU 2*N-1

STAR EQU ‘*’

Операнд – любой другой текст

Директива EQU может использоваться и следующим образом:

S EQU ‘Ошибка’

LX EQU X+(N-1)

WP EQU WORD PTR

В данном случае считается, что указанное имя обозначает операнд в том виде, как он записан (операнд не вычисляется). Именно на этот текст и будет заменяться каждое вхождение данного имени в программу. Этот вариант директивы EQU обычно используется для того, чтобы ввести короткие обозначения для часто встречающихся длинных текстов.

Директива присваивания

Директива присваивания записывается следующим образом:

<имя> = <константное выражение>

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

K = 10

A DW K ; эквивалентно: A DW 10

K = K+4

B DB K ; эквивалентно: B DB 14

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