Материал: Методические указания к выполнению лабораторных работ по дисциплине «Аппаратные средства вычислительной техники» для студентов специальности «Компьютерная безопасность». Ермаков С.А., Остапенко А.Г

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Непосредственная адресация. Адрес «запрятан» в коде операции. Очевидный пример: mod=11, значит приемник - это регистр, номер которого указывается в COP.

Прямая адресация. Следом за COP должен следовать адрес ячейки памяти (сначала младший байт, затем - старший). Таким образом, в машинном коде сразу виден адрес приемника.

В таблице 13: mod=00, reg/mem=110.

Косвенная адресация. В коде операции указывается источник (хранилище) адреса ячейки памяти. Пример: mod=00, reg/mem=100, 101, 111. Во всех этих случаях адрес приемника автоматически будет извлекаться из регистра SI, DI или ВХ. Прежде чем обратиться к ячейке памяти, адрес этой ячейки надо загрузить в соответствующий регистр.

Относительная адресация. В этом случае вместо прямого адреса следом за кодом операции располагают смещение (disp). Это смещение (в табл. 13 однобайтное смещение обозначено как D1, а двухбайтное - как D2) складывается с текущим адресом, который может храниться в ВР, ВХ, SI, DI. Причем, это смещение со знаком (старший разряд выступает в качестве знакового бита), поскольку смещение может быть как вперед, так и назад, и в дополнительном коде [3].

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

Также конечный адрес в самом сложном случае может формироваться как сумма двух регистров и смещения (напри-

мер, mod=01, mod=10, и reg/mem=000...011).

В команде MOV, если приемником может быть и регистр МП, и ячейка ЗУ, то источником - только регистр. Чтобы сделать источником ячейку памяти в COP отводится один разряд D9 для изменения направления пересылки (d - down - вниз). Если d=0, то направление не меняется: dst остается приемником, a src — источником. Если же d=l, то направление переворачивается в обратную сторону, то есть src - становится приемником, a dst - источником.

44

Рассмотрим пример по синтезу машинной команды, которая осуществляет перемещение содержимого регистра BL

врегистр AL (кратко: <A>:=<BL L >):

-w=0(1 бaйт) - пересылается информация размером в 1

байт;

-d=0 (направление не меняется);

-src=011 (адрес регистра BL — из табл. 12);

-dst=l 1 000 (mod=11— из табл. 13; reg/mem=reg=000 -

адрес регистра AL —из табл. 12).

Рис. 11. Машинный формат команды MOV AL, BL

Разбиваем команду в машинном формате на тетрады и переводим в шестнадцатеричный код. Получается, что вся команда состоит из двух байт: 88 D8.

Задачи :

1.Переслать содержимое регистра R1 в регистр R2 (табл. 14). Кратко: <R2>:=< R1>. Ассемблер: MOV R2, R1;

2.Отправить в ячейку памяти с адресом A1 содержимое регистра R3. Кратко: МА1: =<R3>. Ассемблер: MOV [A1],R3.

3.Отправить в ячейку памяти с адресом A2 значение

D1. Кратко: MAI. =D1. Ассемблер :MOV BYTE [A2],D1;

4.Отправить в 2 ячейки памяти по адресу A3 два байта D2. Кратко: МА3: =D2. Ассемблер: MOV WORD [A3],D2.

45

Таблица 14

Варианты заданий

Порядок выполнения работы :

1. Согласно варианту задания сформировать машинный

код.

2. Запустите программу DEBUG.exe. Для ОС Windows XP и Vista выполните следующие действия:

-в меню «Пуск» выберите команду «Выполнить»;

-наберите в командной строке «cmd» для запуска командного интерпретатора;

-наберите команду debug в командном интерпретаторе, для запуска отладчика.

3. Занесите в память по смещению 100 машинный код при помощи следующей команды:

46

e 100 <COP>,

где <COP> - это машинный код команды в шестнадцатеричной системе счисления; 100 - относительный адрес.

Пример команды: -e 100 88 D8. Байты команды необходимо отделять друг от друга пробелами.

4.Значения большинства регистров в среде debug при первоначальном запуске равны нулю. Чтобы увидеть перемещение данных из одного регистра в другой командой -r устанавливаем значение регистров. Команда -r без параметров показывает содержимое всех регистров (в том числе и регистра флагов). Команда -r <reg> показывает содержимое регистра «reg» и позволяет установить новое значение в шестнадцатеричном коде (новое значение вводится после двоеточия). Причем обращение к 8-разрядным регистрам, например, к AL и BH напрямую невозможно. Можно изменить только 16-разрядные регистры, такие как AX и BX.

5.Осуществите пошаговое выполнение команды в основной памяти по смещению 100 при помощи команды -t =100. Не пропустите знак «=», иначе отладчик выполнит не одну команду, которая размещена по адресу 100, а 100 команд, начиная с текущего адреса.

6.Просмотрите содержимое регистров при помощи команды r. Убедитесь, что закодированная в машинный формат команда, выполняет действие в пункте 1.

7.Выполните пункты 1-4 для второго задания из раздела заданий. Для просмотра содержимого памяти по определенному адресу выполните команду:

-d <addr>,

где d -команда отладчика debug для просмотра содержимого участка памяти; addr - адрес начала участка памяти. Можно указывать как полный адрес, указав сегмент и смещение, или указывать только смещение от начала сегмента. В данной работе достаточно использовать только смещение, так как все сегменты сопоставлены на один и тот же блок памяти.

47

При выполнении данной команды на экран выдается 8 строк по 16 байт. Убедитесь, что команда перемещает содержимое регистра R3 в ячейки ОЗУ с адресом A1.

6. Выполните аналогичные действия для заданий 3 и 4 раздела заданий. Для занесения исходных данных в память, которые будут перемещаться при выполнении команды в машинном формате, используйте команду -e в отладчике.

7. Оформите отчет по работе. В отчете должно содержаться:

-цель работы;

-задание;

-машинные форматы команд для каждого пункта за-

дания;

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

-выводы по работе.

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

1.Чем отличается представление команд в машинном формате от символьного представления?

2.Сколько байт максимально может содержать команда

вмашинном формате МП 8086? Сколько минимально?

3.Каково назначение основных полей команды MOV

МП8086?

4.За что отвечает поле d в команде MOV?

5.Какое будет значение поля w («0» или «1»)в машинном формате команды перемещения, если в качестве источника используется регистр AL?

6.Какие функции выполняет поле mod?

7.Какая комбинация полей mod и reg/mem определяет косвенную адресацию?

8.Что делает команда -e в среде debug?

9.Как просмотреть содержимое памяти по смещению

500 в среде debug?

48

Источник: https://studfile.net/preview/16565265/