Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕМСТ_Шпора(ALL).docx
Скачиваний:
2
Добавлен:
13.09.2019
Размер:
1 Мб
Скачать
☆

Відповідь:

Команда SBB виконує віднімання значення правого операнда від лівого з урахуванням позики(прапорця СF) і результат поміщає в лівий операнд. В даному випадку від -73 буде віднято 3, а потім віднято 1. Результат буде записаний в регістр AL. Операцію:

-73-3 можна замінити операцією -73+(-3). Для цього треба представити число -3 в додатковому коді: записуємо модуль цього числа в двійковій формі: 3d= 00000011b; інвертуємо отриманий результат: 11111100b; додаємо до отриманої комбінації одиницю:

11111100

1

11111101

Зробимо перевірку: в додатковому коді значущими розрядами є нульові тобто 11111101В = 2. До отриманого результату додаємо одиницю і отримуємо 3, а оскільки знаковий розряд = 1, то маємо -3. Переведення в додатковий код виконано вірно. Таким же чином переведемо -73 в додатковий код: 73d = 01001001b; інвертуємо: 10110110 b; додаємо одиницю: 10110111 b. Робимо перевірку: 10110111 B = 8+64 = 72. До отриманого результату додаємо одиницю і отримуємо 73, а оскільки знаковий розряд = 1, то маємо -73. Виконуємо операцію додавання над числами в додатковому коді:

11111100

10110110

110110010

Врахуємо СF: виконаємо віднімання СF від отриманого результату:

110110010

11111111

10110011

Переведемо отриманий результат з додаткового коду в десяткову форму: 10110011 b = 4+8+64 = 76 d. Оскільки знаковий біт встановлений в 1, то отриманий результат від’ємний, тобто -76.

Вариант 28

  1. Зробити ручне ассемблерування (компіляцію) команди: add [bp + di + 0fab5h], 0c4fdh та отримати її машинний код. Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).

Задание: add [bp + di + 0fab5h], 0c4fdh;

Комментарий к команде: M(DS: bp + di + 0fab5h)←M(DS: bp + di + 0fab5h) +0c4fdh

1-й байт(код операции):

из табл. комманд, № 7 находим КОП 10000001b=81h, w=1, s=0 т. к. длина операнда 16 бит.

2-й байт(постбайт):

10 – mod: поле mod=10, т.к. при вычислении эффективного адреса в команде используется 16-ти разрядное смещение(disp16=0fab5h);

000 – reg: поле reg содержит расширение КОП (1-й байт);

011 – reg/mem: поле reg/mem =011, т.к. способ вычисления адреса левого(первого) операнда в сегменте данных: (BP)+(DI)+disp16.

Получаем второй байт: 10000011=83h.

3-й байт(dispLow):b5h.

4-й байт(dispHigh):fah

5-й байт(dataLow):fdh

6-й байт(dataHigh):c4h

Машинный код команды: 81 83 B5 FA FD C4

Длина команды: 6 байта.

Способы адресации операндов:

Левый операнд – базово-индексная, где BP – база, DI – индексное смещение, 0fab5h – смещение относительно базы.

Правый операнд – непосредственная, 0c4fdh – непосредственный 16-и битный операнд.

Время выполнения команды

Время выполнения в тактах:

nТ=(n+Tиа)= 4/17+TИА, где Tиа – время вычисления эффективного адреса: EA= BP + DI + 0fab5h.

По таблице 11 находим, что для базовой адресации Tиа=11, тогда nТ=4/17+11=191/17 тактов.

Время выполнения команды в секундах:

Tk=(n+Tиа)*tТ=nТ*tТ=191/17 *10-7=1,1 мкс, где

tТ=1/fТ=1/10000000=10-7.

  1. Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: 81 81 9A BC F9 B1 та отримати мнемокод команди; Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується для зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).

Задание: 81 81 9A BC F9 B1

Длина команды: 6 байт.

1-й байт(код операции):

1000 0001b=81h – ADD (r/m←r/m+data), поле w=1, т.е. операнд 16-ми разрядный.

2-й байт(постбайт):

1000 0001b =81h, где

10 – mod: при вычислении эффективного адреса в команде используется 16-ти разрядное смещение(disp16=0bc9ah);

000 – reg

001 – reg/mem, mod=10: левый операнд – (BX)+(DI)+disp16

3-й байт(dispLow):9A

4-й байт(dispHigh):BC

5-й байт(dataLow):F9

6-й байт(dataHigh):B1

Мнемоника команды: ADD [BX+DI+0BC9Ah], 0B1F9h

Адрессация операндов:

левый – базово-индексная, где BX-база, DI – индекс смещения, 0BC9Ah – смещение

правый – непосредственная, 0B1F9h – непосредственное значение

Комментарий к команде: M(ES: BX+DI+0BC9Ah) <- M(ES: BX+DI+0BC9Ah) + 0B1F9h

Время выполнения

Время выполнения в тактах:

nТ=(n+Tиа)= 4/17+ТИА, где Tиа – время вычисления эффективного адреса: EA=(BX)+(DI)+disp16.

По таблице 11 находим, что Tиа=12, тогда nТ=4/17+12=208/17 тактов.

Время выполнения команды в секундах:

Tk=(n+Tиа)*tТ=nТ*tТ=208/17*10-7=1,6 мкс, где

tТ=1/fТ=1/10000000=10-7.

  1. Навести команду мікропроцесора ix86 та сформувати 8-розрядне число (data = 8 біт), за допомогою якого біти №2, 3, 5, 6 акумулятора AL можна скинути в “0”. Інші біти AL залишити без змін. Відповідь пояснити.

Відповідь:

Для зміни 2, 3, 5, 6 в нуль ми будемо використовувати операцію AND(логічне множення). Оскільки необхідно скинути в нуль біти №2, 3, 5, 6 то маска буде мати вигляд 10010011.

Команда: AND AL, 10010011

Перевірка:

1 1 1 1 1 1 1 1

1 0 0 1 0 0 1 1

1 0 0 1 0 0 1 1

  1. Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 95. Відповідь пояснити.

Відповідь:

Мікропроцесор іх86 має векторну (адресну) систему переривань із зовнішніми і внутрішніми джерелами запитів. Кожне джерело має свій “тип” – номер “входу” у таблицю векторів (адрес) оброблювачів переривань, за яким МП знаходить відповідну підпрограму обслуговування переривання. Таблиця векторів має 256 входів з номерами від 0D до 255 D і займає перші 1024 байти пам'яті – по чотири байти на кожен тип запиту (256х4 = 1024). Оскільки таблиця переривань знаходиться починаючи з нульових адрес в сегменті коду то старші 10 розрядів фізичної адреси представляють собою нулі. Молодші 10 розрядів фізичної адреси входу в таблицю переривань визначаються зсувом на 2 розряди вліво(множення на 4) номеру переривання. Так для 95-ого переривання молодші 10 розрядів фізичної адреси знаходимо як 95*4 = 380D = 0101111100В. Таким чином повна 20-и розрядна фізична адреса обробника 95-ого переривання має вигляд: 00000000000101111100В.

  1. Виконати функцію МП-ра ix86 та отримати результат виконання команди SBB AL,data8, якщо перед виконанням команди операнди, які являють собою числа зі знаком мають наступні значення: AL = -82, data8 = 5, CF = 1. Відповідь пояснити.