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

Відповідь:

Команда 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. Відповідь пояснити.