Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Свидетельство о публикации

Автоматическая выдача свидетельства о публикации в официальном СМИ сразу после добавления материала на сайт - Бесплатно

Добавить свой материал

За каждый опубликованный материал Вы получите бесплатное свидетельство о публикации от проекта «Инфоурок»

(Свидетельство о регистрации СМИ: Эл №ФС77-60625 от 20.01.2015)

Инфоурок / Информатика / Другие методич. материалы / Лабораторная работа "Директивы языка Ассемблер"
ВНИМАНИЮ ВСЕХ УЧИТЕЛЕЙ: согласно Федеральному закону № 313-ФЗ все педагоги должны пройти обучение навыкам оказания первой помощи.

Дистанционный курс "Оказание первой помощи детям и взрослым" от проекта "Инфоурок" даёт Вам возможность привести свои знания в соответствие с требованиями закона и получить удостоверение о повышении квалификации установленного образца (180 часов). Начало обучения новой группы: 28 июня.

Подать заявку на курс
  • Информатика

Лабораторная работа "Директивы языка Ассемблер"

библиотека
материалов

Методические указания к выполнению лабораторных работ по МДК 01.01 «Системное программирование»

для специальности 09.02.03 «Программирование в компьютерных системах»

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

Тема: «Директивы языка Ассемблера»

Цель работы:

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

  • дать понятие о директивах определения данных;

  • директивы DATA, CODE, Mode.

Ход работы:

  1. Изучить теоретическую часть

  2. Выполнить задание в соответствии с указаниями

  3. Ответить на контрольные вопросы

  4. Предъявить преподавателю результаты работы: проект и исходный код

  5. Оформить отчет в соответствии с ходом работы

Теоретическая часть:

Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти. Программа может состоять из одного или нескольких таких блоков-сегментов. Каждый сегмент содержит совокупность предложений языка, каждое из которых занимает отдельную строку кода программы.

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

  • команды или инструкции, представляющие собой символические аналоги машинных команд.  В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора;

  • макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями;

  • директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении;

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

 Для простых программ, содержащих по одному сегменту для кода, данных и стека, хотелось бы упростить ее описание. Для этого в трансляторы ввели возможность использования упрощенных директив сегментации. Но здесь возникла проблема, связанная с тем, что необходимо было как-то компенсировать невозможность напрямую управлять размещением и комбинированием сегментов. Для этого совместно с упрощенными директивами сегментации стали использовать директиву указания модели памяти MODEL, которая частично стала управлять размещением сегментов и выполнять функции директивы ASSUME (поэтому при использовании упрощенных директив сегментации директиву ASSUME можно не использовать). Эта директива связывает сегменты, которые в случае использования упрощенных директив сегментации имеют предопределенные имена, с сегментными регистрами (хотя явно инициализировать ds все равно придется).

Синтаксис директивы MODEL показан на рис. 1.

hello_html_3543c563.png

Рис. 1 Синтаксис директивы MODEL

Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля. Предполагается, что программный модуль может иметь только определенные типы сегментов, которые определяются упомянутыми нами ранее упрощенными директивами описания сегментов. Эти директивы приведены в таблице 1.

Таблица 1. Упрощенные директивы определения сегмента

hello_html_590412a7.png

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

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

Таблица 2. Модели памяти

hello_html_m3f7a0fda.png

Директивы  определения  сегментов  .STACK,  .CODE  и   .DATA определяют, соответственно, сегмент стека, сегмент кода и сегмент данных. Например, директива:

.STACK   200h

определяет стек  размером в 200h (512) байт.  Что касается стека, то это все,  что вы сможете сделать. Необходимо просто убедиться, что в вашей программе имеется директива .STACK, и Турбо Ассемблер выделит для вас стек.  Для обычных программ вполне подходит  стек размером  200h,  хотя в программах,  интенсивно использующих стек (например,  в программах,  содержащих рекурсивные  вызовы)  может потребоваться  стек большего размера. 

Директива .CODE отмечает начало  сегмента  кода.  Вы  можете посчитать,  что для Турбо Ассемблера достаточно очевидно, что все ваши инструкции относятся к сегменту кода. На  самом  деле  Турбо Ассемблер позволяет вам (с помощью стандартных директив определения сегментов) использовать несколько сегментов кода, а директива .CODE указывает Турбо Ассемблеру, в какой именно сегмент надо поместить ваши инструкции. Определение сегмента кода еще проще, чем определение сегмента стека, так как аргументы для директивы .CODE указывать не требуется. Например:

