Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Опорний конспект лекцій_ Асемблер.Docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
506.89 Кб
Скачать
    1. Завантаження ланцюжків

адрес_джерела – адрес строки в основному сегменті даних (ds:esi/si). Робота команди полягає у поміщенні у регістр акумулятор eax/ax/al елемента ланцюжка. При цьому вміст esi/si збільшується або зменшується (залежно від стану прапора df) на значення, що дорівнює розміру елемента. Цю команду використовують після команди scans, яка локалізує місцезнаходження елемента, який шукають.

Команди lodsb, lodsw,lodsd завантажують у регістр eax байт, слово і подвійне слово. Кожна з них працює з ланцюжками із елементів певного розміру. Попередньо необхідно завантажити довжину ланцюжка і адрес у регістри ecx/cx і ds:/esi/si.

    1. Формування ланцюжків

stos адрес_приймача

адрес_приймача – адресує ланцюжок у додатковому сегменті даних (es:edi/di). Робота команди полягає у пересиланні елемента із акумулятора (регістра eax/ax/al) в елемент ланцюжка по заданому адресу у сегменті даних. При цьому вміст edsi/di збільшується або зменшується (залежно від стану прапора df) на значення, що дорівнює розміру елемента. Використання префіксів залежить від логіки програми.

Команди stosb, stosw, stosd працюють із ланцюжками елементів різного розміру.

Попередньо дожину ланцюжка і адрес необхідно завантажити у регістри ecx/cx, es:edi/di.

    1. Ввід-вивід елементів у порт

Ввід ланцюжка елементів ланцюжка із порта:

іns адрес_приймача, номер_порта

Команда вводить елемент ланцюжка із порта номер_порта, який знаходиться в регістрі dx, в елемент який задається адресом адрес_приймача. Адрес необхідно явно сформувати в парі регістрів es:edi/di. Розмір елементів ланцюжка повинен бути узгоджений з розмірністю порта. Після вводу вміст edi/di коректується на величину розміру елемента. При роботі враховується прапор напрямку df. Команда ins транслятором перетворюється в одну із команд без операндів insb, insw, insd, що працюють із ланцюжками певного розміру.

Вивід елементів ланцюжка в порт:

outs номер_порта, адрес_джерела

Команда виводить елемент ланцюжка в порт номер_порта, який знаходиться в регістрі dx. Адрес елемента ланцюжка адрес_джерела. Значення адреса необхідно явно сформувати у регістрі ds:esi/si. Розмір елементів ланцюжка необхідно узгодити із розмірністю порта. Після виводу вміст edi/di коректується на величину розміру елемента. При роботі враховується прапор напрямку df. Команда outs транслятором перетворюється в одну із команд без операндів outsb, outsw, outsd, що працюють із ланцюжками певного розміру.

  1. Складні структури даних

    1. Масиви

Масив – структурований тип даних, що складається із деякого числа елементів одного

типу.

Спеціальних засобів для описання в асемблері нема. При необхідності використати масив

його можна промоделювати одним із способів:

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