Відповідь:
Команда SBB виконує віднімання значення правого операнда від лівого з урахуванням позики(прапорця СF) і результат поміщає в лівий операнд. В даному випадку від -57 буде віднято 54, а потім віднято 1. Результат буде записаний в регістр AL. Операцію -57-54 можна замінити операцією -57+(-54). Для цього треба представити число -54 в додатковому коді: записуємо модуль цього числа в двійковій формі: 54d= 00110110b; інвертуємо отриманий результат: 11001001b; додаємо до отриманої комбінації одиницю:
11001001
1
11001010
Зробимо перевірку: в додатковому коді значущими розрядами є нульові тобто 11001010В = 1+4+16+32=53. До отриманого результату додаємо одиницю і отримуємо 54, а оскільки знаковий розряд = 1, то маємо -54. Переведення в додатковий код виконано вірно. Таким же чином переведемо -57 в додатковий код: 57d = 00111001b; інвертуємо: 11000110b; додаємо одиницю: 11000111b. Робимо перевірку: 11000111B = 8+16+32 =56. До отриманого результату додаємо одиницю і отримуємо 57, а оскільки знаковий розряд = 1, то маємо -57. Виконуємо операцію додавання над числами в додатковому коді:
11001001
11000111
110010000
Врахуємо СF: виконаємо віднімання СF від отриманого результату:
10010000
11111111
110010001
Переведемо отриманий результат з додаткового коду в десяткову форму: 110010001b = 2+4+8+32+64=110d. Оскільки знаковий біт встановлений в 1, то отриманий результат від’ємний, тобто -110.
№27
Ручное ассемблирование команды.
Зробити ручне ассемблерування (компіляцію) команди: cmp [si + 04b8ah], 0dbbfh та отримати її машинний код. Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
Комментарий к команде: M(DS: si+04b8ah) {знак сравнения} 0dbfh
1-й байт(код операции):
Из табл. 2.2.5.3(Арифметические команды) №26: CMP = r/m-data
100000sw; т.к. data(0dbbfh)=2 байта , то w=1 s=0 => 10000001 = 81h
2-й байт(постбайт):
md111 r/m
из рис. 2.2.5.2: т.к. при вычислении эффективного адреса в команде используется 16-ти разрядное смещение (disp16=0001h), то mod(md)=10
Поле r/m, тоже берём из рисунка 2.2.5.1: r/m=100
10111100b = BCh
3-й байт(младший байт смещения disp16):BF
4-й байт(старший байт смещения disp16):DB
5-й байт (младший байт смещения)8A
6-й байт (старший байт смещения)4B
Машинный код команды: 81 BC BF DB 8A 4B
Длина команды: 6 байт.
Способы адресации операндов:
Левый операнд: Индексная со смещением
Правый операнд: Непосредственная
Время выполнения команды
Время выполнения в тактах:
nТ=(n+Tиа)=17+Tиа,
Tиа=7; тогда nТ=17+9=26 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ =nТ*tТ=26*10-8=0,26 мкс,
где tТ=1/fТ=1/100000000=10-8.
Ручное дизассемблирование команды.
Задание: Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: 81 A8 13 B6 9D E2 та отримати мнемокод команди; Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується для зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
Длина команды: 6 байта.
1-й байт(код операции):
81h = 100000sw = 10000001b => s=0, w=1; SUB=r/m < r/m - data
2-й байт(постбайт):
A8 = 10101000b
Md = 10 => disp – 16 разрядов
r/m = 000 => (BX)+(SI)+disp16
3-й байт(смещение disp8)
13h = 00010011b – младший байт данных
4-й байт
В6 = 10110110b – старший байт данных
5-й байт
9D = 10011101b – Low Disp
6-й байт
E2 = 11100010b – High Disp
Мнемоника команды: SUB [bx + si + e29dh], b613h
Способы адресации операндов:
Базово-индексная со смещением.
Время выполнения
Время выполнения в тактах:
nТ=(n+Tиа)=4/17+Tиа,
nТ=4/17 + 11= 12 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=12*10-8=0,12 мкс, где
tТ=1/fТ=1/100000000=10-8.
Навести команду мікропроцесора ix86 та сформувати 8-розрядне число (data = 8 біт), за допомогою якого біти №1, 4, 6, 8 акумулятора AL можна скинути в “0”. Інші біти AL залишити без змін. Відповідь пояснити.
Для скидання бітів двійкового числа в «0» використовується операція AND. Першим операндом команди буде 8-и бітний регістр AL, другим – безпосереднє число, маска для скидання. Оскільки необхідно інвертувати біти 1, 4, 6, 8 то маска буде мати вигляд 01010110. Нехай в регістрі AL записана наступна комбінація: ХХХХХХХХ. Виконаємо команду AND AL,00100111:
Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 93. Відповідь пояснити.
Відповідь:
Мікропроцесор іх86 має векторну (адресну) систему переривань із зовнішніми і внутрішніми джерелами запитів. Кожне джерело має свій “тип” – номер “входу” у таблицю векторів (адрес) оброблювачів переривань, за яким МП знаходить відповідну підпрограму обслуговування переривання. Таблиця векторів має 256 входів з номерами від 0D до 255 D і займає перші 1024 байти пам'яті – по чотири байти на кожен тип запиту (256х4 = 1024). Оскільки таблиця переривань знаходиться починаючи з нульових адрес в сегменті коду то старші 10 розрядів фізичної адреси представляють собою нулі. Молодші 10 розрядів фізичної адреси входу в таблицю переривань визначаються зсувом на 2 розряди вліво(множення на 4) номеру переривання. Так для 93-ого переривання молодші 10 розрядів фізичної адреси знаходимо як 93*4 = 372d = 101110100b. Таким чином повна 20-и розрядна фізична адреса обробника 91-ого переривання має вигляд: 00000000000 101110100b.
Виконати функцію МП-ра ix86 та отримати результат виконання команди SBB AL,data8, якщо перед виконанням команди операнди, які являють собою числа зі знаком мають наступні значення: AL = -73, data8 = 3, CF = 1. Відповідь пояснити.