Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
i: Практична робота №1 до лекції №1.
Практична робота № 1.
Реалізація лінійних алгоритмів на мові машинних команд.
Мета роботи:
Отримання практичних навичок розробки програми на мові машинних команд (ММК).
При виконанні лабораторної роботи для кожного завдання вимагається написати програму на мові ММК. Введення даних здійснюється з клавіатури.
Варіанти індивідуальних завдань. Див. додаток 1.
Вимоги до звіту. Див. додаток 2.
Теоретична частина.
Щоб навчитися програмувати, треба розуміти, як працює комп'ютер. А для цього зовсім не обов'язково вивчати проходження електричних сигналів по мікросхемах, але знати архітектуру комп'ютера - бажано.
Однозначно визначити поняття архітектури ЕОМ досить важко, тому що за бажання в нього можна включити усе, що пов'язано з комп'ютерами взагалі і якоюсь конкретною моделлю комп'ютера зокрема.
Архітектура ЕОМ - це комплексне поняття, деяке абстрактне представлення ЕОМ, яке відбиває її структурну, схемотехніку і логічну організацію.
Розглянемо структурну схему комп'ютера.
Можна виділити чотири структурні компоненти комп'ютера.
Процесор. Виконує функцію обробки даних і здійснює контроль за діями комп'ютера, Якщо в системі є тільки один процесор, він часто називається центральним процесором (central process - ing unit - CPU).
Оперативна пам'ять. Тут зберігаються дані і програми. Як правило, ця пам'ять є тимчасовою.
Пристрої введення-виводу. Служать для передачі даних між компютером і зовнішнім оточенням, що складається з різних периферійних пристроїв, в число яких входять вторинна пам'ять, комунікаційне обладнання і термінали.
Системна шина. Служить для взаємодії між процесором, основною пам'яттю і пристроями введення-виведення
Оперативна пам'ять.
Комірку комп'ютера можна розглядати як набір з декількох перемикачів, кожен з яких знаходиться в одному з двох станів : верхньому (його часто означають одиницею) або нижньому (його означають нулем). У комірці машини таких перемикачів, як правило, вісім (кожен перемикач називають бітом і говорять, що в осередку 8 біт або 1 байт). Положення перемикачів означають цифрами: 1 - вкл.; 0 - вимк. Т. ч. вміст комірки може бути представлено у вигляді послідовності нулів і одиниць. Наприклад
1 0 0 0 1 1 0 0
Спробуємо підрахувати, скільки різних чисел здатний вмістити така комірка. Для цього уявимо комірку, в якій не 8, а всього один перемикач c двома станами: 1 і 0 (ВЕРХ і НИЗ). Значить, в такій комірці можуть зберігатися два числа.
Якщо тепер додати до комірки ще один перемикач, число її станів подвоїться:
00 01 10 11
Для 8 перемикачів число можливих станів вже 28=256. Значить, в комірку з восьми біт можна записати числа від 0 до 255 (всього 256).
Елементарною одиницею пам'яті усіх сучасних комп'ютерів є байт, що складається з восьми двійкових розрядів. Кожен байт має свою адресу. У найбільш поширеній 32-розрядній архітектурі адреси байтів змінюються від 0 до 232 - 1 з кроком 1. Пам'ять, з логічної точки зору, можна розглядати як масив байтів : можна прочитати або записати байт із заданою адресою.
Проте фізично при роботі з пам'яттю по шині передаються не окремі байти, а машинні слова. У 32-розрядній архітектурі машинне слово - це чотири що підряд йдуть байта, при цьому адреса молодшого байта кратна чотирьом. (У 64-розрядній архітектурі машинне слово складається з восьми байтів.)
Однією з найважливіших характеристик процесора є розрядність адреси. Нею обумовлений об'єм пам'яті, що адресується - адресного простору. Системи з n - розрядною адресою здатні адресувати 2n елементів пам'яті. Наприклад, системи з 16-розрядною адресою - 64Кбайт (65536) комірок, з 32-розрядним - 4 Гбайта (4 294 964 296), 64 - 18 446 744 073 709 551 616 елементів пам'яті.
Приклад.
Нехай оперативна пам'ять має розмір 256 байт і ділиться на осередки (машинні слова) розміром 4 байти.
Адреси байтів лежать в інтервалі від 0 до 255. Але це десяткові адреси. А в комп'ютері вони двійкові. Переведемо число 25510 в двійкову систему. Це можна зробити діленням на 2 або іншим способом:
255 = 256-1 = 28-1 = (100000000-1)2 = 111111112.
Отже, діапазон адрес байтів змінюється від
0 до 111111112
У шістнадцятковій системі це відповідає діапазону від
0 до FF
(шістнадцяткова система числення має наступний набір символів :
0,1,2, ... 9, A, B, C, D, E, F
Групи з 4 байтів утворюють осередки. Адреса осередку дорівнює адресі молодшого байта, що входить в неї (байта з меншим номером).
Схематично структуру оперативної пам'яті учбового комп'ютера можна представити так:
Адреси комірок |
Адреси байтів |
|||
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 байт (8 біт).
Всього в пам'яті 64 комірок (256/4). У комірці може зберігатися або число, або команда програми.
Розрядність адреси (довжина адресного коду) дорівнює 8 біт, тому розмір адресного простору дорівнює 28=256 байт.
Учбовий комп'ютер (УК) працює тільки з цілими числами у форматі з фіксованою точкою.
Згідно з принципом Неймана - принципом програми, що зберігається в пам'яті, разом з даними в оперативну пам'ять комп'ютера поміщається програма управління його роботою ( у процесорів гарвардської архітектури пам'ять для зберігання команд і даних розділена). Спосіб представлення програми "зрозумілий" процесору ЕОМ називається мовою машинних команд - ММК. Програма на ММК реалізує алгоритм розвязання обчислювальної задачі на комп'ютері-виконавцеві.
Машинна команда повинна містити в собі відповіді на наступні питання:
Нехай машинні команди мають трьохадресну структуру (формат). Це означає, що комірка, в якій зберігатися команда, містить три поля для зберігання адрес і одне поле для зберігання кода операції. Т.ч. комірка розміром 4 байти ділиться на 4 частини (по одному байту на кожну частину).
Їх позначимо таким чином:
КОП - код операції, А1 - адреса першого операнда, А2 - адреса другого операнда, А3 - адреса результату.
КОП |
А1 |
А2 |
А3 |
Операндами називають дані, з якими проводиться операція. У арифметичних операціях це доданки, співмножники, зменшуване і таке, що віднімається, ділиме і дільник.
Приклад команди складання двох чисел :
КОП |
А1 |
А2 |
А3 |
01 |
44 |
48 |
4С |
де |
01 - це код операції складання; |
44 - адреса комірки, в якій зберігається перший доданок; |
|
48 - адреса комірки, в якій зберігається другий доданок; |
|
4С - адреса комірки, в яку поміщається результат (сума). |
Для усіх арифметичних операцій відповідь на питання: "Яку команду виконувати наступною"? завжди однаковий - наступною виконується команда, що знаходиться в наступному осередку.
Записувати команди будемо в шістнадцятковій формі. У пам'яті ЕОМ команда має двійковий вигляд. Використовуючи зв'язок між двійковою і шістнадцятковою системами, можна отримати внутрішнє представлення приведеної команди.
КОП |
А1 |
А2 |
А3 |
00000001 |
01000100 |
01001000 |
01001100 |
У таблиці.1 знаходиться система команд нашого УК .
Запис(A2) ==> A3 потрібно розуміти так: вміст осередку з адресою A1 скласти з вмістом осередки з адресою A2 і результат записати в осередок A3; (A1) ==> A3 - вміст осередку A1 занести (скопіювати) в осередок A3.
Таблиця 1.
КОП |
Операція |
Пояснення |
00 |
Пересилка |
((A1) ==> A3 |
01 |
Складання |
((A1) + (A2) ==> A3 |
02 |
Віднімання |
((A1) - (A2) ==> A3 |
03 |
Множення |
((A1) x (A2) ==> A3 |
04 |
Ділення без остачі |
((A1) div (A2) ==> A3 ціла частина від ділення |
0A |
Умовний перехід |
Перехід до комірки з адресою A3 по регістру-ознаці результату W=1 |
0B |
Безумовний перехід |
Безумовний перехід до комірки з адресою A3 |
77 |
Останов |
Припинення виконання програми |
Кожне число, що бере участь в розрахунках, займає елемент пам'яті, розміром 4 байти. Програміст повинен сам розподіляти пам'ять під дані. Команди програми теж займають пам'ять.
Приклад розвязання задачі.
Постановка задачі.
Обчислити цілочисельний вираз
( А + B ) x C
де А, В, С - цілі числа.
Під величини А, В, С виділимо елементи пам'яті з адресами:
Ідентифікатор |
А |
В |
С |
Адреса комірки |
20 |
24 |
28 |
Результат обчислення вираження помістимо в комірку 2С.
Фрагмент програми, що вирішує цю задачу :
Адреса |
КОП |
А1 |
А2 |
А3 |
Пояснення |
|
0C |
01 |
20 |
24 |
2C |
(20) + (24) ==> 2C |
A+B |
10 |
03 |
2C |
28 |
2C |
(2C) x (28) => 2C |
(A+B) x C |
У графі "Адреса" вказуються номери комірок, в яких розташовуються команди. Команди цієї програми виконуються в "природньому порядку" зростання адрес : спочатку 0С, потім 10.
Комірці з адресою 2С значення присвоюється двічі: спочатку результат підсумовування, потім - множення. Перший результат - проміжний, другий - остаточний.
Проте ця програма не може бути виконана тому, що:
Початкові дані задаються введенням.
Введення - це занесення даних в оперативну пам'ять через пристрої введення. Пристроєм введення на УК є клавіатура.
Результати обчислень мають бути виведені. Виведення - це віддзеркалення інформації з оперативної пам'яті на пристроях виводу.
Пристроєм виведення УК є дисплей.
Домовимося про наступний спосіб організації введення-виводу. З клавіатурою і дисплеєм пов'язаний останній елемент пам'яті - комірка FC. Називатимемо її буферною коміркою введення-виводу.
При введенні, значення набиране на клавіатурі, потрапляє в комірку FC. На дисплеї постійно відбивається вміст осередку FC в шістнадцятковому виді. Тому для виведення значення з будь-якого елементу пам'яті його потрібно переслати в комірку з адресою FC.
Комірка FC грає роль своєрідної відеопам'яті. На індикаторі користувач завжди бачить вміст комірки FC.
Структура команди пересилки наступна:
00 |
А1 |
- - |
А3 |
Ця команда, фактично, двоадресна. Вміст другої адреси (А2) не впливає на її виконання (надалі на місці другої адреси писатимемо нулі). В результаті виконання команди пересилки значення в комірці А3 стає рівним (А1). При цьому значення в комірці А1 не міняється. Інакше це називається так: комірці А3 присвоюється значення комірки А1.
Пояснимо це на прикладі.
Нехай в комірці з адресою 10 знаходиться число 5, а з адресою 20 - число 7:
Розмістимо двійкове представлення числа 5 в одному байті: |
Розмістимо двійкове представлення числа 7 в одному байті: |
Система числення Тетради Двійкова 0000 0101 Шістнадцяткова 0 5 |
Система числення Тетради Двійкова 0000 0111 Шістнадцяткова 0 7 |
Розмістимо числа 5 і 7 в чотирьох байтах:
Адреси байтів |
||||
10 |
00 |
00 |
00 |
05 |
20 |
00 |
00 |
00 |
07 |
Після виконання команди
00 10 00 20
їх значення стануть однаковими
Адреси байтів |
||||
10 |
00 |
00 |
00 |
05 |
20 |
00 |
00 |
00 |
05 |
Повернемося до нашої програми. На дисплей треба вивести результат обчислень, отриманий в комірці з адресою 2С. Для цього його слід присвоїти комірці FC. Значить, команда виводу буде такою:
00 2С 00 FC.
Тепер запрограмуємо введення значення А в комірку з адресою 20.
00 FC 00 20.
Процесор, виявивши команду, у якої код операції дорівнює 00 і А1=FC, перериває роботу і чекає дій користувача. Користувач набирає на клавіатурі число. Це число заноситься в комірку з адресою FC і, одночасно, висвічується на дисплеї. Потім користувач натискає клавішу <ВВЕДЕННЯ>. Процесор виконує команду пересилки з комірки з адресою FC в комірку з адресою 20. Введення завершилося, процесор переходить до виконання наступної команди.
Запишемо команди введення і виводу в загальному вигляді:
00 FC 00 A3 |
- введення числа в комірку з адресою А3 |
00 А1 00 FC |
- виведення числа з комірку з адресою А1 |
А тепер запишемо програму обчислення виразу (А+В)*С в остаточному виді.
Домовимося, що будь-яка програма займатиме комірки на початку пам'яті. Перша команда завжди знаходиться в комірці з адресою 00.
Адреса комірки |
КОП |
А1 |
А2 |
A3 |
Пояснення |
00 |
00 |
FC |
00 |
20 |
введення А |
04 |
00 |
FC |
00 |
24 |
введення В |
08 |
00 |
FC |
00 |
28 |
введення С |
0C |
01 |
20 |
24 |
2C |
A+B |
10 |
03 |
2C |
28 |
2C |
((A+B)*C |
14 |
00 |
2C |
00 |
FC |
виведення результату |
18 |
77 |
00 |
00 |
00 |
Стоп |
20 |
00 |
00 |
00 |
00 |
А |
24 |
00 |
00 |
00 |
00 |
В |
28 |
00 |
00 |
00 |
00 |
С |
2С |
00 |
00 |
00 |
00 |
результат |
У комірці з адресою 18 знаходиться команда останову з кодом операції 77. Результат її виконання - зупинка роботи машини. Вміст адресної частини в цій команді не має значення.
Припустимо, що за цією програмою ми хочемо обчислити вираз при значеннях А=26, В=74, С=3.
Процесор починає виконувати програму з команди, що знаходиться в осередку 00. У нашій програмі це команда введення А. ЕОМ зупиняється і чекає дій користувача. Користувач набирає на клавіатурі шістнадцятковий код числа 26:
00 00 00 1А <ВВОД>
Після натиснення клавіші <ВВЕДЕННЯ> число 26 введено в комірку з адресою 20.
Наступна команда вимагає введення значення В. Користувач вводить:
00 00 00 4А <ВВОД>
Останнім вводиться значення С:
00 00 00 03 <ВВОД>
Наступні команди програми виконуються автоматично. Після виконання команди виводу (комірка з адресою 14) відбувається зупинка. Вона потрібна для того, щоб користувач встиг розгледіти результат на дисплеї, якщо в програмі декілька команд виводу. Для введених значень початкових даних результат на дисплеї буде таким:
00 00 01 2С
Програма продовжить виконання після натиснення клавіші <ВВЕДЕННЯ>. Робота програми завершиться по команді останову.
Отриманий результат - це шістнадцяткова форма внутрішнього представлення. Щоб отримати відповідь в десятковій системі, треба виконати переведення: 12С16 = 30010
Ми бачимо, що числа вводяться і виводяться в шістнадцятковому виді. Виконуючи розрахунки на сучасних ЕОМ, користувач має справу з десятковими числами. Про двійкову і шістнадцяткову системи він може взагалі нічого не знати. Але не потрібно забувати, що наш комп'ютер - учбовий. На його прикладі ми прагнемо зрозуміти, як працює ЕОМ. Рідна мова комп'ютера - це мова машинних команд і двійкових чисел. Автоматичне переведення чисел з двійкової в десяткову систему і назад проводиться за допомогою спеціальних програм переведення, а це вже програмний сервіс. Але ми зараз розглядаємо ЕОМ, позбавлену всякого програмного забезпечення. З такою машиною можна спілкуватися тільки на мові двійково-шістнадцяткових кодів.
Додаток 1.
Варіанти індивідуальних завдань.
Повернутися назад
Додаток 2.
Вимоги до звіту.
Звіт по лабораторній роботі повинен відповідати наступній структурі.
Повернутися назад
PAGE 9
FILENAME \p C:\TEXNICUM_2012\ASM_2012\Lesson_ASM_01_MMK\Lab\ASM_01_MMK_I_lineynye_LAB_ukr.doc DATE \@ "M/d/yyyy" 9/7/2013