Асемблер

Що таке Асемблер?

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

Отже, розглянемо програмування на Асемблері. Але перш згадаємо системи числення.

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

У комп'ютерах застосовується двійкова система числення. Чому так? Електронні елементи, з яких побудований комп'ютер, можуть сприймати електричний сигнал. Їх стан змінюється в залежності від наявності або відсутності сигналу. Отже, важливо - є сигнал чи ні сигналу, так чи ні. Двійкове числення добре описує цю картину, адже в ньому є тільки дві цифри: 0 і 1. У довічних цифр є спеціальна назва - біт.

Якщо ви не знайомі з двійковим численням, то зараз самий момент познайомитися. Без розуміння двійковій системи числення неможливо освоїти мову Асемблер. Просту статтю за допомогою бінарного числення дивіться «Двійкове числення».

Шістнадцятиричне числення

Шістнадцятиричне числення застосовується для спрощення роботи з двійковій системою числення. 4-ре двійкові цифри замінюються однією шестнадцатиричной, що здорово упрошает запис. У комп'ютерній техніці широко використовується шестнадцатиричное числення. Якщо ви не знайомі з шістнадцяткові численням, то можете прочитати статтю «Шістнадцяткова система числення», яка допоможе вам розібратися в цій темі. Без розуміння шестнадцатиричной системи числення неможливо освоїти мову Ассемблера.

Що таке «біт»?

Біт - це найменша одиниця інформації. Слово «біт», по-англійськи bit, походить від «binary digit», що значить «двоичная цифра». Біт може бути одиницею або нулем, адже в двійковій системі числення є тільки дві цифри: 0 і 1.

Що таке «байт»?

Байт - це набір, що складається з 8-ми бітів. Байт, як і біт, - це одиниця інформації. Приклад байта:

0 0 0 0 0 0 0 1

Біти в байті нумеруються справа наліво, від нуля до семи. У прикладі самий правий біт містить одиницю, його номер - нуль, другий праворуч біт має номер один і містить нуль і т.д.

У нашому прикладі в байті зберігається двійковечисло один. А яке двійкове число зберігається в байті:

1 0 1 0 1 0 1 0

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

1 * 27 + 0 * 26 + 1 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 =
128 + 0 + 32 + 0 + 8 + 0 + 2 + 0 = 170
Наверх

Біт S

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

Представлення від'ємних чисел в комп'ютері

Щоб записати від'ємне число потрібно:
1. Інвертувати біти числа, тобто нулі замінити одиницями, а одиниці нулями;
2. До отриманого числа додати одиницю.

Приклад. Дано двійковечисло 01101010, його десяткове подання одно 106. Одержимо з нього негативне число, для цього інвертуємо вихідне число:

01101010 - > 10010101

тобто нулі замінені одиницями, а одиниці нулями. Далі до отриманого числа додаємо одиницю:

10010101 + 00000001 = 10010110

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

Для знаходження модуля отриманого негативного числа також потрібно інвертувати біти і додати одиницю. інвертуємо:

10010110 - > 01101001

додаємо одиницю:

01101001 + 0000001 = 01101010

Отримали модуль числа 10010110. Зверніть увагу, що старший біт модуля 01101010 дорівнює нулю, а це говорить, що число позитивне.

Наверх

Представлення дійсних чисел в нормалізованому вигляді

Число педставляют в виде:

pn * m

де p - основа системи числення,
n - порядок, це показник ступеня, представлений цілим числом,
m - мантиса.

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

Крім того один біт потрібен для вказівки знака числа.

Знак може мати і порядок, щоб врахувати це до порядку додають зсув. Порядок плюс зміщення називаються характеристикою. Для одинарної точності (single precision) зсув дорівнює 127, значить, якщо в характеристиці зберігається 127, то порядок дорівнює нулю, т.к. 127 - 127 = 0. Якщо в характеристиці зберігається 135, то порядок дорівнює 135 - 127 = 8. Якщо в характеристиці зберігається число 126, значить порядок дорівнює 126 - 127 = -1. Так за рахунок зміщення враховується знак порядку, а значить немає необхідності в додатковому знаковому бите для порядку.

Для подвійної точності (double precision) зсув дорівнює 1023.

Тепер що таке нормалізований вид числа. Для прикладу розглянемо число десяткове 18,5. Уявімо його в нормалізованому вигляді:

102 * 0,185

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

Інший приклад представлення числа в нормалізованому вигляді. Дано число 0,0123, представити його в нормалізованому вигляді. Робимо так:

10-1 * 0,123

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

Ось чому використовується термін «числа з плаваючою комою», кома переміщається для отримання нормалізованого виду числа.

А тепер розглянемо уявлення двійкових чисел у нормалізованому вигляді. Дано число 0,01b, представити його в нормалізованому вигляді. Отримуємо:

2-2 * 1.0b

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

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