Intel i486, Pentium, P6

Архітектура і система команд мікропроцесорів

WhileCh in [ ' + ', '-'] do begin

Begin

Begin

Else

End

Else

If Ch in ['а', 'b', 'с'] then

Begin

Else

End

Else

If Ch in [ 'a', 'b' , 'c'] then

Begin

Begin

While Ch in [' + ', '-'] do begin

Begin

Т;

NextCh;

T;

end;

end;


 

Далее записываем распознаватель слагаемого:

procedure Т;

М;

while Ch in ['*', '/'] do begin

NextCh;

M;

end;

end;


 

И, наконец, распознающую процедуру для нетерминалам— множителя:

procedure M;

NextCh

else if Ch = ' (' then begin

NextCh;

E;

if Ch = ') ' then

NextCh

Error('Ожидается ")"');

Error ('Ожидается a, b, с или ' (');

end;


 

Остается только один вопрос: как разместить три эти процедуры в программе? По общему правилу языка Паскаль любой идентификатор может быть использован только после его описания. Процедура Е вызывает процедуру T, поэтому должна располагаться после нее. Процедура T вызывает M, поэтому M надо разместить перед T. Получается такой порядок: M; T; E. Но из процедуры M вызывается E, в то время как описание E мы разместили после M. Выходом из этой ситуации, которая возникла из-за наличия в нашей программе косвенной рекурсии, является использование директивы forward для опережающего описания процедуры E.

Структура программы будет такой:

procedure E; forward;

procedure M;

procedureТ;

procedure Е;


 

Есть и другое, весьма изящное решение проблемы: использование вложенных процедур. Такой распознаватель представлен в листинге

Листинг. Распознаватель арифметических выражений

procedure Е;

procedure T;

procedure M;

NextCh

else if Ch = '(' then begin

NextCh;

E;

if Ch = ') ' then

NextCh

Error('Ожидается ")"');

Error('Ожидается a, b, с или "("');

end {M};

M;

while Ch in ['*', '/']

NextCh;

M;

end;

end {Tj;

T;

NextCh;

T;

end; { E }

 

1. Архітектура ЕОМ

1. 1. Поняття про архітектуру ЕОМ

Архітектура ЕОМ – це абстрактне подання ЕОМ, яке відображає її структурну, схемотехнічну і логічну організацію. Поняття архітектури ЕОМ включає в себе:

o структурну схему ЕОМ;

o засоби і способи доступу до елементів структурної схеми;

o організацію і розрядність інтерфейсів ЕОМ;

o набір і доступність регістрів; o організацію і способи адресації пам’яті; o способи подання і формати даних; o набір машинних команд;

o формати машинних команд;

o обробку нештатних ситуацій (переривання).

Всі сучасні ЕОМ мають деякі загальні і індивідуальні властивості. Наявність загальних архітектурних властивостей зумовлена тим, що більшість типів сучасних ЕОМ відносяться до 4 і 5 покоління так званої фон-нейманівської архітектури з наступними властивостями і принципами:

o Принцип збережуваної програми. Код програми і її дані знаходяться в одному адресному просторі в оперативній пам’яті.

o Принцип мікропрограмування. Фізично в ЕОМ виконуються не машинні команди, а мікрооперації. В складі процесора повинен бути блок мікропрограмного керування.

o Лінійний прості пам’яті. Всім коміркам пам’яті послідовно присвоюють адреси 0, 1, 2 ...

o Послідовне виконання програм. Процесор вибирає із пам’яті команди строго послідовно. Для зміни прямолінійного ходу виконання програми використовуються команди умовного або безумовного переходу.

o Відсутність різниці між даними і командами. Дані і команди знаходяться в одному простору пам’яті у вигляді послідовностей нулів і одиниць. Тому важливо в програмі завжди чітко розділяти простір даних і команд.

o Байдужість до логічного навантаження даних.

Мікропроцесори фірми Інтел i486 і Pentium мають ряд індивідуальних архітектурних нововведень. Розглянемо найбільш характерні і необхідні для подальшого викладення.

o Суперскалярна архітектура. Мікропроцесори (МП), що мають один конвеєр називаються скалярними, а два і більше – суперскалярними. МП Pentium має два конвеєри і тому може виконувати дві команди за один машинний такт. Конвеєр це спеціальний пристрій в якому виконання команд розбивається на декілька етапів. i486 має п’ятиступеневий конвеєр:

o вибірка команди із кеш-пам’яті або оперативної пам’яті;

o декодування команди;

o генерація адреса, при якому визначаються адреси операндів у пам’яті;

o виконання операції з допомогою арифметично-логічного пристрою (АЛП);

o запис результату.

Таким чином в конвеєрі може знаходитися на різній стадії виконання п’ять команд.

Швидкість обчислень в результаті істотно зростає.

o Окреме кешування коду і даних. Кешування – це спосіб збільшення швидкодії системи за рахунок зберігання часто використовуваних даних і кодів в “кеш-пам’яті” (швидкої пам’яті). Pentium має два блоки кеш пам’яті: один для коду і один для даних.


o Передбачення вірного адресу переходу. Зберігається інформація про останні 256 переходів. Спеціальний блок передбачення адресу переходу прогнозує, яке рішення буде прийнято програмою. При цьому використовується припущення, що гілка яка була пройдена, буде використовуватися знову. Якщо передбачення вірне, то перехід виконується без затримки. Ймовірність вірного передбачення складає 80%.

o Передбачення переходів, в тому числі і вкладених. Реалізується пристроєм виборки/декодування з метою запобігання перевантаження конвеєра.

o Динамічний аналіз потоку даних. Аналіз проводиться з метою визначення залежностей команд програми від даних і регістрів процесора з подальшою оптимізацією потока команд.

o Інтелектуальне виконання. Характеризує здатність мікропроцесора реалізувати неупорядковане виконання команд, відновивши надалі початковий порядок команд.

В історичному розвитку МП Intel можна виділити три етапи:

o 16-розрядні МП i8086 і і80286 підтримували 170 команд, в тому числі і команди співпроцесора;

o 32-розрядні МП i386, i486, Pentium, Pentium Pro підтримували 220 команд;

o 32-розрядні МП Pentium MMX, Pentium II підтримували 277 команд, Pentium III – 347

команд. В них появилися нові архітектурні елементи – MMX-розширення.

Структурна схема МП P6 (Pentium II/III) (рис. 1.1) складається із наступних підсистем:

 

Рис. 1.1. Структурна схема мікропроцесора P6 (Pentium Pro/II/III).

 

o Підсистема пам’яті. Складається із системної шини, кеша другого рівня L2, пристрою шинного інтерфейса, кеша першого рівня L1 (інструкцій і даних), пристрою зв’язку з пам’яттю і буфера перевпорядкування запитів до пам’яті.


o Пристрою виборки/декодування. Складається із пристрою виборки інструкцій, буфера передбачень переходів, декодера інструкцій, блока мікропрограмного керування і таблиці регістрових аліасів.

o Буфер команд. Містить команди, перевпорядковані для оптимального завантаження буфера.

o Пристрій диспетчеризації/виконання. Містить буфер мікрооперацій, готових до виконання, п’ять виконуючих пристроїв: два пристрої для виконання цілочисельних операцій, два – з плаваючою крапкою і пристрій зв’язку з пам’яттю.

Розглянемо порядок функціонування схеми. Підсистема пам’яті складається із оперативної пам’яті, первинного (L1) і вторинного кеша (L2). Пристрій шинного інтерфейсу звертається до оперативної пам’яті системи через зовнішню системну шину. Ця 64-розрядна шина орієнтована на обробку запитів, тобто кожний шинний запит обробляється окремо і потребує зворотної реакції. Поки пристрій шинного інтерфейсу очікує відповіді на один запит шини, можливе формування багаточисельних додаткових запитів. Всі вони обслуговуються в порядку поступання. Зчитані по запиту дані поміщуються у кеш другого рівня. Тобто, МП завдяки пристрою шинного інтерфейсу читає команди і дані із кеша другого рівня. Пристрій шинного інтерфейсу взаємодіє з кешом другого рівня через 64-розрядну шину кеша, яка також орієнтована на обробку запитів і працює на тактовій частоті процесора. Доступ до кеша першого рівня здійснюється через внутрішні шини на тактовій частоті МП. Синхронна робота з системною пам’яттю кеш-пам’яті обох рівнів здійснюється завдяки спеціальному протоколу.

Запити на операнди з пам’яті від команд у виконавчому пристрої МП забезпечуються пристроєм зв’язку з пам’яттю і буфером перевпорядкування запитів до пам’яті. Ці два пристрої були спеціально включені в схему для того, щоб забезпечити безперебійне постачання виконуваних команд необхідними даними. Необхідно підкреслити роль буфера перевпорядкування запитів до пам’яті. Він відслідковує всі запити до операндів у пам’яті і виконує функції плануючого пристрою. Якщо потрібні для чергової операції дані у кеш-пам’яті (L1) відсутні, то буфер перевпорядкування запитів до пам’яті автоматично передає інформацію про невдале звернення до кешу другого рівня (L2). Якщо і в кеші L2 потрібних даних немає, то буфер перевпорядкування запитів до пам’яті заставляє пристрій шинного інтерфейсу зформувати запит до оперативної пам’яті (ОП).

Пристрій виборки команд/декодування читає потік команд із кеша команд (L1) і декодує їх у послідовність мікрооперацій. Потік мікрооперацій (поки що він відповідає послідовності початкових команд) поступає у буфер команд. Пристрій виборки видобуває одну 32-байтну строку кеша команд за такт і передає її в декодер. Пристрій виборки обчислює вказівник на наступну команду, що підлягає виборці, на основі інформації із таблиці міток переходу, стану переривання/виключення і повідомлення від виконавчого цілочисельного пристрою про помилку в передбаченні мітки переходу. Важлива частина цього процесу – передбачення мітки переходу. Основою алгоритму процесу є робота з таблицею міток переходу, яка містить інформацію про раніше зроблені переходи. Коли чергова, вибрана з пам’яті команда є командою переходу, то її адрес переходу порівнюється з адресами, що вже є в таблиці міток переходів. Якщо цього адреса нема в таблиці, то виборка команд із пам’яті продовжується до тих пір, поки не буде виконана команда переходу виконавчим пристроєм. В результаті її виконання буде підтверджена правильність переходу. Якщо ж цей адрес уже є в таблиці міток переходів, то на його основі пристрій виборки формує адрес наступної команди, що підлягає виборці. Аналогічно, про правильність виборки цієї команди буде відомо після виконання команди переходу виконавчим пристроєм. Якщо цей передбачений перехід був невірним, то конвеєр буде скинутий і завантажений наново у відповідності з адресом переходу. Мета вірного передбачення переходів в тому, щоб пристрій виконання постійно був зайнятий корисною роботою, і скид конвеєра проводився як можна рідше.

Команди вибираються на конвеєр пристроєм виборки команд, який поміщає їх у пристрій декодування. Пристрій декодування складається із трьох паралельно працюючих декодерів (два простих і один складний). Декодери перетворюють команди мікропроцесора в мікрооперації.


Мікрооперації являють собою примітивні команди, які виконуються п’ятьма виконавчими пристроями МП, що працюють паралельно. Багато машинних команд перетворюються в одиночні мікрооперації, а деякі - в послідовності від двох і більше мікрооперацій. Інформація про послідовність мікрооперацій для реалізації конкретної машинної команди міститься у блоці мікропрограмного керування. Крім команд, декодери обробляють також префікси команд. Декодер команд може формувати до шести мікрооперацій за такт – по одній від простих декодерів і до чотирьох від складного декодера. Після того як команди розбиті на мікрооперації, порядок їх виконання важко передбачити. При цьому можуть виникнути проблеми із таким ресурсом як регістри (при розміщенні різних даних з однакових регістрів у пам’ять). Вона розв’язується механізмом перейменуванням регістрів. Основу цього механізму складає набір із 40 внутрішніх універсальних регістрах, які можуть працювати з цілими числами і значеннями із плаваючою крапкою. Інформація про дійсні і внутрішні імена регістрів поміщається в таблицю регістрових аліасів.

На закінчення процесу декодування пристрій керування таблицею регістрових аліасів добавляє до мікрооперацій біти стану і прапори, щоб підготовити їх до невпорядкованого виконання, після чого посилає отримані мікрооперації в буфер перевпорядкованих команд. Він являє собою масив асоціативної пам’яті кільцевої структури (фізично виконаний у вигляді 40 регістрів), елементи якої містять два типи мікрооперацій: такі що чекають своєї черги на виконання і такі що частково виконані через перевпорядкування команд. Пристрій диспетчеризації/виконання може вибирати мікрооперації із цього буфера в любому порядку.

Пристрій диспетчеризації/виконання планує і виконує неупорядковану послідовність мікрооперацій із буфера перевпорядкованих команд. Але він не займається безпосередньою виборкою мікрооперацій із буфера перевпорядкованих команд, так як там можуть міститися і не готові до виконання мікрооперації. Цим займається пристрій керування буфером команд, готових до виконання. Він постійно сканує буфер перевпорядкованих команд в пошуках мікрооперацій, готових до виконання, після чого посилає їх відповідним виконавчим пристроям, якщо вони не зайняті. Результати виконання мікрооперацій повертаються у буфер перевпорядкованих команд і зберігаються там разом з другими мікроопераціями до тих пір, поки не будуть видалені пристроєм видалення і відновлення.

Подібна схема планування реалізує принцип невпорядкованого виконання, при якому мікрооперації посилаються виконавчим пристроєм не залежно від їх розміщення в початковому алгоритмі. Виконавчий пристрій складається із п’яти блоків, кожний із яких виконує свій тип мікрооперацій: два цілочисельні пристрої, два з плаваючою крапкою і один для зв’язку з пам’яттю.

Цілочисельні виконавчі пристрої паралельно обробляють цілочисельні мікрооперації. Один із цілочисельних пристроїв призначений для роботи з мікроопераціями переходів. Він здатний виявляти непередбачений перехід і повідомляти про це пристрій виборки команд, для перезапуску конвеєра відносно нового виконавчого адреса.

Виконавчі пристрої з плаваючою крапкою обробляють мікрооперації команд з плаваючою крапкою і умовні переходи і переміщення.

Пристрій зв’язку з пам’яттю керує завантаженням і збереженням даних для мікрооперацій.

Блок видалення і відновлення повертає обчислювальний процес в рамки в рамки, визначені початковою послідовністю команд. Для цього він постійно сканує буфер перевпорядкованих команд на предмет виявлення повністю виконаних мікрооперацій. Такі мікрооперації видаляються із буфера і відновлюються у порядку який відповідає початковому порядку команд.

1.2. Програмна модель мікропроцесора Intel Pentium III

Люба програма, що виконується отримує у своє розпорядження певний набір ресурсів МП. Ці ресурси необхідні для виконання і зберігання в пам’яті команд програми, даних і інформації про поточний стан програми і МП. Набір цих ресурсів складає програмну модель


МП. На рис. 1.2 наведено програмну модель МП Pentium III. Програмні моделі більш ранніх МП (i486, Pentium) відрізняються меншим розміром адресованого простору ОП (232-1, так як розрядність шини адреса складала 32 біти) і відсутністю деяких груп регістрів.

Таким чином програмну модель МП Pentium III складають:

o простір адресованої пам’яті до 236-1 байт;

o набір регістрів для зберігання даних загального призначення;

o набір сегментних регістрів;

o набір регістрів стану і керування;

o набір регістрів пристрою обчислень з плаваючою крапкою (співпроцесора);

o набір регістрів цілочисельного ММХ-розширення, що відображаються на регістри співпроцесора (вперше появились в Pentium MMX);

o набір регістрів ММХ-розширення з плаваючою крапкою (вперше появились в

Pentium III);

o програмний стек. Це спеціальна інформаційна структура, робота з якою передбачена на рівні машинних команд.

 

Рис. 1.2. Програмна модель МП Intel Pentium III


o esp/sp (Stack Pointer register) – регістр вказівника стека. Містить вказівник вершини стека в поточному сегменті стека;

o ebp/bp (Base pointer register) – регістр вказівника бази кадру стека. Призначений для організації довільного доступу до даних всередині стека.

Проте на практиці більшість із цих регістрів може використовуватися для зберігання операндів у любих комбінаціях.

Сегментні регістри

МП апаратно підтримує структурну організацію програми у вигляді трьох частин, які називають сегментами. Така організація пам’яті називається сегментною. Для того щоб вказувати на сегменти, до яких програма має доступ в конкретний момент часу, використовуються шість сегментних регістрів cs, ss, ds, es, gs, fs. МП підтримує наступні типи сегментів:

1. Сегмент кода. Містить команди програми. Для доступу до цього сегмента служить регістр cs (code segment registr) – сегментний регістр коду. Він містить адрес сегмента з машинними командами, до якого має доступ МП.

2. Сегмент даних. Містить оброблювані програмою дані. Для доступу до цього сегмента служить регістр ds (data segment registr) – сегментний регістр даних, який зберігає адрес сегмента даних поточної програми.

3. Сегмент стека. Цей сегмент являє собою область пам’яті, що називається стеком. Роботу із стеком МП організує по принципу: останній записаний елемент вибирається першим. Для доступу до цього сегменту служить регістр ss (stack segment register) – сегментний регістр стека.

4. Додатковий сегмент даних. Неявно припускається, що всі оброблювані дані розміщені в сегменті даних, адрес якого зберігається в сегментному регістрі ds. Якщо програмі недостатньо одного сегмента даних, то вона може використати ще три сегменти даних, але їх адреси треба вказати явно з допомогою префіксів перевизначення сегментів. Адреси додаткових сегментів повинні міститися в регістрах es, fs, gs (extention data segment registr).

Регістри стану і керування

В МП включено декілька регістрів, які постійно містять інформацію як про стан самого МП, так і програми, команди якої в даний момент завантажені на конвеєр.

До цих регістрів відносяться: o регістр прапорів eflags/flags; o регістр вказівника команди eip/ip.

Використовуючи ці регістри, можна отримувати інформацію про результати виконання команд і впливати на стан самого мікропроцесора. Розглянемо призначення і вміст цих регістрів:

o eflags/flags (flag register) – регістр прапорів. Розрядність 32/16 бітів. Окремі біти мають певне функціональне призначення і називаються прапорами. Молодша частина цього регістру повністю аналогічна регістру flags для i8086. На рис. 1.3 показано вміст регістра eflags.

Виходячи із особливостей використання, прапори регістра eflags/flags можна розділити на три групи:

o 8 прапорів стану. Ці прапори можуть змінитися після виконання машинних команд. Прапори стану регістра eflags відображають особливості результату виконання арифметичних або логічних операцій. Це дає можливість аналізувати стан обчислювального процесу і реагувати на нього з допомогою команд умовних переходів і викликів підпрограм. В табл. 1.1 наведено прапори станів і їх призначення.

o 1 прапор керування. Позначається як df (Directory flag). Він знаходиться у десятому регістрі eflags і використовується ланцюжковими командами. Значення df визначає напрямок поелементної обробки: від початку строки до кінця (df=0), від кінця до початку (df=1). Для роботи з прапором існує команда cld (зняти прапор) і std (встановити прапор).


o 5 системних прапорів, що керують вводом/виводом, маскованими перериваннями, відладкою, переключенням між задачами і віртуальним режимом роботи i8086. Прикладним програмам не рекомендується модифікувати без необхідності ці прапори. В табл. 1.2 перечисленні системні прапори і їх призначення.

 

 

Рис.1.3. Вміст регістра eflags

 


 

Прапори стану


Таблиця 1.1.


Мнемоніка прапора Прапор Номер біта в eflags Зміст і призначення
cf Прапор переносу (Carry flag) 1-арифметична операція зробила перенос із старшого біта результату. Старшим є 7-й, 15-й і 31-й біт в залежності від розмірності операнду 0 – переносу не було
pf Прапор паритету (Parity Flag) 1-вісім молодших розрядів (цей прапор тільки для 8-ми молодших розрядів любого операнду) результату містять парне число одиниць 0-вісім молодших розрядів результату

 

      містять непарне число одиниць
af Допоміжний прапор переносу (Auxiliary carry Flag) Тільки для команд, що працюють з BCD- числами. Фіксує позичання із молодшої тетради результату: 1- в результаті операції додавання відбувся перенос із розряду 3 в старший розряд або при відніманні було позичання в розряд 3 молодшої тетради із значення в старшій тетраді; 0-переноса і позичання в (із) 3 розряд(у) молодшої тетради результату не було.
zf Прапор нуля (Zero Flag) 1-результат нульовий 0-результат ненульовий
sf Прапор знаку (Sign Flag) Відображає стан старшого біта результату (біти 7, 15, 31 для 8, 16, 32-розрядних операндів відповідно): 1-старший біт результату дорівнює 1; 0-старший біт результату дорівнює 0
of Прапор переповнення (Overflaw Flag) Прапор of використовується для фіксування факту втрати значущого біта при арифметичних операціях: 1-в результаті операції відбувається перенесення (позичання) в (із) старшого, знакового біта результату (біти 7, 15, 31 для 8, 16, 32-розрядних операндів): 0-в результаті операції не відбувається перенесення (позичання) в (із) старшого, знакового біта результату.
iopl Рівень привілей ввода-вивода 12,13 Використовується у захищеному режимі роботи МП для контролю доступу до команд вводу-виводу, в залежності від привілейованості задачі

 


 

Системні прапори


Таблиця 1.2.


Мнемоніка прапора Прапор Номер біта в eflags Зміст і призначення
tf Прапор трасування (Trace Flag) Призначений для покрокової роботи МП: 1-МП генерує переривання з номером 1 після виконання кожної машинної команди. Може використовуватися при відладці програми, зокрема відладчиками; 0-звичайна робота
if Прапор переривання (Interrupt enable Flag) Призначений для дозволу або заборони (маскування) апаратних переривань (переривань по входу INTR): 1-апаратні переривання дозволені; 0-апаратні переривання заборонені
rf Прапор відновлення (Resume Flag) Використовується при обробці переривань від регістрів відладки
vm Прапор віртуального Признак роботи МП в режимі віртуального 8086:

 

  (Virtual 8086 Mode)   1-процесор працює в режимі віртуального 8086; 0-процесор працює в реальному або захищеному режимі
ac Прапор конролю вирівнювання (Alignment Check) Призначений для дозволу контролю вирівнювання при звертанні до пам’яті. Використовується сумісно з бітом am в системному регістрі cr0. Наприклад, Pentium дозволяє розміщувати команди і дані з любого адресу. Якщо потрібно контролювати вирівнювання даних і команд по адресах кратним 2 або 4, то встановлення даних бітів приведе до того, що всі звернення по некратних адресах будуть збуджувати виняткову ситуацію
vif Прапор віртуального переривання (Virtual Interrupt Flag) При певних умовах (одна із яких – робота МП у V-режимі) є аналогом прапору if. Прапор vif використовується сумісно з прапором vip. Прапор появився у МП Pentium
vip Прапор відкладеного віртуального переривання (Virtual Interrupt flag) Встановлюється в 1 для індикації відкладеного переривання. Використовується при роботі у V-режимі сумісно з прапором vif. Прапор появився у МП Pentium
id Прапор ідентифікації (Identification flag) Використовується для того, щоб показати факт підтримки МП інструкції cpuid. Якщо програма може встановити або очистити цей прапор, це означає що дана модель МП підтримує інструкцію cpuid

 

 

1.4. Організація пам’яті

Фізична пам’ять, до якої МП має доступ по шині адреса називається оперативною пам’яттю (ОП) або оперативним запам’ятовуючим пристроєм (ОЗП). ОП організована як послідовність комірок – байтів. Кожному байту відповідає свій унікальний фізичний адрес. Діапазон значень фізичних адресів залежить від розрядності шини адреса МП. Для i486 і Pentium він знаходиться в межах 0-232-1 (4 Гбайт), P6 (Pentium Pro/II/III) 0-236-1 (64 Гбайт).

Механізм керування пам’яттю повністю апаратний і забезпечує: o компактність зберігання адресу в машинній команді; o гнучкість механізму адресації;

o захист адресних просторів задач у багатозадачній системі;

o підтримка віртуальної пам’яті.

МП апаратно підтримує дві моделі ОП:

o сегментовану модель. В цій моделі програмі виділяються неперервні області пам’яті

(сегменти), а сама програма може звертатися тільки до даних у цих сегментах;

o сторінкова модель. Її можна розглядати як надбудову над сегментною моделлю. У випадку використання цієї моделі ОП розглядується як сукупність блоків фіксованого розміру (4 Кбайт). Основне призначення цієї моделі зв’язано з організацією віртуальної пам’яті, що дозволяє операційній системі (ОС) використовувати для роботи програм простір пам’яті більший, ніє об’єм фізичної пам’яті. Для МП i486, Pentium розмір віртуальної пам’яті може досягати 4 Тбайт.


Особливості використання і реалізації цих моделей залежать від режиму роботи МП:

o Режим реальних адресів (реальний режим). В цьому режимі працював i8086. Наявність його в i486, Pentium забезпечує функціонування програм, написаних для ранніх моделей МП.

o Захищений режим. Дозволяє реалізувати всі архітектурні можливості нових МП, починаючи з i80286. Програми розроблені для i8086 не можуть працювати у цьому режимі.

o Режим віртуального 8086. Перехід у цей режим можливий із захищеного режиму. Відмінною особливістю цього режиму є можливість одночасної роботи програм для i8086. Можлива також робота програм реального режиму.

o Режим системного керування. Це новий режим роботи МП, який появився у Pentium. Він забезпечує ОС механізмом виконання машинно-залежних операцій, таких як перевід ПК у режим пониженого енергоспоживання.

Сегментована модель пам’яті

Сегментація - механізм адресації, що забезпечує існування незалежних адресних просторів (як в межах задачі так і системи в цілому) від взаємного впливу. Сегмент – незалежний, підтримуваний на апаратному рівні блок пам’яті. Кожна програма має доступ до трьох основних сегментів: коду, даних, стека, - і від 1 до 3 додаткових сегментів даних. Всередині сегменту програма звертається до адресів, відносно початку сегмента лінійно. Цей відносний адрес або зміщення, що використовують для доступу даних всередині сегмента, називають ефективним.

Розміщення сегментів по певних фізичних адресах здійснює ОС, а значення цих адресів поміщає у певні місця. У реальному режимі ці адреси поміщаються у сегментні регістри, а у захищеному режимі - у таблицю дескрипторів.

Розрізняють три моделі сегментованої організації пам’яті (рис. 1.4): сегментована модель пам’яті реального режиму; сегментована модель пам’яті захищеного режиму; суцільна модель пам’яті захищеного режиму.

Фізичним адресом є той, що видається на шину адреса МП. Синонімом до нього є лінійний адрес, але тільки у реальному режимі. У сторінковій моделі лінійний і фізичний адрес мають різні значення.


 

Рис. 1.4. Моделі сегментованої організації пам’яті

 

 

Формування фізичного адреса в реальному режимі

В реальному режимі механізм адресації має наступні характеристики:

o діапазон зміни фізичного адреса від 0 до 1 Мбайт, це зумовлено тим, що шина адреса

i8086 мала 20 ліній;

o максимальний розмір сегмента 216 - 1 = 64 Кбайт. Це пояснюється 16-розрядною архітектурою i8086;

o для звернення до конкретного адреса ОП потрібно визначити адрес сегмента і зміщення. Зміщення зберігається в одному із 16-розрядних сегментних регістрів. Для адресації пам’яті 1 Мбайт необхідний 20 бітний адрес. Його отримують апаратним зсувом вліво на 4 розряди значення сегментного регістра. Зміщення являє собою 16-бітне значення, що міститься явно в команді або неявно у одному із регістрів загального призначення.

Усунення невідповідності між розміром шини i486, Pentium (32 біти) і 20-бітним значенням фізичного адресу у реальному режимі досягається шляхом недоступності старших 12 біт шини адреса. Механізм формування фізичного адреса в реальному режимі показаний на рис. 1.5. Недоліки такої організації пам’яті:

o сегменти безконтрольно розміщуються з любого адресу кратного 16 (так як їх вміст зсовують на 4 розряди);

o сегменти мають максимальний розмір 64 Кбайт; o сегменти можуть перекриватися із другими сегментами. Вказані недоліки були усунуті у захищеному режимі.


Рис. 1.5. Механізм формування фізичного адреса в реальному режимі

Типи даних

Типи даних розглядуються з двох точок зору:

o розмірності; o логічної інтерпретації.

З точки зору розмірності МП підтримує наступні типи даних (рис 1.6).

 

Рис. 1.6. Основні типи даних

 

Байт – вісім послідовних бітів, пронумерованих від 0 до 7. Біт 0 є самим молодшим.

Слово – послідовність із двох байтів, що мають послідовні адреси. Розмір слова – 16 біт. Біти нумеруються від 0 до 15. Байт з нульовим бітом називається молодшим байтом, байт з 15 бітом

старшим байтом. МП Intel мають важливу особливість – молодший байт завжди зберігається по молодшому адресу. Адресом слова вважається адрес його молодшого байта. Адрес старшого байту може бути використаний для доступу до старшої половини слова.

Подвійне слово – послідовність із чотирьох байтів (32 біти), розміщеним по послідовних адресах. Біти нумеруються від 0 до 31. Слово, з нульовим бітом називається молодшим словом, а слово з 31 бітом – старшим словом. Адрес старшого слова може бути використаний для доступу до старшої половини подвійного слова.


Збільшене у четверо слово - послідовність із восьми байтів (64 біти), розміщеним по послідовних адресах. Біти нумеруються від 0 до 63. Подвійне слово, з нульовим бітом називається молодшим подвійним словом, а слово з 63 бітом – старшим подвійним словом. Адрес старшого подвійного слова може бути використаний для доступу до старшої половини збільшеного у четверо слова.

128-бітний упакований тип даних. Цей тип даних появився у МП Pentuim III.

Логічні типи даних показані на рис. 1.7.

 

Рис.1.7. Логічні типи даних

 

o Цілий тип із знаком – двійкове значення із знаком розміром 8, 16, 32 біти. Знак у двійковому числі міститься у 7, 15, 31 біті відповідно. Нуль в цих бітах відповідає додатному числу, а одиниця – від’ємному числу. Від’ємні числа подаються у додатковому коді. Числові діапазони для цього типу даних наступні:

8-розрядне ціле – від –128 до +127;

16-розрядне ціле – від –32768 до +32767;

32-розрядне ціле – від –231 до +231-1.

o Цілий тип без знаку – двійкове значення без знаку розміром 8, 16, 32 біти. Числові діапазони для цього типу даних наступні:

байт – від 0 до 255;

слово – від 0 до 65535;

подвійне слово – від 0 до +232-1.

o Вказівник на пам’ять буває двох типів.

o Ближній тип – 32-розрядний логічний адрес, що являє зміщення в байтах від початку сегмента. Ці вказівники можуть використовуватися у суцільній (плоскій) моделі пам’яті, де сегментні складові однакові.

o Дальній вказівник - 48-розрядний логічний адрес, що складається із двох частин: 16-розрядної сегментної частини (селектора) і 32-розрядного зміщення.

o Ланцюжок – неперервний набір байтів, слів або подвійних слів максимальною довжиною до 4 Гбайт.

o Бітове поле – послідовність бітів, де кожний біт незалежний і розглядується як окрема змінна. Бітове поле може починатися з любого біта любого байта і містити до 32 біти.


o Неупакований двійково-десятковий тип – байтове подання десяткової цифри від 0 до 9. Неупаковані десяткові числа зберігаються як байтові значення без знаку по одній цифрі у байті. Значення цифри визначається молодшим півбайтом.

o Упакований двійково-десятковий тип – являє собою упаковане подання двох десяткових чисед від 0 до 9 в одному байті. Кожна цифра зберігається у своєму півбайті. Цифра у старшому півбайті (біти 4-7) є старшою.

o Типи даних з плаваючою крапкою. Це типи даних співпроцесора. Вони не сумісні з типами даних цілочисельних пристроїв.

o Типи даних MMX-розширення (Pentium MMX/II). Сукупність упакованих цілочисельних елементів.

o Типи даних MMX--розширення (Pentium III). Сукупність упакованих елементів з плаваючою крапкою фіксованого розміру.

Формат команд

Машинні команди – це мінімальний рівень на якому можна програмувати МП. Кожна машинна команда складається із двох частин: операційної частини (яка вказує що робити) і операндної частини (яка вказує над чим робити).

В машинну команду явно або неявно входять наступні елементи:

o поле префіксів – елемент, який уточнює або модифікує команду в наступних аспектах:

o заміна сегмента;

o зміна розмірності адресу;

o зміна розмірності операнда;

o вказівка на повторення команди;

o поле коду операції – визначає дію команди. Одній і тій же команді може відповідати декілька кодів операцій, в залежності від її операндів;

o поле операндів – містить від 0 до 2 елементів.

Машинні команди не можуть маніпулювати двома операндами, що знаходяться в пам’яті.

По цій причині можливі наступні об’єднання операндів у команді:

o регістр – регістр; o регістр – пам’ять; o пам’ять – регістр;

o безпосередній операнд – регістр;

o безпосередній операнд - пам’ять.

Типи переривань

Переривання означає тимчасове припинення основного процесу обчислень для виконання деяких запланованих або незапланованих дій, що викликані роботою апаратури або програми. Механізм переривань підтримується на апаратному рівні. В залежності від джерела переривання класифікуються на:

o апаратні, виникають як реакція МП на фізичний сигнал від деякого пристрою. По часу виникнення вони асинхронні (виникають у довільні моменти часу);

o програмні, які викликаються з допомогою команди int з програми. Ці переривання

синхронні.

o винятки – різновидність програмних переривань, які є реакцією МП на нестандартну ситуацію, що виникла всередині МП під час виконання деякої команди програми.

2. Структура програми на асемблері

Синтаксис асемблера

Синтаксис речень асемблера описується з допомогою синтаксичних діаграм. На рис. 2.1, 2.2, 2.3 показано формати речень, директив, команд і макрокоманд. На цих рисунках:

o ім’я мітки – ідентифікатор, значенням якого є адрес першого байта речення;

o ім’я – ідентифікатор, що відрізняє дану директиву від інших однойменних;


o код операції (КОП) і директива – мнемонічне позначення відповідної машинної команди, макрокоманди або директиви транслятора;

o операнди – частини команди, макрокоманди або директиви, що позначає об’єкт над яким виконуються дії.

При використанні діаграм шукається шлях від входу (зліва) і до виходу (направо).

 

Рис. 2.1. Формат речень асемблера

 

Рис. 2.2. Формат директив

 

Рис. 2.3. Формат команд і макрокоманд Допустимі символи при написанні тексту програми:

1. Всі латинські букви A-Z, a-z. Великі і малі букви вважаються еквівалентними.

2. Числа від 0 до 9.

3. Знаки: ?, @, $, _, &.

4. Розділювачі: , . [ ] < > { } + / * % ! “_” ? \ = # ^ .

Речення асемблера формуються із лексем. Лексема – синтаксично неподільна послідовність допустимих символів.

Лексемами є:

o ідентифікатори – послідовність допустимих символів, для позначення кодів операцій, імен змінних, назв міток (розпізнаються послідовності до 32 символів);

o ланцюжки символів – послідовності символів, які взяті в одинарні або подвійні лапки;

o цілі числа – числа в одній із систем числення: двійковій (01010b), десятковій, шістнадцятковій (a10h);

В асемблері підтримуються наступні операнди:

o постійні або безпосередні операнди – число, строка, ім’я або вираз, що має фіксоване значення. Наприклад:

num1 equ 5 ; постійні операнди

num2=num1-2

mov al, 5 ; безпосередні операнди

mov al,num2 ; -“-


o адресні операнди – задають фізичне розміщення операнда в пам’яті з допомогою двох складових (сегмента і зміщення):

mov ax, 0000h

mox ds, ax ;записати слово в ах із пам’яті з фізичним адресом

mov ax, ds:0000h ;0000:0000

o переміщувані операнди – символьні імена, що задають адрес пам’яті без сегментної складової. Фізичний адрес цієї пам’яті буде відомий після завантаження програми в пам’ять на виконання.

data segment

mas_w dw 25 dup (0)

code segment

lea si, mas_w ; mas_w – переміщуваний операнд

o лічильник адресу ($) – в початковій програмі асемблер замість символу $ підставляє поточне значення лічильника адреса:

jmp $+3 ; довжина команди 2 байти, перехід на команду mov cld ; довжина команди 1 байт

mov al,1

o регістрові операнди – це ім’я регістрів загального призначення і більшості системних:

mov al,4 ;константу 4 занести у регістр al

o базовий і індексний операнди – використовуються для реалізації непрямої базової, непрямої індексної адресації і їх комбінацій;

o структурні оператори використовуються для доступу до елементів структури;

o записи використовуються для доступу до бітового поля деякого запису.

Операнди разом з операторами входять у вирази. Оператори (ОП) виконуються згідно їх пріоритетів. Порядок виконання можна змінити шляхом розставлення круглих дужок. В асемблері є наступні оператори:

o арифметичні оператори: унарні “+”, “-”; бінарні “+”,“-”; множення “*”, цілочисельного ділення “/”, отримання залишку від ділення “mod”. Синтаксис:

[+,-] вираз_1 [ ОП [+,-] вираз_2 ]

o оператори зсуву вліво (shl), вправо (shr) на задане число розрядів. Cинтаксис:

вираз ОП число_розрядів_зсуву

mask equ 10011000

mov al, mask shr 3 ; al=00010011

o оператори порівняння використовуються для формування логічних умов (повертають значення “істина” або “фальш”. Логічне значення “істина” відповідає логічній одиниці (всі біти дорівнюють 1), а “фальш” – логічному нулю (всі біти дорівнюють 0); Синтаксис: вираз_1 ОП вираз_2. Оператори:

o eq – істина, якщо вираз_1 дорівнює виразу_2 o ne – істина, якщо вираз_1 не дорівнює виразу_2 o lt – істина, якщо вираз_1 менше виразу_2

o le – істина, якщо вираз_1 менше або дорівнює виразу_2

o gt – істина, якщо вираз_1 більше виразу_2

o ge – істина, якщо вираз_1 більше або дорівнює виразу_2

tab_size equ 30 ; розмір таблиці

mov al, tab_size ge 50 ; завантаження розміру таблиці в al cmp al,0 ; якщо, tab_size < 50, то

je m1 ; перехід на мітку m1

o логічні оператори – виконують над виразами побітові операції. Синтаксис:

[not] вираз_1 [ОП [not] вираз_2]. Оператори: and, or, xor.

flag equ 10010011

mov al, flag xor 01h; al=10010010 інвертовано правий біт


o індексний оператор [ ]; Синтаксис: вираз_1 [ вираз_2 ] . Вказівка додати значення виразу_1 і виразу_2.

mov ax, mas[si] ; переслати слово по адресу mas+(si) у регістр ax

o оператор перевизначення типу ptr застосовується для перевизначення типу мітки або змінної вказаної виразом; Синтаксис:

[ byte], [word], [dword], [qword],[ tbyte],[ near], [far ] ptr вираз

d_wrd dd 0

mov al,byte ptr d_wrd+1 ;пересилка другого байта із подвійного слова

o оператори перевизначення сегменту : (двокрапка) заставляє обчислювати фізичний адрес відносно заданої сегментної складової: “ім’я сегментного регістра”, “ім’я сегмента” із дерективи SEGMENT.

o оператор іменування типа структури . (крапка) використовується для посилання на конкретний елемент структури;

o оператор отримання сегментної складової адресу виразу seg повертає фізичний адрес сегмента для виразу, в якості якого може бути мітка, змінна, ім’я сегменту, ім’я групи, символічне ім’я. Синтаксис:

[cs], [ds], [ss], [es], [fs], [gs], [імя_сегмента], [ім’я_групи] : вираз ;

перевизначення сегменту

seg : вираз ; отримання сегментної складової

o оператор отримання зміщення виразу offset дозволяє отримати значення зміщення для виразу в байтах відносно початку сегмента. Синтаксис: offset вираз

.data pole dw 5

.code

mov ax, seg pole mov es,ax

mov dx, offset pole ; в парі es:dx повний адрес pole

Директиви сегментації

МП має шість сегментних регістрів через які він працює з одним сегментом коду, з одним сегментом стека, з одним сегментом даних і трьома додатковими сегментами даних. Для об’єднання програм на різних мовах призначені операнди в дерективі SEGMENT. Синтаксис: Ім’я_сегмента SEGMENT [Тип вирівнювання] [Тип комбінування] [Клас_сегмента] [Тип_розмірності_сегмента]

...

Ім’я_сегмента ENDS

Тип вирівнювання початку сегмента на заданій межі:

o BYTE – без вирівнювання; Сегмент може починатися з любого адресу пам’яті.

o WORD – сегмент починається по адресу кратному двом (один молодший біт фізичного адреса 0) (вирівнювання на межу слова);

o DWORD – сегмент починається по адресу кратному чотирьом (два молодших біти фізичного адреса 0), (вирівнювання на межу подвійного слова);

o PARA – сегмент починається по адресу кратному 16 (остання шістнадцяткова цифра 0h) (вирівнювання на межу параграфа);

o PAGE – сегмент починається по адресу кратному 256 (дві останні шістнадцяткові цифри 00h) (вирівнювання на межу сторінки);

o MEMPAGE – сегмент починається по адресу кратному 4 Кбайт (три останні шістнадцяткові цифри 000h) (вирівнювання на межу сторінки 4 Кбайт).

Тип комбінування сегментів різних модулів з одним іменем:

o PRIVATE – сегмент не буде об’єднуватися з другими модулями з ти же іменем поза даним модулем;


o PUBLIC – заставляє компонувач об’єднати всі сегменти з однаковим іменем; Новий об’єднаний сегмент буде цілим і неперервним. Всі адреси (зміщення) об’єктів (команд або даних) будуть обчислюватися відносно початку цього нового сегмента.

o COMMON – розмістити всі сегменти з одним і тим же іменем по одному адресу; Всі сегменти з даним іменем будуть перекриватися і сумісно використовувати пам’ять. Розмір отриманого сегменту буде дорівнювати розміру самого більшого сегменту.

o Atxxxx – розмістити сегмент по абсолютному адресу параграфа xxxx (наприклад доступ до відеопам’яті або області постійного запам’ятовуючого пристрою); Для доступа до сегмента необхідно в сегментний регістр занести значення заданого абсолютного адреса xxxx. Всі мітки і адреси відраховуються відносно заданого абсолютного адреса.

o STACK – визначення сегментна стека. Заставляє компонував об’єднати всі однойменні сегменти і обчислити адреси в цих сегментах відносно регістр ss. Тип STACK аналогічний до типу PUBLIC, за винятком того, що регістра ss є стандартним сегментним регістром. Регіст sp встановлюється на кінець об’єднаного сегмента.

Клас сегмента – це строка в лапках, яка допомагає компоновану визначити відповідний порядок слідування сегментів при зборці програми із сегментів декількох модулів.

Тип розміру сегмента – задає розмір сегмента і порядок формування фізичного адресу. Для процесорів i80386 і вище сегменти можуть бути 16- і 32-розрядними. Це впливає на розмір сегмента і порядок формування фізичного адресу всередині нього. Можливі значення:

o USE16 – 16-розрядна адресація. Фізичний адрес із 16-розрядним зміщенням.

Сегмент може містити до 64 Кбайт коду або даних;

o USE32 – 32-розрядна адресація. Фізичний адрес із 32-розрядним зміщенням.

Сегмент може містити до 4 Гбайт коду або даних.

Всі сегменти рівноправні, так як директиви SEGMENT і ENDS не містять інформацію про функціональне призначення сегментів. Щоб повідомити транслятору, які сегменти відносяться до коду, даних або стека використовують директиву ASSUME. Ця директива повідомляє про прив’язку сегмента до сегментних регістрів. Синтаксис:

ASSUME: [nothing] [[cs:ім’я_сегмента], [nothing]] [[ds:ім’я_сегмента], [nothing]] [[ss:ім’я_сегмента], [nothing]] [[es:ім’я_сегмента], [nothing]] [[fs:ім’я_сегмента], [nothing]] [[gs:ім’я_сегмента], [nothing]]

Якщо в якості операнду використовується слово nothing, то попередні значення всіх шести регістрів анулюються. Якщо слово nothing використовується замість аргументу ім’я сегмента, то в цьому випадку вибірково розривається зв’язок між сегментом і відповідним регістром.

Для простих програм, які мають по одному сегменту коду, даних і стека використовують спрощені директиви вказання моделі пам’яті (MODEL) і сегментації. Синтаксис директиви модель:

MODEL [модифікатор] модель_пам’яті [ім’я_кодового_сегмента] [, [мова] [модифікатор_мови]] [,модифікатор]

Модифікатори моделі пам’яті:

o use16 – сегменти вибраної моделі використовуються як 16-бітні; o use32 – сегменти вибраної моделі використовуються як 32-бітні; o dos – програма для DOS.

 


 

Моделі пам’яті


Таблиця 2.1.


Модель Тип кода Тип даних Призначення моделі
TINY near near Код і дані об’єднані в одну групу DGROUP, для створення

 

      програм формату .com
SMALL near near Код займає один сегмент, дані об’єднані в одну групу DGROUP
MEDIUM far near Код займає декілька сегментів, по одному на модуль; дані об’єднані в одну групу
COMPACT near far Код в одному сегменті
LARGE far far Код в декількох сегментах, по одному на модуль
FLAT near near Код і дані в одному 32-бітному сегменті (плоска модель пам’яті)

 

При використанні директиви MODEL транслятор робить доступними декілька ідентифікаторів, до яких можна звертатися під час роботи програми:

@code – фізичний адрес сегмента коду;

@data – фізичний адрес сегмента даних типу near

@fardata - фізичний адрес сегмента даних типу far

@fardata? - фізичний адрес сегмента неініціалізованих даних типу far

@stack - фізичний адрес сегмента стека.

 

 


 

Спрощені директиви вказання сегменту


Таблиця 2.2


Формат директиви Призначення
Режим MASM Режим IDEAL
.CODE [ім’я] CODESEG [ім’я] Початок або продовження сегментного коду
.DATA DATASEG Початок або продовження ініціалізованих даних. Також використовується для визначення даних типу near.
.CONST CONST Початок або продовження сегмента постійних даних (констант)
.DATA? UDATASEG Початок або продовження сегмента неініціалізованих даних. Також використовується для визначення даних типу near.
.STACK [розмір] STACK [розмір] Початок або продовження сегмента стека
.FARDATA [ім’я] FARDATA [ім’я] Початок або продовження сегмента ініціалізованих даних типа far.
.FARDATA? [ім’я] UFARDATA? [ім’я] Початок або продовження сегмента неініціалізованих даних типа far

Прості типи даних

Для описання простих типів і даних використовуються директиви резервування і ініціалізації даних. Синтаксис:

[Ім’я] оператор_резервування значення_ініціалізації

Оператор резервування:

o db – резервування пам’яті для даних розміром 1 байт; o dw – резервування пам’яті для даних розміром 2 байти; o dd – резервування пам’яті для даних розміром 4 байти; o df – резервування пам’яті для даних розміром 6 байтів; o dp – резервування пам’яті для даних розміром 6 байтів; o dq – резервування пам’яті для даних розміром 8 байтів; o dt – резервування пам’яті для даних розміром 10 байтів; Значення ініціалізації:


o ? – поле не визначене. Створюється неініціалізована змінна;

o ім’я – символічне ім’я мітки або комірки пам’яті в сегменті даних;

o значення елемента даних, яке буде занесено в пам’ять;

o n dup ( вираз ) – ітераційна конструкція, що повторює послідовне занесення в пам’ять виразу в дужках n разів.

Системи числення

Системою числення називається сукупність правил запису чисел. Системи числення поділяються на позиційні і непозиційні. Класичним прикладом позиційної системи є римська. При цьому буква I-одиниця, V-п’ять, X-десять, L-п’ятдесят, C-сто, D-п’ятьсот, M-тисяча. Для отримання кількісного еквіваленту числа в римській системі числення необхідно просумувати кількісні еквіваленти цифр. Виняток коли молодша цифра іде перед старшою. У цьому випадку потрібно не додавати цифра, а віднімати число входжень молодшої цифри. Наприклад CDXXIX= 500-100+10+10-1+10=429. В позиційній системі місце кожної цифри у числі називається позицією. Номер позиції символу мінус одиниця називається розрядом. Розряд 0 називається наймолодшим. Число А позиційній системі записується наступним виразом:


A( p ) = an-1 × p


n-1


+ an-2× p


n-2


+ ... + ap


+ ap


де p – основа системи числення; а – цифра даної системи числення; n – номер старшого розряду.

Двійкова система числення

Для двійкової системи числення набір цифр {0,1}, основа степенны р=2. Ціле n-значне двійкове число обчислюється за формулою:


A( 2) = an-1 × 2


n-1


+ an-2 × 2


n-2


+ ... + a × 21


+ a0 × 2


так для 10100111=1*27+0*26+1*25+0*24+0*23+1*22+1*21+1*20=168.

Додавання і віднімання війкових чисел виконується з переносом і позикою в (із) старшого розряду. Наприклад:

1 1 11 111 перенос 1 1 1 позика
+ 1 1001 1011   - 110 1001 0011  
1 1001 0101   001 1101 1011  
     
1 1 0011 0000   100 1011 1000  

 

Шістнадцяткова система числення

Набір цифр {0,1,2,…,9,A,B,C,D,E,F}, p=16. Ціле n-значне двійкове число обчислюється за формулою:


A(16) = an-1 ×16


n-1


+ an-2×16


n-2


+ ... + a ×161


+ a0×16


Шістнадцяткове число

F45ED23C=15*167+4*166+5*165+14*164+13*163+2*162+3*161+12*160.

Додавання і віднімання шістнадцяткових чисел:

перенос позика
+ EF15 - BCD8
C1E8   5EF4  
     
1B0FD   5DE4  

Перевод із десяткової і шістнадцяткової системи у двійкову

Алгоритм переводу із десяткової системи:

1. Розділити десяткове число А на 2. Запам’ятати частку q і залишок a.


2. Якщо в результаті кроку 1 частка q ≠ 0, то прийняти її за нове ділене і відмітити залишок а, який буде черговою значущою цифрою, вернутися до кроку 1, у якому в якості діленого використовується частка із кроку 2.

3. Якщо в результаті кроку 1, частка q = 0, то кінець роботи алгоритму. Виписати залишки у порядку, зворотному до їх отримання, що дасть двійковий еквівалент початкового числа.

Приклад переводу числа 24710в двійкову систему наведено на рис. 2.4.

Алгоритм переводу із шістнадцяткової сиситеми:

Шістнадцяткові цифри послідовні заміняються двійковими тетрадами:

e4d516€1110 0100 1101 01012

 

 

Рис. 2.4. Перевід числа 24710у двійкову систему числення

Перевод із десяткової і двійкової у шістнадцяткову систему

Алгоритм переводу із шістнадцяткової системи:

1. Розділити десяткове число А на 16. Запам’ятати частку q і залишок a.

2. Якщо в результаті кроку 1 частка q ≠ 0, то прийняти його за нове ділене, записати залишок і повернутися до кроку 1.

3. Якщо частка q=0, припинити роботу алгоритму. Виписати залишки в порядку, оберненому їх отримання.

Приклад переводу числа 3276710у шістнадцяткову систему числення показано на рис. 2.5.

 

Рис. 2.5. Перевід числа 3276710у шістнадцяткову систему числення Алгоритм переводу двійкового числа:

1. Розбити двійкове число на тетради починаючи з молодшого розряду.

2. Кожна тетрада замінюється на відповідне шістнадцяткове число. Приклад 01111010101011012€ 0111 1010 1010 1101 € 7 A A D16

2.4.5 Перевод дробових чисел

-1
-2
-m
Для переводу дробових чисел у десяткову систему використовується формула:


A( p ) = an-1 × p


n-1


+ an-2 × p


n-2


+ ... + ap


+ a0 × p


+ a-1 × p


+ a-2 × p


+ ... + a-m× p


Наприклад: 1101,01012=1*23+1*22+1*20+1*2-1+1*2-3, ABC,B2E=10*162+11*161+12*160+10*16-1+2*16-2+14*16-3

Алгоритм переводу десяткового дробу у другу систему числення:

1. Помножити дробове число на основу вибраної нової системи числення.

2. В отриманій після множення дробовій частині десяткового дробу виділити цілу частину і прийняти її в якості значення першого після коми розряду числа в новій системі числення.

3. Якщо дробова частина значення, отриманого після множення, дорівнює нулю, то зупинити процес переводу. Процес переводу можна зупинити також і у випадку, якщо досягнута необхідна точність обчислень.

Приклад переводу 0.40610€ 0.110011112показано на рис. 2.6.

 

Рис. 2.6. Перевод дробового числа в двійкову систему числення

Числа із знаком

У числах із знаком, за знак прийнято старший біт поля (байт, число, подвійне число). Якщо знаковий біт 0, то число позитивне, якщо 1 – то число негативне і припускається, що воно записане в доповнюючому коді. Доповнюючий код деякого негативного числа являє собою результат інвертування кожного біта числа плюс одиниця. Наприклад отримання доповнюючого коду числа -18510:

1. Двійковий код модуля числа 18510€ 101110012.

2. Доповнення поля числа до слова (так як числа із знаком в байті мають діапазон значень

–128 ... 127) : 101110012€ 00000000 101110012.

3. Інвертування числа і добавлення одиниці:

00000000 101110012€ 11111111 010001102+ 00000000 000000012= 11111111 010001112.

Зворотне перетворення:

1. Інвертування бітів доповнюючого коду: 11111111 010001112€ 00000000101110002.

3. Добавлення двійкової одиниці:

00000000101110002+ 00000000 000000012= 00000000 101110012= -18510.

Структура машинної команди

Машинна команда містить закодовані по певним правилам вказівки МП на виконання деяких операцій або дій. Кожна команда містить елементи, які визначають:

o що роботи (код операції (КОП));

o об’єкти над якими потрібно щось робити (операнди);


o як робити (типи операндів).

Формат машинної команди має наступний вигляд:

 

1 байт 1 або 2 байти 0 або 1 0 або 1 0,1,2 або 4 0,1,2 або 4
префікси код операції байт modr/m байт sib зміщення в команді безпосередній операнд

 


Поле префікси:

- повторення;

- розміри адресу;

- розміри операнд;

- заміни сегмента;

- блокування шини.


mod reg/КОП r/m

7 6 5 4 3 2 1 0


ss index base 7 6 5 4 3 2 1 0


 

Пр