Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Другие методич. материалы / Лабораторная работа "Команды пересылки данных. Стек."

Лабораторная работа "Команды пересылки данных. Стек."

  • Информатика

Поделитесь материалом с коллегами:

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

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


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

Тема: «Команды пересылки данных. Стек.»

Цель работы:

  • изучение режимов адресации; 

  • изучение правил адресации при использовании регистров;

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

  • понятие о стеке.

Ход работы:

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

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

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

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

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

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

Во всех 16-битовых ЭВМ принимаются какие-либо меры для расширения адресного пространства памяти, т.к 16-битовый адрес позволяет адресоваться только к 64кб. Память разбивается на сегменты размером до 64кб. По умолчанию каждый сегмент начинается с границы параграфа (фрагмента памяти размером в 16 б). Физический адрес в памяти складывается из начального адреса сегмента и 16-битового смещения (исполнительного адреса, ЕА) в пределах сегмента. Для получения физического начального адреса (ФА) содержимое сегментного регистра (начальный номер параграфа) умножается на 16, т.е дополняется справа четырьмя нулями:

ФА=ННП*16+смещение.

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

Адресации обычно делят на 7 групп (способов адресации):

1) регистровая; 2) непосредственная; 3) прямая; 4)косвенная регистровая; 5) базовая; 6) прямая с индексированием; 7) адресация по базе с индексированием (базовая индексная).

Способы адресации приведены в табл.1

hello_html_m77a99c06.png

hello_html_m77a99c06.png

КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ

Описание действия команды в таблице, как правило, очень кратко и схематично и неформально раскрывается в тексте, идущей за таблицей.

hello_html_fc29b93.png

Команда копирует содержимое источника (или сам источник, если это непосредственный операнд). В приёмник. При этом источник не изменяется. Возможны различные комбинации операндов: регистр-регистр, регистр-память, память-регистр и т.д. нельзя копировать командой mov содержимое ячейки памяти в другую, т.е. недопустима команда

mov word ptr [200],[300]

примечание. Оператор PTR позволяет в одной команде изменить тип переменной, в качестве типа используется ключевые слова BYTE, WORD, DWORD.

Для этого придется воспользоваться каким-нибудь промежуточным регистром, лучше всего АХ.

mov aх,[300]

mov [200],ax

Имеются также ограничения на операции пересылки с сегментными регистрами.

hello_html_1de920b1.png

СТЕК

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

Под стек можно отвести область в любом месте памяти. Размер её может быть любым, но не должен превосходить 64кб, а её начальный адрес должен быть кратным 16. Другими словами, эта область должна быть сегментом памяти; он называется сегментом стека. Начало этого сегмента (первые 16 битов начального адреса) должно обязательно храниться в сегментном регистре SS.

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

Запись слова в стек: PUSH opt

Здесь opt обозначает любой 16-битовый регистр (в том числе и сегментный) или адрес слова памяти. По этой команде значение регистра SP уменьшается на 2 (вычитание происходит по модулю 2^16), после чего указанное операндом слово записывается в стек по адресу SS:SP.

Чтение слова из стека: POP op

Слово, считанное из вершины стека, присваивается операнду op (регистру, в том числе сегментному, но не CS, или слову памяти), после чего значение SP увеличивается на 2.


Другими словами, для реального режима процессора связка сегмента ss указателем sp. Для защищенного режима просто указатель sp указывает на вершину, следовательно, маневры с сегментом делать не нужно.

Итак, стек работает наоборот то есть с верху вниз.

Допустим, стек равен sp=20 после выполнения команды push ax он будит равен sp=18 и тд... пушим регистр dx и sp=16 при восстановление данных вынимаем все что засунули в обратном порядке так pop dx а затем только pop ax.


пример:


mov sp , 20


push ax ; сохранение данных регистра


push dx ; сохранение данных регистра


pop dx ; восстановление данных регистра


pop ax ; восстановление данных регистра


Т.е. когда мы что-нибудь «засовываем» в стек, указатель регистра sp значение уменьшается, а когда вытаскиваем – значение увеличивается, вытаскивать из стека данные нужно в обратной последовательности !




Адресация с примерами

