C++_2011-2012
Архітектура комп'ютера
Комп'ютер складається з центрального процесора (ЦП) і пам'яті, пристроїв введення-виводу, що з‘єднуються ситемною шиною. Шина надає можливість компонентам комп'ютера обмінюватия даними.
Елементарна одиниця пам'яті - байт ( вісім двійкових розрядів). Кожен байт має свою адресу. У 32-розрядній архітектурі адреси байтів змінюються від 0 до 232 - 1 з кроком 1. Пам'ять, з логічної точки зору – це масив байтів : можна прочитати або записати байт із заданою адресою.
Фізично по шині передаються не окремі байти, а машинні слова. У 32-розрядній архітектурі машинне слово - це чотири байта. У 64-розрядній архітектурі - вісім байтів.
Розглянемо роботу комп'ютера на простому прикладі.
ОП має розмір 256 байт і ділиться на комірки (машинні слова) розміром 4 байти.
Адреси байтів лежать в інтервалі від 0 до 255. В двійковій системі: від о до 111111112.
У шістнадцятиричній системі - від 0 до FF.
Адреса комірки дорівнює адресі молодшого байта, що входить в неї (байта з меншим номером).
Схема пам'яті :
Адреси осередків |
Байти |
|||
00 |
00 |
01 |
02 |
03 |
04 |
04 |
05 |
06 |
07 |
08 |
08 |
09 |
0A |
0B |
0C |
0C |
0D |
0E |
0F |
10 |
10 |
11 |
12 |
13 |
14 |
14 |
15 |
16 |
17 |
.. |
|
|
|
|
F8 |
F8 |
F9 |
FA |
FB |
FC |
FC |
FD |
FE |
FF |
Адреси комірок міняються з кроком 4. Перший комірка має адресу 00, остання - FC.
Адреси представляються шістнадцятиричними числами (вісім двійкових розрядів). Отже, при зберіганні адреси в пам'яті вона займає 1 байт. Всього в пам'яті 64 осередки (256/4).
У осередку може зберігатися або число, або команда програми.
Цей працює тільки з цілими числами.
Приклад. Обчислити вираз (А+B)xC. А=1, В=2, С=3
Під величини А, В, С виділимо елементи пам'яті з адресами:
Адреси осередків |
Байти |
|||
00 |
|
|
|
|
04 |
|
|
|
|
08 |
|
|
|
|
0С |
|
|
|
|
... |
|
|
|
|
20 |
А |
|||
24 |
В |
|||
28 |
С |
|||
2С |
результат |
|||
|
|
|
|
|
FC |
FC |
FD |
FE |
FF |
Згідно з принципом Неймана разом з даними в ОП поміщається програма, що реалізує алгоритм рішення обчислювальної задачі .
Спосіб представлення програми "зрозумілий" процесору називається мовою машинних команд - ММК.
Машинна команда містить в собі відповіді на наступні питання:
яку операцію виконати? (складання, віднімання і т.п.)
де знаходяться операнди? Операнди це дані, з якими проводиться операція (доданки, співмножники, зменшуване, ділене і дільник).
куди помістити результат операції?
Нехай машинні команди мають трьохадресну структуру (формат). Тобто, комірка, в якій зберігатися команда, ділиться на 4 частини (по одному байту на кожну частину).
Їх означатимемо таким чином:
КОП |
А1 |
А2 |
А3 |
КОП - код операції.
А1 - адреса першого операнда.
А2 - адреса другого операнда.
А3 - адреса результату.
Команда складання чисел А+B має вигляд :
КОП |
А1 |
А2 |
А3 |
01 |
20 |
24 |
2С |
де |
01 - код операції складання; |
|
20 - адреса комірки, в якій зберігається перший доданок; |
|
48 - адреса комірки, в якому зберігається другий доданок; |
|
4С - адреса комірки, в який поміщається результат. |
В двійковій системемі команда має вигляд
КОП |
А1 |
А2 |
А3 |
0000 0001 |
0010 0000 |
0010 0100 |
0100 1100 |
Наступна машина команда обчислення виразу (А+B)xC має вигляд:
03 |
2C |
28 |
2C |
Розташуємо ці команди в ОП, починаючи с адреси 08:
Адреси комірок |
Байти |
Пояснення |
|||
00 |
|
|
|
|
|
04 |
|
|
|
|
|
08 |
|
|
|
|
|
0С |
01 |
20 |
24 |
2С |
A+B |
10 |
03 |
2C |
28 |
2C |
(A+B) x C |
... |
|
|
|
|
|
20 |
00 |
00 |
00 |
01 |
А |
24 |
00 |
00 |
00 |
02 |
В |
28 |
00 |
00 |
00 |
03 |
С |
2С |
|
|
|
|
результат |
|
|
|
|
|
|
FC |
|
|
|
|
|
|
FC |
FD |
FE |
FF |
|
Команди цієї програми виконуються в "природному порядку" зростання адрес : спочатку 0С, потім 10.
Комірці 2С значення присвоюється двічі: спочатку проміжний результат підсумовування, потім остаточний – множення.
А тепер припустимо, що початкові дані ми хочемо вводити з клавіатури, а результати обчислень хочемо побачити на єкрані монітора.
Введення – це занесення даних в ОП через пристрої введення. В нашому випадку це клавіатура.
Вивід інформації – це відображення інформації з ОП на пристроях виводу. (дисплей).
Припустимо, що з клавіатурою і дисплеєм пов’язаний останній елемент пам’яті – комірка FC – буферна комірка введення-виводу. Вміст цієї комірки постійно відбивається на дисплеї в шістнадцятиричному виді.
При введенні, значення з клавіатури потрапляє в комірку FC і ми бачимо його на екрані. Для виведення значення з будь-якого елементу пам’яті його потрібно переслати в FC.
FC виконує роль своєрідної відеопам’яті.
Для виконання цих дій використовується команда пересилки, що має наступну структуру.
00 |
А1 |
- - |
А3 |
Значення з комірки, яка має адресу А1 пересилається в комірку з адресою А1. В результаті виконання команди значення в комірці А3 стає рівним (А1). Значення в комірці А1 не міняється.
Введемо значення 4, 5 6 в комірки з адресами 20, 24, 28. А на дисплей виведемо результат обчислень, отриманий в осередку 2С.
Адреси комірок |
Байти |
Пояснення |
|||
00 |
00 |
FC |
00 |
20 |
А |
04 |
00 |
FC |
00 |
24 |
В |
08 |
00 |
FC |
00 |
28 |
С |
0С |
01 |
20 |
24 |
2С |
A+B |
10 |
03 |
2C |
28 |
2C |
(A+B) x C |
14 |
00 |
2С |
00 |
FC |
Вивід результату |
18 |
77 |
00 |
00 |
00 |
|
... |
|
|
|
|
|
20 |
00 |
00 |
00 |
04 |
А |
24 |
00 |
00 |
00 |
05 |
В |
28 |
00 |
00 |
00 |
06 |
С |
2С |
00 |
00 |
00 |
36 |
результат |
|
|
|
|
|
|
FC |
|
|
|
|
|
|
FC |
FD |
FE |
FF |
|
Процесор, виявивши команду, у якої код операції дорівнює 00 і А1=FC, перериває роботу і чекає дій користувача. Користувач набирає на клавіатурі число, яке заноситься в комірку FC і, одночасно, висвічується на дисплеї. Після натискання клавіши <ВВЕДЕННЯ>, процесор виконує команду пересилки з комірки FC в комірку 20 і процесор переходить до виконання наступної команди.
Після виконання команди виводу (осередок 14) відбувається зупинка. Вона потрібна для того, щоб користувач встиг розгледіти результат на дисплеї, якщо в програмі декілька команд виводу.
У кожній програмі повинна бути команда зупинка роботи програми (в нашому випадку код операції дорівнює 77).
А тепер розглянемо, як процесор виконує машинні команди.