Содержание отчета. Лабораторная работа № 3. СПОСОБЫ АДРЕСАЦИИ




2.4.1 Запустить симулятор и ввести подготовленную программу.

2.4.2 Установить в выбранном регистре код для проверки программы.

2.4.3 Выполнить один цикл программы в пошаговом режиме. Результаты наблюдений заносить в таблицу типа табл. 1.4.

2.4.4 Если программа выполняется правильно установить точку останова в конце цикла. Выполнить программу в автоматическом режиме с точками останова. Состояния регистров записывать в таблицу.

2.4.5 Выполнить п. 2.4.4 для двух других значений аргумента.

2.4.6 Перенести программу в другую область памяти (использовать инструкцию блокового копирования симулятора) и повторно запустить от нового начального адреса. Убедиться, что программа исполняется правильно независимо от ее физической локализации

Содержание отчета

В отчете должны быть представлены схема алгоритма, текст программы и результаты их трассировки в форме табл.1.4.


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

СПОСОБЫАДРЕСАЦИИ

 

Краткие сведения

Синтаксис команд с двумя операндами в языке ассемблера микропроцессора 80х86 определяется следующим образом:

<команда>::=<символ операции> tab <имя регистра-приемника>,<адрес операнда-источника> |

<символ операции> tab <адрес операнда-приемника>,<имя регистра- источника>;

<имя регистра>::= AL|BL|CL|DL|AH|BH|CH|DH|AX|BX|CX|DX|SP|BP|SI|DI;

<адрес аргумента>::= <имя регистра> |!прямая регистровая адресация

<константа>|!непосредственная адресация

{<сегментный регистр>:} [адрес {+константа}]! прямая адрес. памяти

{<сегментный регистр>:} [{<базовый регистр> +}, <индексный регистр> {+<смещение>}];

! см. комментарий ниже, помеченный *)

 

<базовый регистр>::= BX|BP;

<индексный регистр>::= SI|DI;

<сегментный регистр>::= CS|SS|ES;

где “{...}” - необязательный элемент записи;

“ | “- альтернативное использование вариантов;

“; “ - разделитель определений;

tab ”- символ табуляции.

“! ”- отделение комментария в строке

 

*) a. при отсутствии поля {<сегментный регистр>:} операнд находится в текущем сегменте

б, если имеется только поле <индексный регистр> {+<смещение>} реализуется косвенная адресация

в. формат без поля {+<смещение>} задает базово-индексную адресацию, а без поля <базовый регистр> +> - относительную индексную

г. Запись адреса в “полном’ формате называют относительно-базово-индексной адресацией

 

Типичный формат машинной команды с использованием данных в памяти имеет вид:

 

операция S W   MOD REG R/M     .....    
7 2 1 0   7 6 5 4 3 2 1 0   7 0   7 0  
первый байт   второй байт   байты 3-6 -необязательны (зависит от MOD)
                       

 

В первом байте кроме операции бит S указывает, кто является приемником, а кто источником информации (если S=1, то память только источник, иначе память и приемник и источник), а бит W задает длину операнда (если W=1, то слово, иначе байт).

Во втором байте поле REG определяет регистр, участвующий в операции. Поля MOD и R/M определяют способ адресации в соответствии с таблицей:

 

 


 

MOD R/M
    01 или 10  
  (BX)+(SI)+(DS)*16 (BX)+(SI)+(DS)*16+d Память данных не используется. MOD задает дополнительные биты кода операции
  (BX)+(DI)+(DS)*16 (BX)+(DI)+(DS)*16+d
  (BP)+(SI)+(DS)*16 (BP)+(SI)+(DS)*16+d
  (BP)+(DI)+(DS)*16 (BP)+(DI)+(DS)*16+d
  (SI)+(DS)*16 (SI)+(DS)*16+d
  (DI)+(DS)*16 (DI)+(DS)*16+d
  (SI)+(DS)*16 (SI)+(DS)*16+d
  (DI)+(DS)*16 (DI)+(DS)*16+d  

 

В данной работе сложные способы адресации предполагается использовать для обработки многомерных таблиц (массивов) или при доступе до нескольких таблиц в общем цикле. Именно в таких задачах проявляется “удобство” таких способов адресации.

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

На рис.3.1.а представлен, в качестве примера, фрагмент программы “одновременного” суммирования всех элементов четырех массивов, локализованных в памяти так, как показано на рис.3.1.б. Отметим, что хотя аргументы представления байтами, суммы могут быть двухбайтные

Исходные массивы находятся в сегменте, начинающемся с адреса 4000. Для обращения к этому сегменту в указатель сегмента следует загрузить его начальный адрес сдвинутый на четыре двоичных разряда влево.

Подготовка к работе

3.2.1 Изучить способы адресации данных процессоров семейства 80х86.

3.2.2 Приготовить тексты программ и ручную прокрутку исполнения алгоритмов в соответствии с индивидуальными заданиями выбираемыми преподавателем из п.3.3.

3.2.3 Приготовить таблицы для записи результатов выполнения работы

Индивидуальные задания

Во всех заданиях вектор задается одномерным массивом.

а. Переставить элементы массива “задом наперед”.

б. Сложить два вектора с записью результата в другой сегмент.

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

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

д. Задано два массива. Каждому элементу одного массива присвоить значение большего из одноименных элементов из обоих массивов. Массивы локализованы в разных сегментах с различными смещениями.

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

ж. Подсчитать сумму диагональных коэффициентов матрицы.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: