- •Архітектура і система команд мікропроцесорів
- •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 недопустиме ім’я регістра
Визначення даних з типом структури
Визначення змінної з типом даної структури:
[ім’я_змінної] ім’я_структури <[список_значень]>
ім’я_змінної – ідентифікатор змінної даного структурного типу
список_значень – список у кутових дужках початкових значень елементів структури, розділених комами
Якщо список задано не повністю, то всі поля структури ініціалізуються значеннями із шаблона. При ініціалізації окремих полів, пропущені поля відділяються комами. Для використання усіх полів із шаблону необхідно записати кутові дужки: Student1 worker <>.
Приклади визначення змінних з типом структури:
data segment
Student2 worker <”Гурко Андрій”,”лаборант”,”21”,”ч”> Student3 worker <”Савій Іван”,,”20”,”ч”>
data ends
Методи роботи із структурою
Для посилання в команді на поле деякої структури, використовується оператор – символ
«.» (крапка) у наступній синтаксичній конструкції:
адресний_вираз.ім’я_поля_структури
адресний_вираз – ідентифікатор змінної структурного типа або вираз у дужках
[ім’я_регістра], [ім’я_змінної];
ім’я_поля_структури – ім'я поля із структури.
Таким чином оператор . обчислює вираз: (адресний_вираз) + (ім’я_поля_структури).
Наприклад: отримання значення поля age у регістр ax:
mov ax, word ptr student2.age; age в al (молодша цифра–в ah, старша-в al) xchg ah, al
; інший варіант
lea bx, student2
mov ax, word ptr [bx].age Визначення масиву із 10 структур: mas worker 10 dup (<>)
Транслятор присвоює імені даних з типом структури і змінним цього типу атрибут типа. Значення цього атрибута – розмір в байтах, що займають поля структури (одного екземпляра). Цей розмір можна отримати допомогою оператора type і використати для індексації масиву структур:
mas worker 10 dup(<>)
…
mov bx, type worker ;bx=63 – розмір в байтах одного екземпляра структури
lea di, mas
mov cx, 10 ; cx=10 – кількість екземплярів
… cycl:
mov dl,[di].stat ; читання поля ”стать ”
…
add di,bx ; перехід до наступного екземпляру
loop cycl
Приклад копіювання поля name третього співробітника у поле name п’ятого співробітника.
mov bx, offset mas
mov si, (type worker)*2 ; si =63*2
add si,bx ; адрес строки джерела
mov di, (type worker0*4 ; si=63*4
add di,bx ; адрес строки отримувача
mov cx 30 ; довжина поля для пересилання
rep movsb
Об’єднання
Об’єднання – тип даних, що дозволяє трактувати одну і ту ж область даних, як таку, що має різні типи і імена. Синтаксис:
ім’я_об’єднання UNION
<описання_полів>
ім’я_об’єднання ENDS
При визначенні змінної типу об’єднання, пам’ять виділяється у відповідності з розміром максимального елементу. Звернення до елементів об’єднання відбувається по їх іменах, при цьому всі поля в об’єднаннях накладаються одне на друге. Приклад:
u1 union off_16 dw ? off_32 dd ? u1 ends
Записи
Запис – структурний тип даних, що складається із фіксованого числа елементів довжиною від одного до декількох бітів. Розмір запису не може бути більше 8, 16 або 32 біт. Якщо розмір
запису менший вказаних значень, то всі поля притискаються до молодших розрядів. Для використання запису необхідно:
задати шаблон запису;
визначити екземпляр запису;
організувати звернення до елемента запису. Синтаксис описання шаблону:
ім’я_запису RECORD <описання_елементів>
описання_елементів – описання елементів являє послідовність описань окремих елементів із наступним синтаксисом: ім’я_поля : розмір [= значення], …
