Инфоурок Информатика Другие методич. материалыЛабораторная работа "Директивы языка Ассемблер"

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

Скачать материал

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

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

Цель работы:

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

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

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

Ход работы:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Директивы  определения  сегментов  .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.     Компилируем программу:    

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

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

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

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

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

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

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

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

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

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

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

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

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Лабораторная работа "Директивы языка Ассемблер""

Методические разработки к Вашему уроку:

Получите новую специальность за 3 месяца

Психолог в социальной сфере

Получите профессию

Няня

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 656 290 материалов в базе

Скачать материал

Другие материалы

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 04.10.2016 1462
    • DOCX 633.2 кбайт
    • 11 скачиваний
    • Рейтинг: 4 из 5
    • Оцените материал:
  • Настоящий материал опубликован пользователем Ченская Ирина Борисовна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Ченская Ирина Борисовна
    Ченская Ирина Борисовна
    • На сайте: 8 лет и 1 месяц
    • Подписчики: 0
    • Всего просмотров: 112406
    • Всего материалов: 70

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Бухгалтер

Бухгалтер

500/1000 ч.

Подать заявку О курсе
  • Сейчас обучается 22 человека из 16 регионов

Курс профессиональной переподготовки

Математика и информатика: теория и методика преподавания в образовательной организации

Учитель математики и информатики

500/1000 ч.

от 8900 руб. от 4450 руб.
Подать заявку О курсе
  • Сейчас обучается 687 человек из 79 регионов
  • Этот курс уже прошли 1 799 человек

Курс повышения квалификации

Специфика преподавания информатики в начальных классах с учетом ФГОС НОО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 39 человек из 20 регионов
  • Этот курс уже прошли 284 человека

Курс профессиональной переподготовки

Управление сервисами информационных технологий

Менеджер по управлению сервисами ИТ

600 ч.

9840 руб. 5900 руб.
Подать заявку О курсе
  • Сейчас обучается 26 человек из 19 регионов
  • Этот курс уже прошли 34 человека

Мини-курс

Психологические особенности педагогического общения

6 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 30 человек из 18 регионов
  • Этот курс уже прошли 20 человек

Мини-курс

Медико-педагогические аспекты обучения и тренировки

2 ч.

780 руб. 390 руб.
Подать заявку О курсе

Мини-курс

Продажи и самопрезентация в социальных сетях

5 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 106 человек из 38 регионов
  • Этот курс уже прошли 23 человека