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

Відповідь:

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

Ручное дизассемблирование команды.

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

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

Для скидання бітів двійкового числа в «0» використовується операція AND. Першим операндом команди буде 8-и бітний регістр AL, другим – безпосереднє число, маска для скидання. Оскільки необхідно інвертувати біти 1, 4, 6, 8 то маска буде мати вигляд 01010110. Нехай в регістрі AL записана наступна комбінація: ХХХХХХХХ. Виконаємо команду AND AL,00100111:

  1. Сформувати 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.

  1. Виконати функцію МП-ра ix86 та отримати результат виконання команди SBB AL,data8, якщо перед виконанням команди операнди, які являють собою числа зі знаком мають наступні значення: AL = -73, data8 = 3, CF = 1. Відповідь пояснити.