Поточний час:
Сьогодні 21 листопада, вівторокк 2017 рік
Стрічка RSS

Введіть ваш Е-mail:

Zura-Blog 2 роки 11 місяців 2 дня

Ваш ip адрес:54.198.210.67

Доброї ночі!
Ви обновили сторінку в 4 : 28
Статистика

Кількість публікацій на блозі: 367
Кількість коментарів на блозі: 102
Кількість категорій на блозі: 17
Кількість міток на блозі: 28

Zura – Blog
Яндекс.Метрика UA TOP Bloggers

zura - blog 203Привіт всім відвідувачам Zura – Blog, сьогодні продовжую характеризувати мови програмування, правда сьогднішня публікація буде стосуватись програмуванню на асемблері.

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

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

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

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

Процессор, або мікропроцессор компютера — складний електронний пристрій, складається із безліч блоків. Але для початку достатньо знати головні з них: це дешифратор команд, арифметико – логічний пристрій (АЛУ), і набір внутрішніх, зверхшвидкодіючих, адресуємих ячейок памяті  (регістрів).

Дешифратор команд — коли отримує від ОЗУ код команди, запускає цепочку відповідно дій. Арифметико – логічний пристрій (АЛУ) проводить елементарну обробку даних, які були попередньо отримані від ячейок ОЗУ в внутрішні регістри процесора, в виді набору рівнів напруги. Після закінчення обробки, дані перенаправляються в відповідні ячейки ОЗУ або регістри портів виведення.

В ІВМ–сумісних машинах використовується архітектура з загальною памятю, неймановська архітектура. Тут в цепочці сусідніх байтів ОЗУ знаходяться і коди команд і дані. Зрозуміло, що перший байт любої програми — код команди. Що в наступному байті все залежить від виду команди. Якщо для її виконання потребуються дані, то вони знаходяться в наступній ячейці, або ячейках. В процесі виконання команди ці дані будуть зчитані в внутрішні регістри МП і оброблені.

Розглянемо таку послідовність байтів

10110000  00000010 10110011 00000011 11110110 11100011

Це невелика програма, записана в двоїчних кодах, виконує множення двух цілих чисел.

Перший байт — команда: записати в регістр мікропроцесора з іменем “AL” число, представлене наступним (другим) байтом. Це 210.

Третій байт  також команда : записати в регістр  “BL” число 310 (четвертий байт).

Пятий і шостий байт – команда : помножити вміст регістра  “AL” на число регістра “BL”.

Після виконання цієї команди результат 610  (00000110) буде знаходитись в регістрі  “AL”.

В виді послідовності 0 і 1 сприймати цю програму дуже не просто. Можно для людини застосувати запис в десятичному виді, але такий переклад туди – сюди, досить не проста процедура. Крім того, часто буває важлива інформація про стан окремих байтів (встановлений – 1, скинений – 0),  в десятичному виді тяжко виділити.  

Тому, при програмуванні в кодах, на ассемблері, а деколи і при високорівневому програмуванні, використовують шістнадцятичне представлення кодів. Тоді ця цепочка буде виглядати так:

В0 02 В3 F6 E3

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

Мова ассемблера

Для створення програм в кодах необхідно не тільки вивчити архітектуру компютера, але й добре знати систему команд його процесора. Мікропроцесори можуть виконувати  більше ніж декілька сотень команд, це достатньо прості елементарні дії по обробці (завантажити, переслати, поділити, порівняти).

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

 

Ассемблер — займає проміжуточне місце між мовами високого рівня і кодами. Ця мова являється машинно – залежною і відображає апаратні особливості тої ЕВМ, для якої розроблена.

Тому скільки процесорів, стільки і ассемблерів

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

Ассемблерна програма складається із послідовності операторів, кожен із яких відповідає як за звичай одній машинній команді “один рядок — одна команда”.

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

Нижче фрагмент програми множення на ассемблері виглядає так :

MOV AL,2

MOV BL,3

MUL BL

Move — з англійської означає “переслати” а multiply “помножити”, інструкції програми перевтілюються в цепочку кодів (цифр), звісно ж транслятором.

Ось і таке ознайомлення з низькорівневим програмуванням. Мабуть більшість з вас хто захоче займатись програмування, вибере високорівневе програмування, а з низькорівневим навряд чи буде стикатись.

В принципі мета публікації заключалась в тому щоб правильно зрозуміти і уявити собі роботу компютера або іншої мікропроцесорної системи. Якщо  когось з вас зацікавить програмування, то  це гарний симптом, якщо ні то також не смертельно.

Ну що ж висновок, похоже що коди для процесора, це як ноти для музиканта. На цьому все до зустрічі.

Leave a Reply

Your email address will not be published. Required fields are marked *