Відповідь:
Мікропроцесор іх86 має векторну (адресну) систему переривань із зовнішніми і внутрішніми джерелами запитів. Кожне джерело має свій “тип” – номер “входу” у таблицю векторів (адрес) оброблювачів переривань, за яким МП знаходить відповідну підпрограму обслуговування переривання. Таблиця векторів має 256 входів з номерами від 0D до 255 D і займає перші 1024 байти пам'яті – по чотири байти на кожен тип запиту (256х4 = 1024). Оскільки таблиця переривань знаходиться починаючи з нульових адрес в сегменті коду то старші 10 розрядів фізичної адреси представляють собою нулі. Молодші 10 розрядів фізичної адреси входу в таблицю переривань визначаються зсувом на 2 розряди вліво(множення на 4) номеру переривання. Так для 30-ого переривання молодші 10 розрядів фізичної адреси знаходимо як 97*4 = 120D = 110000100В. Таким чином повна 20-и розрядна фізична адреса обробника 97-ого переривання має вигляд: 00000000000110000100В.
5) Виконати функцію МП-ра ix86 та отримати результат виконання команди SBB AL,data8, якщо перед виконанням команди операнди, які являють собою числа зі знаком мають наступні значення: AL = -63, data8 = 7, CF = 1. Відповідь пояснити.
Відповідь:
Команда SBB виконує віднімання значення правого операнда від лівого з урахуванням позики(прапорця СF) і результат поміщає в лівий операнд. В даному випадку від -63 буде віднято 7, а потім віднято 1. Результат буде записаний в регістр AL. Операцію -63-7 можна замінити операцією -63+(-7). Для цього треба представити число -7 в додатковому коді: записуємо модуль цього числа в двійковій формі: 7D= 00000111B; інвертуємо отриманий результат: 11111000В; додаємо до отриманої комбінації одиницю:
11111000
1
11111001
Зробимо перевірку: в додатковому коді значущими розрядами є нульові тобто 11111001В = 2+4=6. До отриманого результату додаємо одиницю і отримуємо 7, а оскільки знаковий розряд = 1, то маємо -7. Переведення в додатковий код виконано вірно. Таким же чином переведемо -63 в додатковий код: 63D = 00111111B; інвертуємо: 11000000В; додаємо одиницю: 11000001B. Робимо перевірку: 11000001B = 2+4+8+16+32=62. До отриманого результату додаємо одиницю і отримуємо 63, а оскільки знаковий розряд = 1, то маємо -63. Виконуємо операцію додавання над числами в додатковому коді:
11111001
11000001
110111010
Врахуємо СF: виконаємо віднімання СF від отриманого результату:
10111010
11111111
110111001
Переведемо отриманий результат з додаткового коду в десяткову форму: 100111001В = 2+4+64+1=71D. Оскільки знаковий біт встановлений в 1, то отриманий результат від’ємний, тобто -71.
№30
Зробити ручне ассемблерування (компіляцію) команди: xor [si + 0d2c5h], 0dd15h та отримати її машинний код. Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
Коментар: M(DSx16+si+0d2c5h)<- M(DSx16+si+0d2c5h) 0dd15h
XOR |
r/m r/mdata |
1000000w |
md110 r/m |
data L |
data H, w=1 |
3...6 |
4/17+Тва |
1-й байт(код операции):
10000001 = 81h (w=1 // операнд 2 байта);
2-й байт(постбайт):
10 – mod (disp – 16 розрядов);
110 – уже указано в таблице;
100 – reg/mem: (SI)+disp
Получаем второй байт: 10110100 = B4h
3-й байт(смещение disp16):
C5D2h.
4-й байт(непосредственный 16-и разрядный операнд):
15DD.
Машинный код команды: 81B4C5D215DD
Способы адресации операндов:
Левый операнд – индексная, SI+data16.
Правый операнд – непосредственная, DD15h – непосредственный 16-и битный операнд.
Время выполнения в тактах:
nТ=(n+Tиа)=8+Tиа, где Tиа – время вычисления эффективного адреса: EA=DI+disp16.
По таблице 11 находим, что Tиа=9, тогда nТ=8+9=17 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=17*10-8=0,17 мкс, где
tТ=1/fТ=1/100000000=10-8.
Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: 81 BD 8C 7F 1F DD та отримати мнемокод команди; Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується для зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
81 BD 8C 7F 1F DD – 6 байт
1-ый:
81h = 10000001 – AND/XOR (REG – 111 значит AND)
AND |
r/m r/m&data |
1000000w |
md100 r/m |
data L |
data H, w=1 |
3...6 |
4/17+Тва |
2-ой:
BDh = 10(disp 16)111(DI-приемник)101 – DI+(disp)
3,4-ый:
7F8Сh - disp
5,6 –ой:
DD1Fh – правый операнд.
Мнемоника команды: AND [DI+07F8Ch], 0DD1Fh
Адрессация операндов:
левый – индексная
правый – непосредственная
Время выполнения в тактах:
nТ=(n+Tиа)=8+Tиа, где Tиа – время вычисления эффективного адреса: EA=DI+disp16.
По таблице 11 находим, что Tиа=9, тогда nТ=8+9=17 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=17*10-8=0,17 мкс, где
tТ=1/fТ=1/100000000=10-8.
Навести команду мікропроцесора ix86 та сформувати 8-розрядне число (data = 8 біт), за допомогою якого біти старшої тетради акумулятора AL можна скинути в “0”. Інші біти AL залишити без змін. Відповідь пояснити.
AND AL,0Fh
//XXXXXXXX*00001111=0000XXXX
Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 99. Відповідь пояснити.
Відповідь:
Мікропроцесор іх86 має векторну (адресну) систему переривань із зовнішніми і внутрішніми джерелами запитів. Кожне джерело має свій “тип” – номер “входу” у таблицю векторів (адрес) оброблювачів переривань, за яким МП знаходить відповідну підпрограму обслуговування переривання. Таблиця векторів має 256 входів з номерами від 0D до 255 D і займає перші 1024 байти пам'яті – по чотири байти на кожен тип запиту (256х4 = 1024). Оскільки таблиця переривань знаходиться починаючи з нульових адрес в сегменті коду то старші 10 розрядів фізичної адреси представляють собою нулі. Молодші 10 розрядів фізичної адреси входу в таблицю переривань визначаються зсувом на 2 розряди вліво(множення на 4) номеру переривання. Так для 30-ого переривання молодші 10 розрядів фізичної адреси знаходимо як 99*4 = 396D = 0110001100В. Таким чином повна 20-и розрядна фізична адреса обробника 30-ого переривання має вигляд: 00000000000110001100В.
Виконати функцію МП-ра ix86 та отримати результат виконання команди SBB AL,data8, якщо перед виконанням команди операнди, які являють собою числа зі знаком мають наступні значення: AL = -91, data8 = 9, CF = 1. Відповідь пояснити.
Команда SBB виконує віднімання значення правого операнда від лівого з урахуванням позики(прапорця СF) і результат поміщає в лівий операнд. В даному випадку від -91 буде віднято 9, а потім віднято 1. Результат буде записаний в регістр AL. Операцію -91-9 можна замінити операцією -91+(-9). Для цього треба представити число 91 та 9 в додатковому коді: записуємо модуль цього числа в двійковій формі, інвертуємо отриманий результат, додаємо до отриманої комбінації одиницю.
доп. -91 = 10100101
доп. -9 = 11110111
доп. -1 = 11111111 (для CF)
10100101 - (-91-9=-100 в доп.)
1 1110111
10011100
11111111
1 0011011 = 01100101 = 101D по модулю, оскільки перший -1, то -101
[Введите текст]
