Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕМСТ_Шпора(ALL).docx
Скачиваний:
1
Добавлен:
13.09.2019
Размер:
1.46 Mб
Скачать

Відповідь:

Команда 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

  1. Зробити ручне ассемблерування (компіляцію) команди: 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.

  1. Виконати ручне дизасемблерування наведеного шістнадцяткового машинного коду команди: 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.

  1. Навести команду мікропроцесора ix86 та сформувати 8-розрядне число (data = 8 біт), за допомогою якого біти №1, 2, 7, 8 акумулятора AL можна скинути в “0”. Інші біти AL залишити без змін. Відповідь пояснити.

Скинути біти в 0 можна за допомогою команди AND. 8-розрядне число: 00111100.

Таким чином біти №1, 2, 7, 8 множаться на 0, а інші залишаються без змін.

  1. Сформувати 20-розрядну фізичну адресу входу в таблицю адрес переривань, якщо номер (тип) переривання дорівнює 89. Відповідь пояснити.