Відповідь:
Команда SBB виконує віднімання значення правого операнда від лівого з урахуванням позики(прапорця СF) і результат поміщає в лівий операнд. В даному випадку від -82буде віднято 5, а потім віднято 1. Результат буде записаний в регістр AL. Операцію -82-5 можна замінити операцією -82+(-5). Для цього треба представити число -82 в додатковому коді: записуємо модуль цього числа в двійковій формі: 5D= 00000101B; інвертуємо отриманий результат: 11111010В; додаємо до отриманої комбінації одиницю:
11111010
1
11111011
Зробимо перевірку: в додатковому коді значущими розрядами є нульові тобто 11111011В = 4. До отриманого результату додаємо одиницю і отримуємо 5, а оскільки знаковий розряд = 1, то маємо -5. Переведення в додатковий код виконано вірно. Таким же чином переведемо -82 в додатковий код: 82D = 01010010B; інвертуємо: 10101101В; додаємо одиницю: 10101110B. Робимо перевірку: 10101110B = 1+16+64=81. До отриманого результату додаємо одиницю і отримуємо 82, а оскільки знаковий розряд = 1, то маємо -82. Виконуємо операцію додавання над числами в додатковому коді:
11111011
10101110
110101001
Врахуємо СF: виконаємо віднімання СF від отриманого результату:
110101001
00000001
110101000
Переведемо отриманий результат з додаткового коду в десяткову форму: 110101000В = 1+2+4+16+64=62D. Оскільки знаковий біт встановлений в 1, то отриманий результат від’ємний, тобто -87.
№29
1) Зробити ручне ассемблерування (компіляцію) команди: mov [bx + si + 0d5dch], 0d3beh та отримати її машинний код. Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
Відповідь:
Комментарий к команде: M(DS:BX+SI+0D5DCh) ←0D3BEh
1-й байт(код операции):
из табл. комманд, № 7 находим КОП 11000111b=C7h, w=1, т. к. длина операнда 16 бит.
2-й байт(постбайт):
10 – mod: поле mod=10, т.к. при вычислении эффективного адреса в команде используется 16-ти разрядное смещение(disp16=0d5dch);
000 – reg: поле reg содержит расширение КОП (1-й байт);
000 – reg/mem: поле reg/mem = 000, т.к. способ вычисления адреса левого(первого) операнда в сегменте данных: ЕА=BX+SI+disp= BX+SI+0D5DCh.
Получаем второй байт: 10000000=80h.
3-й байт(dispLow):dch
4-й байт(dispHigh):d5h
5-й байт(dataLow):beh
6-й байт(dataHigh):d3h
Машинный код команды: C7 80 DC D5 BE D3
Длина команды: 6 байта.
Способы адресации операндов:
Левый операнд – базово-индексная со смещением, где BX – база, SI – индекс, 0d5dch – смещение.
Правый операнд – непосредственная, 0d3beh – непосредственный 16-и битный операнд.
Время выполнения команды
Время выполнения в тактах:
nТ=(n+Tиа)=10+Tиа, где Tиа – время вычисления эффективного адреса: EA= BX+SI+disp
По таблице 11 находим, что для базовой адресации Tиа=11, тогда nТ=10+11=21 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=21*10-8=0,21 мкс, где
tТ=1/fТ=1/100000000=10-8.
2) Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: F7 80 3D F2 00 00 та отримати мнемокод команди; Привести коментар до вказаної команди; назвати способи адресації операндів, що в ній використовуються; розрахувати час виконання команди при fT=10 МГц та обсяг пам’яті, яка використовується для зберігання машинного коду команди; навести розташування команди у пам’яті (сегмент, зміщення).
Відповідь:
Задание: F7 80 3D F2 00 00
Длина команды: 6 байт.
1-й байт(код операции):
1111 0111b=F7h – TEST (r/m & data), поле w=1, т.е. операнд 16-ми разрядный.
2-й байт(постбайт):
1000 0000b=80h, где
10 – mod: при вычислении эффективного адреса в команде используется 16-ти разрядное смещение(disp16=0F23Dh);
000 – reg
000 – reg/mem, mod=10: левый операнд – BX+SI+disp
3-й байт(dispLow):3D
4-й байт(dispHigh):F2
5-й байт(dataLow):00
6-й байт(dataHigh):00
Мнемоника команды: TEST [BX+SI+0F23Dh], 00000h
Способы адресации операндов:
Левый операнд – базово-индексная со смещением, где BX – база, SI – индекс, 0F23Dh – смещение.
Правый операнд – непосредственная, 00000h – непосредственный 16-и битный операнд.
Комментарий к команде: M(BX+SI+0F23Dh) &00000h
В ремя выполнения
Время выполнения в тактах:
nТ=(n+Tиа)=10+Tиа, где Tиа – время вычисления эффективного адреса: EA= BX+SI+disp16.
По таблице 11 находим, что Tиа=11, тогда nТ=10+11=21 тактов.
Время выполнения команды в секундах:
Tk=(n+Tиа)*tТ=nТ*tТ=21*10-8=0,21 мкс, где
tТ=1/fТ=1/100000000=10-8.
3) Навести команду мікропроцесора ix86 та сформувати 8-розрядне число (data = 8 біт), за допомогою якого біти молодшої тетради акумулятора AL можна скинути в “0”. Інші біти AL залишити без змін. Відповідь пояснити.
Відповідь:
Для скидання бітів двійкового числа використовується операція логічного І. В мові асемблера їй відповідає команда AND. Першим операндом команди буде 8-и бітний регістр AL, другим – безпосереднє число, маска для інвертування. Оскільки необхідно скинути в нуль біти молодшої тетради( тобто 0-й,1-й,2-й,3-й) то маска буде мати вигляд 11110000. Нехай в регістрі AL записана наступна комбінація: ХХХХХХХХ. Виконаємо команду AND AL, 11110000:
X X X X X X X X
1 1 1 1 0 0 0 0
X X X X
Як бачимо в наслідок виконання команди в регістр AL буде поміщена комбінація, молодша тетрода якої буде скинута в нуль.
4) Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 97. Відповідь пояснити.