.

.Code

sub    ax,ax   ; установить аккумулятор в значение 0

mov   cx,100  ; число выполняемых циклов

.

Директива .DATA несколько более сложна.  Как  можно  понять, директива .DATA отмечает начало сегмента данных.  В этом сегменте следует размещать ваши переменные памяти. Например:

.

.Data

TopBoundary       DW   100

Counter                DW   ?

ErrorMessage       DB    0dh,0dh, '***Ошибка***',0dh,0ah,'$'

.

Это довольно просто.  Вся "сложность" директивы .DATA заключается в том, что до того, как вы будете обращаться к ячейкам памяти  в сегменте,  определенном с помощью директивы .DATA,  нужно явно загружать сегментный регистр DS идентификатором  @data.  Так как  сегментный регистр можно загрузить из регистра общего назначения или ячейки памяти,  но в него нельзя  загрузить  константу, регистр  DS  обычно  загружается с помощью последовательности из двух инструкций:

.

mov     ax,@data

mov     ds,ax

.

(Вместо регистра AX можно использовать любой общий регистр). Данная последовательность инструкций устанавливает DS таким образом, чтобы он указывал на сегмент данных, который начинается по директиве .DATA.

Директивы определения данных позволяют определить переменные в памяти различного размера:

DB - 1 байт

DW - 2 байта = 1 слово

DD - 4 байта = 1 двойное слово

DQ - 8 байт = 1 “четвертное” слово

DT - 10 байт



.COM (англ. command) — расширение файла, использовалось в некоторых операционных системах в различных целях.

В системах DOS и в 8-битной CP/M COM-файл — простой тип исполняемого файла, размер которого не может превышать 65280 байт (на 256 байт меньше размера 16-битного сегмента — 216−256 байт). COM-файлы для DOS можно выполнять также на эмуляторах, например, в среде Windows.

Кроме COM-файлов DOS поддерживает файлы в формате EXE. Тип файла определяется при запуске автоматически (в формате EXE в начале файла имеется специальная сигнатура), независимо от расширения.

Для запуска .COM-программы MS-DOS выделяет сегмент памяти, устанавливает на него все сегментные регистры, в первых 256 байтах строит PSP, содержимое COM-файла без изменений загружается следом за ним и запускается с первого байта (то есть с адреса 256), предварительно установив указатель стека в конец сегмента.

Модель памяти, используемую COM-программами, когда код программы, все ее данные, PSP и стек расположены в одном сегменте, компиляторы высокоуровневых языков называют TINY (англ. tiny — крохотная).

COM-программы обычно являются небольшими приложениями, системными утилитами или небольшими резидентными программами.



Примечание: Вам нужно выполнить все задания! Для этого необходимо сделать шаги:

  1. В текстовом редакторе создаем файл, например primer1.asm и записываем в него код (без номеров строк).

  2. Запускаем командную строку, с помощью команды «cd..» переходим в каталог C:\TASM.

  3. Компилируем программу: hello_html_61765a41.png

  4. Компонуем программу: hello_html_9526bbd.png

  5. Запуск и тестирование программы: hello_html_6cebb6b3.png

Задание 1. Создайте файл с именем Lab2.asm.

hello_html_m659eea63.png

Задание 2. Введите текст следующей программы:

hello_html_1d1a6e49.png

Контрольные вопросы:

  1. Какую структуру имеет программа на языке ассемблера?

  2. Какого вида предложения бывают в исходном коде на ассемблере?

  3. Опишите назначения директив Assume и Model?

  4. Модели памяти директива Model.

  5. Расскажите разницу между  директивами .Code, .Data и .Stack?

  6. Какие директивы определения данных существуют, их отличия и применение?

  7. Создание .com и .exe, их структурное отличие на примере сегментов памяти?


Подайте заявку сейчас на любой интересующий Вас курс переподготовки, чтобы получить диплом со скидкой 50% уже осенью 2017 года.


Выберите специальность, которую Вы хотите получить:

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

ПЕРЕЙТИ В КАТАЛОГ КУРСОВ

Автор
Дата добавления 04.10.2016
Раздел Информатика
Подраздел Другие методич. материалы
Номер материала ДБ-236176
Получить свидетельство о публикации
Похожие материалы

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