В архитектуре МП 8086/8088 адрес любого байта задается двумя 16-битовыми словами - сегментом и смещением. При формировании 20-разрядного полного адреса, необходимого для адресации в пределах 1 Мбайт, сегмент сдвигается влево на 4 разряда (умножается на 16) и складывается со смещением. Поскольку емкость 16-разрядного смещения составляет 65536 значений, в пределах одного сегмента можно адресовать до 64 Кбайт.

Архитектура МП позволяет использовать семь различных способов адресации.

Регистровая 

Извлекает операнд из регистра или помещает его в регистр. Примеры:

mov ах,bх {Извлекаем из ВХ и помещаем в АХ} 

add cx,ax {Содержимое АХ прибавляем к СХ}

push ex {Заталкиваем в стек содержимое СХ}

Непосредственная

Операнд (8- или 16-разрядная константа) содержится непосредственно в теле команды. Примеры:

mov ax,100 {Загружаем в АХ значение 100}

add ax,5 {К содержимому АХ прибавляем 5} 

mov cx,$FFFF {Помещаем в СХ значение 65535}

Прямая

Смещение операнда задается в теле программы и складывается с регистром DS; например:

var

X: Word; В: Byte;

.......

mov ах,Х {Пересылаем значение переменной X регистр АХ} 

add ah,В {К содержимому регистра АН прибавляем значение переменной В}

mov X,ax {Пересылаем содержимое регистра АХ, в область памяти переменной X}

Косвенная регистровая

Исполнительный адрес операнда (точнее, его смещение) содержится в одном из регистров ВХ, ВР, SI или DI. Для указания косвенной адресации этот регистр должен заключаться в квадратные скобки, например:

mov ax,[bx] {Содержимое 16-разрядного слова, хранящегося в памяти по адресу DS:BX,пересылаем в регистр АХ};

Каждый из регистров BX...DI по умолчанию работает со своим сегментным регистром:

DS:BX, SS:BP, DS:SI, ES:DI

Допускается явное указание сегментного регистра, если он отличается от умалчиваемого, например:

mov ax,es:[bx]

Адресация по базе 

Базовый регистр ВХ (или ВР) содержит базу (адрес начала некоторого фрагмента памяти), относительно которой ассемблер вычисляет смещение, например:

mov ах,[Ьх]+10 {Загружаем в АХ 10-й по счету байт от начала базы памяти по адресу DS-.BX};

Индексная адресация

Один из индексных регистров SI или DI указывает положение элемента относительно начала некоторой области памяти. Пусть, например, АОВ - имя массива значений типа Byte. Тогда можно использовать такие фрагменты:

mov si,15 {Помещаем в SI константу 15}

mov ah,АОВ[si] {Пересылаем в АН 16-й по порядку байт от начала массива}

mov si,0

mov AOB[si],ah {Пересылаем полученное в самый первый элемент массива}

Адресация по базе с индексированием

Вариант индексной адресации для случая, когда индексируемая область памяти задается своей базой. Например:

mov ax,[bx][si]

Этот тип адресации удобен при обработке двумерных массивов. Если, например, АОВ есть массив из 10x10 байт вида

var

АОВ: array [0..9,0..9] of Byte;

то для доступа к элементу АОВ [2,3] можно использовать такой фрагмент

mov bx,20 {База строки 2}

mov si,2 {Номер 3-го элемента}

mov ax,AOB[bx] [si] {Доступ к элементу}

 



Задание 1. Подготовить измененное содержимое ds, es, ss. Написать нижеприведенную программу с именем lab3.asm, сделать исполняемый файл, и проследить за работой в турбоотладчике.

На основе работы программы в таблице 2, в графы 2 и 3 занести ожидаемые значения операндов:

hello_html_m3affd13c.png

hello_html_7def8538.png

hello_html_256bfdee.png

hello_html_m79d9a9f9.png

hello_html_2d7a05b3.png



Вы можете выполнить задание с помощью программы Emu8086. Дополнительная информация в файле !Emu8086.docx на сетевом диске.

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

  1. Сколько режимов адресации существует, в чем разница?

  2. Приведите общий формат команды определения данных программ на Ассемблере.

  3. Назначение команды POP и PUSH, приведите общий формат команды, приведите пример использования этой команды.

  4. Назначение оператора PTR?

  5. Для чего нужен стек в программе?

  6. Способы определения сегментов памяти?


Выберите курс повышения квалификации со скидкой 50%:

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

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