Відповідь:
Команда SBB виконує віднімання значення правого операнда від лівого з урахуванням позики(прапорця СF) і результат поміщає в лівий операнд. В даному випадку від -105 буде віднято 10, а потім віднято 1. Результат буде записаний в регістр AL. Операцію -105-10 можна замінити операцією -105+(-10). Для цього треба представити число -10 в додатковому коді: записуємо модуль цього числа в двійковій формі: 10D= 00001010B; інвертуємо отриманий результат: 11110101В; додаємо до отриманої комбінації одиницю:
11110101
1
11110110
Зробимо перевірку: в додатковому коді значущими розрядами є нульові тобто 11110110В = 1+8=9. До отриманого результату додаємо одиницю і отримуємо 10, а оскільки знаковий розряд = 1, то маємо -10. Переведення в додатковий код виконано вірно. Таким же чином переведемо -105 в додатковий код: 105D = 0110 1001B; інвертуємо: 1001 0110В; додаємо одиницю: 10010111B. Робимо перевірку: 11110001B = 8+32+64=104. До отриманого результату додаємо одиницю і отримуємо 105, а оскільки знаковий розряд = 1, то маємо -105. Виконуємо операцію додавання над числами в додатковому коді:
11110110
10010111
110001101
Врахуємо СF: виконаємо віднімання СF від отриманого результату:
10001101
11111111
110001100
Переведемо отриманий результат з додаткового коду в десяткову форму: 10001100В = 1+2+16+32+64+1=115D. Оскільки знаковий біт встановлений в 1, то отриманий результат від’ємний, тобто -115.
№25
Зробити ручне ассемблерування (компіляцію) команди: adc [bx + si + 0c7bdh], 034fdh та отримати її машинний код. Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
Комментарий к команде:
M(DS: bx + si + 0c7bdh) ¬ M(DS: bx + si + 0c7bdh) + M(DS: 034fdh) + CF
1-й байт(код операции):
из табл. 4 находим КОП 10000001b = 81h, ; sw=01;
2-й байт(постбайт):
10 – mod: поле mod=10, т.к. при вычислении эффективного адреса в команде используется 16-ти разрядное смещение(disp16=0c7bdh);
010
000 – reg/mem: поле reg/mem задает способ вычисления эффективного адреса второго операнда(источника) в сегменте данных EA=BX+SI+disp16=BX+SI+0c7bdh.
Получаем второй байт: 10010000b=90h.
3-й байт(младший байт данных):
FDh.
4-й байт(старший байт данных):
34h.
5-й байт(младший байт смещения адресуемой переменной в сегменте данных):
BDh.
6-й байт(старший байт смещения адресуемой переменной в сегменте данных):
C7h.
Машинный код команды: 81 90 FD 34 BD C7
Длина команды: 6 байт.
Способы адресации операндов:
Левый операнд – базово-индексная со смещением. BX – база, SI – индекс, 0c7bdh – смещение.
Правый операнд – непосредственная, 034FDh – непосредственный 16-и битный операнд.
Время выполнения команды
Время выполнения в тактах:
nТ=(n+Tиа)=17+Tиа, где Tиа – время вычисления эффективного адреса: EA=BX+SI+0C7BDh.
По таблице 2 (лекция№ 6) находим, что для базово-индексной адресации со смещением Tиа=11, тогда nТ=17+11=28 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=28*10-7=2,8 мкс, где
tТ=1/fТ=1/10000000=10-7.
Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: 81 90 DH C7 BB 34 (опечатка!!! DH не может быть, F-макс. цифра в 16-й системе поэтому юзаем DF)та отримати мнемокод команди; Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується для зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
1-й байт(код операции):
10000001b=81h – содержится в табл. 4(Лекция 7), №7– ADС r/m r/m+data+CF, поле sw=01, т.е. операнд 16-и разрядный.
2-й байт(постбайт):
10010000b=90h, где
10 – mod: смещение для вычисления эффективного адреса в команде 16-и разрядное;
010 – расширение КОП;
000 – reg/mem, mod=10: EA=BX+SI+disp16, т.е. способ адресации переменной – базово-индексная со смещением.
3-й байт(младший байт операнда-данных)
DFh.
4-й байт(старший байт операнда-данных)
С7h.
5-й байт(младший байт смещения адресуемой переменной в сегменте данных):
BBh.
6-й байт(старший байт смещения адресуемой переменной в сегменте данных):
34h.
Мнемоника команды: adc [bx+si+34BBh], C7DFh
Комментарий к команде: [bx+si+34BBh] [bx+si+34BBh] + C7DFh + CF
Способы адресации операндов:
Левый операнд – базово-индексная со смещением. BX – база, SI – индекс, 34BBh – смещение.
Правый операнд – непосредственная, C7DFh – непосредственный 16-и битный операнд.
Время выполнения команды
Время выполнения в тактах:
nТ=(n+Tиа)=17+Tиа, где Tиа – время вычисления эффективного адреса: EA=BX+SI+34BBh.
По таблице 2 (лекция№ 6) находим, что для базово-индексной адресации со смещением Tиа=11, тогда nТ=17+11=28 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=28*10-7=2,8 мкс, где
tТ=1/fТ=1/10000000=10-7.
Навести команду мікропроцесора ix86 та сформувати 8-розрядне число (data = 8 біт), за допомогою якого біти №1, 2, 7, 8 акумулятора AL можна скинути в “0”. Інші біти AL залишити без змін. Відповідь пояснити.
Скинути біти в 0 можна за допомогою команди AND. 8-розрядне число: 00111100.
Таким чином біти №1, 2, 7, 8 множаться на 0, а інші залишаються без змін.
Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 89. Відповідь пояснити.