Відповідь:
Команда 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
Зробити ручне ассемблерування (компіляцію) команди: 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.
Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: 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.
Навести команду мікропроцесора 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
Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 95. Відповідь пояснити.
Відповідь:
Мікропроцесор іх86 має векторну (адресну) систему переривань із зовнішніми і внутрішніми джерелами запитів. Кожне джерело має свій “тип” – номер “входу” у таблицю векторів (адрес) оброблювачів переривань, за яким МП знаходить відповідну підпрограму обслуговування переривання. Таблиця векторів має 256 входів з номерами від 0D до 255 D і займає перші 1024 байти пам'яті – по чотири байти на кожен тип запиту (256х4 = 1024). Оскільки таблиця переривань знаходиться починаючи з нульових адрес в сегменті коду то старші 10 розрядів фізичної адреси представляють собою нулі. Молодші 10 розрядів фізичної адреси входу в таблицю переривань визначаються зсувом на 2 розряди вліво(множення на 4) номеру переривання. Так для 95-ого переривання молодші 10 розрядів фізичної адреси знаходимо як 95*4 = 380D = 0101111100В. Таким чином повна 20-и розрядна фізична адреса обробника 95-ого переривання має вигляд: 00000000000101111100В.
Виконати функцію МП-ра ix86 та отримати результат виконання команди SBB AL,data8, якщо перед виконанням команди операнди, які являють собою числа зі знаком мають наступні значення: AL = -82, data8 = 5, CF = 1. Відповідь пояснити.
