- •Архітектура і система команд мікропроцесорів
- •1. Архітектура еом
- •1. 1. Поняття про архітектуру еом
- •1.2. Програмна модель мікропроцесора Intel Pentium III
- •Сегментні регістри
- •Регістри стану і керування
- •1.4. Організація пам’яті
- •Сегментована модель пам’яті
- •Формування фізичного адреса в реальному режимі
- •Типи даних
- •Формат команд
- •Типи переривань
- •Структура програми на асемблері
- •Синтаксис асемблера
- •Директиви сегментації
- •Прості типи даних
- •Системи числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Перевод із десяткової і шістнадцяткової системи у двійкову
- •Перевод із десяткової і двійкової у шістнадцяткову систему
- •Числа із знаком
- •Структура машинної команди
- •Способи задання операндів
- •Адресація пам’яті
- •Функціональна класифікація машинних команд
- •Команди обміну даними
- •Команди пересилання даних
- •Ввід-вивід в порт
- •Робота з адресами і вказівниками
- •Перетворення даних
- •Робота із стеком
- •Арифметичні цілочисельні команди
- •Цілі двійкові числа
- •Додавання двійкових чисел без знаку
- •Додавання двійкових чисел із знаком
- •Віднімання двійкових чисел без знаку
- •Віднімання двійкових чисел із знаком
- •Множення двійкових чисел без знаку
- •Множення двійкових чисел із знаком
- •Ділення двійкових чисел без знаку
- •Ділення двійкових чисел із знаком
- •Команди перетворення типів
- •4.2. Десяткові числа
- •Неупаковані bcd-числа
- •Упаковані bcd-числа
- •Логічні команди
- •Логічні команди
- •Команди зсуву
- •Лінійний зсув
- •Циклічний зсув
- •Додаткові команди зсуву
- •Команди передачі керування
- •Команди безумовного переходу;
- •Команди безумовного переходу
- •Процедури
- •Умовні переходи
- •Команда порівняння cmp
- •Команди умовного переходу і прапори
- •Команди умовного переходу і регістр ecxlcx
- •6.4. Організація циклів
- •Ланцюжкові команди
- •Пересилання ланцюжків
- •Порівняння ланцюжків
- •Сканування ланцюжків
- •Завантаження ланцюжків
- •Формування ланцюжків
- •Ввід-вивід елементів у порт
- •Складні структури даних
- •Доступ до елементів масиву
- •Двомірні масиви
- •8.2. Структури
- •Описання шаблона структури
- •Визначення даних з типом структури
- •Методи роботи із структурою
- •Об’єднання
- •Визначення екземпляру запису
- •Робота з записами
- •Макрозасоби мови асемблера
- •Макрокоманди
- •Макродирективи
- •Директиви while і rept
- •Директиви irp і irpc
- •Директиви умовної компіляції
- •Директиви компіляції по умові
- •Директиви if і ife
- •Директиви ifdef і ifndef
- •Директиви ifb і ifnb
- •Директиви ifidn, ifidni, ifdif і ifdifi
- •9.4. Директиви генерації помилок
- •%Out недопустиме ім’я регістра
Доступ до елементів масиву
Адрес елемента в масиві:
база + (індекс * розмір_елемента),
де база – початковий (базовий) адрес масиву;
індекс – номер елемента мінус одиниця (нумерація елементів масива в асемблері починається з 0.
Режими адресації:
o індексна адресація із зміщенням – ефективний адрес формується із двох компонент:
o постійної (базової) – вказівкою прямого адреса масиву у вигляді імені ідентифікатора масиву;
o змінної (індексної) – вказівкою імені індексного регістра.
mas dw 0,1,2,3,45
…
mov si,4
mov ax, mas[si] ; помістити 3-й елемент масива mas у регістр ax
o базова індексна адресація із зміщенням – ефективний адрес формується із трьох компонент:
o постійної (необов’язковий елемент) – вказівкою прямого адреса масиву у вигляді імені ідентифікатора масива;
o змінної (базової) – вказівкою імені базового регістра (любий із регістрів загального призначення);
o змінної (індексної) – вказівкою імені індексного регістра (любий із регістрів загального призначення, за винятком esp/sp. Індекс може масштабуватися - i*2, i*4, i*8. Так як ця можливість появилася в МП моделі i486, то необхідно використовувати в програмі директиву .486).
Домовленості, щодо назв адресацій:
o якщо для описання адреса використовується тільки один регістр (базовий), то мова йде про базову адресацію:
; пересилання байта в область даних по адресу ebx mov al,[ebx]
o якщо для задання адреса використовується пряма адресація (у вигляді ідентифікатора) у поєднанні з одним регістром, то це індексна адресація:
; скласти вміст eax із подвійним словом по адресу mas + (ebx)*4 add eax, mas[ebx*4]
Базово-індексну адресацію можна об’єднувати з прямою або з вказанням безпосереднього значеня:
mov ax, mas[ebx][ecx*2] ; адрес операнда [mas+(ebx)+(ecx)*2]
…
sub dx, [ebx+8][ecx*4] ; адрес операнда [(ebx)+8+(ecx)*4]
Двомірні масиви
Спеціальних даних для описання такого типу даних в асемблері нема. Двомірний масив необхідно моделювати. Адрес (i, j) елементу обчислюється по формулі:
(база + кількість_елементів_в_строці*розмір_елемента*i+j)
де i=0,…,n-1 – номер строки; j=0,…m-1 – номер стовпця.
Організувати адресацію двомірного масиву можна з використанням базово-індексної адресації:
o поєднання прямого адреса, як базового компонента адреса, і двох індексних регістрів для зберігання індексів:
mov ax, mas[ebx][esi]
o поєднання двох індексних регістрів, один із яких є базовим і індексним, а другий –
тільки індексним.
mov ax,[ebx][esi]
8.2. Структури
Структура – тип даних, який складається із фіксованого числа елементів різного типу. Для використання структур у програмі необхідно виконати три дії: задати шаблон структури, визначити екземпляр структури, організувати звернення до елементів структури.
Описання шаблона структури
ім’я_структури STRUC
<описання полів>
ім’я_структури ENDS
де описання полів являє собою директиви описання даних db, dw, dd, dq, dt. Шаблон необхідно розміщувати перед сегментом даних або на початку сегмента даних. Приклад шаблону:
-
worker
struc
Name
db
30 dup
(“
“)
;
інформація про співробітника
Posada
db
30 dup
(“
”)
;
посада
Age
db
2 dup
(“
“)
;
вік
Stat
db
“ ”
;
стать
worker
ends
