
2.1.3. Визначення масивiв
Масиви (рядки) розглядаються як послiдовнiсть елементiв одного визначеного типу. Тому директива, що використовується для огoлошення масиву у прогpамі визначаєтьcя типом елементiв масиву (db - для елементiв типу byte i dw - для елементiв типу word).
Приклад визначення масиву-вектора b[n] (n=3) з елементами типу word:
b dw 1F2Eh, 5AC2h, 0AE7Ch
2.1.4. Пересилання даних
Команда пересилання мае умовну назву (мнемоніку) тov i тaкий загальний синтаксис:
mov dst,srс
де src - об'єкт-джерело, а dst - об'єкт-приймач. Об'єктами можутъ бути регiстри або комiрки пам'ятi (тобто їx вмicт), як джерело також можуть використовуватися констaнтнi вирази. У випадку об'єкта у пам'ятi можливi рiзнi способи формування адреси. При цьому операнди повиннi мати один i той самий тип (byte, word, dword). Наприклад:
mov al, 5; запис числа 5 у регістр al
mov ax, bx; пересилання значення з peгiстpa bх у peгiстp ;
;ах (копiювання)
mov bl, m1 ; запиc значенyя змінної m1 у регістр bl
mov dl, m1+2 ; запиc у регістр dl значення за адресою,
; що бiльше адреси m 1 на 2
Оскiльки пересилання даних iз пам'ятi в пам'ять однiєю командою тov не виконуєтьcя, то для пересилання, наприклад, iз облаcтi naм'ятi т1 в область пaм'ятi т5 потрiбно спочатку елемент т1 завантажити у peгicтp, iз якого пoтiм переслати у т5:
mov al, m1
mov m5, al
Розряднiсть peгicтpa повинна вiдповiдати типу змiнних, якi копiюються. Найчаcтiше данi визначають у поточному ceгмeнтi даних, адресування якого здiйснюється peгicтpом ds. За замовчуванням процесор завжди використовує ds, тому для цих даних немає потреби у явному вказуванні сегмента. Якщо змiннi визначені в iншиx сегментах, то при звертaннi до них необxiдно вказати на їх сегмент. Для перемuкання сегментiв у командах тov найчастiше використовують так званий префiкс перемикання сегмента:
<iм’я сегментного регістра>:<адресний вираз>
Наприклад, якщо змiнна alfa визначена в ceгмeнтi кoдiв, то
mоv ах, cs:alfa ; запис значення змінної в регістр ах
Пересилання даних може здiйснюватися також за допомогою:
-
команд для роботи зi стеком push та рор;
- команд роботи з рядками lods, stos i movs тощо.
2.1.5. Можливості зміни атрибуту типу
Тип визначається вiдповiдними директивами при початковому оголошеннi змінної (див.п.1.2). Атрибут типу даних (byte, word, dword) можна змiнити за допомогою показчика типу ptr, псевдокоманди equ разом з операцiєю this, псевдокоманди label.
Нaпpиклад, визначено масив (послiдовнiсть) тas елементiв типу byte. Щоб мати можливiсть працювати з цим масивом, як з масивом слiв, тобто однiєю командою читати/записувати по 2 байти, визначимо нову (альтернативну) змiннy тasw типу word. Ця змiнна aдpecyє ту саму область пам' ятi, що й основна змiнна.
masw label word ; чи тasw equ this word
mas db 10,3ah,0,0bfh
Таке визначення даних дає можливiсть виконати команди
mоv ах,mаsw
mоv dx, masw+ 2
При цьому в регiстр ах будуть записані перші 2 байти масиву тas (число 3а0аh), в регістр dx – bf00h, тобто наступнi 2 байти.
Той самий результат отримаємо i при виконaннi команд з оператором ptr:
mоv ax,word ptr mas
mоv dx,word ptr mas+2
У випадку оператора ptr тип визначається явно в команді.