- •Архітектура і система команд мікропроцесорів
- •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 недопустиме ім’я регістра
Завантаження ланцюжків
адрес_джерела – адрес строки в основному сегменті даних (ds:esi/si). Робота команди полягає у поміщенні у регістр акумулятор eax/ax/al елемента ланцюжка. При цьому вміст esi/si збільшується або зменшується (залежно від стану прапора df) на значення, що дорівнює розміру елемента. Цю команду використовують після команди scans, яка локалізує місцезнаходження елемента, який шукають.
Команди lodsb, lodsw,lodsd завантажують у регістр eax байт, слово і подвійне слово. Кожна з них працює з ланцюжками із елементів певного розміру. Попередньо необхідно завантажити довжину ланцюжка і адрес у регістри ecx/cx і ds:/esi/si.
Формування ланцюжків
stos адрес_приймача
адрес_приймача – адресує ланцюжок у додатковому сегменті даних (es:edi/di). Робота команди полягає у пересиланні елемента із акумулятора (регістра eax/ax/al) в елемент ланцюжка по заданому адресу у сегменті даних. При цьому вміст edsi/di збільшується або зменшується (залежно від стану прапора df) на значення, що дорівнює розміру елемента. Використання префіксів залежить від логіки програми.
Команди stosb, stosw, stosd працюють із ланцюжками елементів різного розміру.
Попередньо дожину ланцюжка і адрес необхідно завантажити у регістри ecx/cx, es:edi/di.
Ввід-вивід елементів у порт
Ввід ланцюжка елементів ланцюжка із порта:
іns адрес_приймача, номер_порта
Команда вводить елемент ланцюжка із порта номер_порта, який знаходиться в регістрі dx, в елемент який задається адресом адрес_приймача. Адрес необхідно явно сформувати в парі регістрів es:edi/di. Розмір елементів ланцюжка повинен бути узгоджений з розмірністю порта. Після вводу вміст edi/di коректується на величину розміру елемента. При роботі враховується прапор напрямку df. Команда ins транслятором перетворюється в одну із команд без операндів insb, insw, insd, що працюють із ланцюжками певного розміру.
Вивід елементів ланцюжка в порт:
outs номер_порта, адрес_джерела
Команда виводить елемент ланцюжка в порт номер_порта, який знаходиться в регістрі dx. Адрес елемента ланцюжка адрес_джерела. Значення адреса необхідно явно сформувати у регістрі ds:esi/si. Розмір елементів ланцюжка необхідно узгодити із розмірністю порта. Після виводу вміст edi/di коректується на величину розміру елемента. При роботі враховується прапор напрямку df. Команда outs транслятором перетворюється в одну із команд без операндів outsb, outsw, outsd, що працюють із ланцюжками певного розміру.
Складні структури даних
Масиви
Масив – структурований тип даних, що складається із деякого числа елементів одного
типу.
Спеціальних засобів для описання в асемблері нема. При необхідності використати масив
його можна промоделювати одним із способів:
o перечисленням елементів масива в полі операндів однією з директив описання даних:
; масив із 5 елементів по 4 байти
mas dd 1,2,3,4,5
o використовуючи оператор повторення dup:
; масив із 5 нульових елементів по 2 байти
mas dw 5 dup (0)
o використання директиви label і rept. Ці директиви використовуються для описання великих масивів в пам’яті. Директива rept відноситься до макрозасобів мови асемблера і викликає повторення вказане число разів строк, між директивою і строкою endm.
mas1 label byte mas2 label word rept 4
endm
dw 0abcdh
Створена послідовність із чотирьох слів 0abcdh. Її можна трактувати як послідовність байтів або слів, в залежності від того яке ім’я буде використовуватися. Директива label визначає тільки символічні імена, а не резервує пам’ять. Використання підряд декількох директив label дозволяє присвоїти одній області пам’яті різні імена.
o використання циклу для ініціалізації області пам’яті, яку можна буде трактувати як масив:
i db 0
...
go:
mov bh,i ; і в bh
mov mas[i], bh ; запис в масив i inc i ; збільшення i
inc si ; просовування до наступного елемента масива
loop go
