Головна

Режими адресації. Дані. Робота з масивами

  1. I. Попередня робота.
  2. I. Усна робота.
  3. I. Навчальна робота
  4. I.1.2. Корекційно-розвиваюча робота з дітьми, які мають порушення мовлення
  5. II. Самостійна робота студентів на практичному клінічному занятті.
  6. II. Самостійна робота студентів на практичному клінічному занятті.
  7. II. Самостійна робота студентів на практичному клінічному занятті.

5.1 Режими адресації[1]

1. регістровий. Операнд (байт або слово) знаходиться в регістрі. приклади:

inc CX

push DS

xchg BX, BP

mov ES, AX

2. безпосередній. Операнд (байт або слово) вказується в команді. Він може мати будь-який сенс (число, адреса, код ASCII), а також представлений у вигляді символічного позначення. приклади:

mov AH, 40h

mov AL, '*'

int 21h

limit equ 528

mov CX, limit

mov DX, offset mes

3. прямий. Адресується пам'ять (байт або слово). При будь-якому зверненні до пам'яті процесор використовує один з сегментних регістрів. Адреса комірки пам'яті вказується в команді. приклади:

; Сегмент даних, сегментна адреса в DS

mem dw 0

; Сегмент команд, скорочена форма

inc mem; повна форма inc DS: mem

mov DX, mem; повна форма inc DX, DS: mem

Скорочення неприпустимо для інших сегментних регістрів (ES, CS і т. Д.). наприклад,

inc ES: mem

mov BX, ES: 2Ch; еквівалент mov BX, ES: [2Ch]

4. регістровий непрямий. Адресується пам'ять (байт або слово). Відносний адресу операнда знаходиться в регістрах ВХ або ВР (базова адресація) або в регістрах SI або DI (індексна адресація). При використанні регістрів BX, SI і DI мається на увазі сегмент, що адресується через DS, при використанні BP мається на увазі сегмент стека і, відповідно, регістр SS:

[BX] (мається на увазі DS: [BX])

[BP] (мається на увазі SS: [BP])

[SI] (мається на увазі DS: [SI])

[DI] (мається на увазі DS: [DI])

приклади:

mov AX, [SI]

inc [SI]

mov BX, [SI]

5. Регістровий непрямий зі зміщенням. Адресується пам'ять (байт або слово). Відносний адресу операнда визначається як сума вмісту регістра BX, BP, SI або DI і зазначеної в команді константи, званої зміщенням. Зсув може бути числом або адресою. При використанні регістрів BX, SI і DI мається на увазі сегмент, що адресується через DS, при використанні BP мається на увазі сегмент стека і, відповідно, регістр SS:

зміщення [BX] (мається на увазі DS: Зміщення [BX])

зміщення [BP] (мається на увазі SS: зміщення [BP])

зміщення [SI] (мається на увазі DS: зміщення [SI])

зміщення [DI] (мається на увазі DS: зміщення [DI])

Допустимі також позначення виду:

[BX] + зміщення

[BX + зміщення]

Нехай в сегменті даних визначено масив з 10 чисел

array db 0,10,20,30,40,50,60,70,80,90

послідовність команд

mov BX, 5

mov AL, array [BX]

завантажить в регістр AL елемент масиву з індексом 5, т. е. число 50.

Той же результат дадуть команди

mov BX, offset array

mov AL, 5 [BX]; або AL, [BX] +5 або AL, [BX + 5]

6. базовий індексний. Адресується пам'ять (байт або слово). Відносний адреса визначається як сума вмісту наступних пар регістрів

[BX] [SI] (мається на увазі DS: [BX] [SI])

[BX] [DI] (мається на увазі DS: [BX] [DI])

[BP] [SI] (мається на увазі SS: [BP] [SI])

[BP] [DI] (мається на увазі SS: [BP] [DI])

Нехай в сегменті даних визначено масив з 10 слів:

Words dw 0,10,20,30,40,50,60,70,80,90

послідовність команд

mov BX, offset words

mov SI, 10

mov AX, [BX] [SI]

завантажить в регістр слово зі зміщенням 10 байтів від початку масиву, т. е. число 50.

7. Базовий індексний зі зміщенням. Адресується пам'ять (байт або слово). Відносний адреса визначається як сума вмісту двох регістрів і зміщення.

зміщення [BX] [SI] (мається на увазі DS: Зміщення [BX] [SI])

зміщення [BX] [DI] (мається на увазі DS: Зміщення [BX] [DI])

зміщення [BP] [SI] (мається на увазі SS: Зміщення [BP] [SI])

зміщення [BP] [DI] (мається на увазі DS: Зміщення [BP] [DI])

Допустимі також позначення (з усіма регістрами) виду:

cмещеніе [BX + SI]

[Зміщення + BX + DI]

[BP] [SI] + зміщення

5.2 Визначення даних.

Для заповнення або резервування ділянок пам'яті у вигляді байтів, слів або подвійних слів служать директиви асемблера db, dw и dd. Для заповнення або резервування масивів застосовується директива dup:

mem1 db 0F7h; В байт з ім'ям mem1 поміщено

; Число 0F7h

mem2 dw 0F71Ah; В слово з ім'ям mem2 поміщено

; Число 0F71Аh

a0 dd myproc; В подвійне слово а0 записаний повний

; Адреса процедури myproc: сегментна; ??адреса в старшому слові, зміщення в; молодшому

mem3 db 256 dup (?); Резервується ділянку пам'яті в

; 256 байтів

mem4 dw 512 dup (0); Масив з 512 слів. заповнений

; нулями

Константи визначаються за допомогою директиви equ або знака рівності (=):

std equ 100

std1 = 11 * 2 + 3

std3 = 0aah

Операнди в команді повинні мати однаковий тип. Для перетворення типу операнда в команді служить оператор ptr:

mem2 dw 0F71Ah

mov AX, mem2; в АХ занесено число 0F71Ah

mov BL, byte ptr mem2; в BL занесено вміст

; Молодшого байта - число 01Ah

mov CL, byte ptr mem2 + 1; в CL занесено вміст

; Старшого байта - число 0F7h

5.2.1 Контрольні питання.

1. У пам'яті послідовно записані числа:

numbers dw 32765,13,1500,7

Яке число буде мати ім'я numbers?

2. В пам'яті записана наступна інформація:

message db 'Привіт вам, що вивчають асемблер'

a1 dw message

Що записано в а1? Чи можна для а1 виділити один байт пам'яті?

3. Чи обов'язкові прогалини між 256 і dup і між dup і (?) В команді:

mem3 db 256 dup (?)

4. У чому відмінність застосування директиви equ від знака рівності?

5. Необхідно помістити в ВХ молодшу частину адреси процедури myproc, а в ES - старшу. Допишите команди:

a0 dd myproc

mov BX, ...

mov ES, ...

 



Jmp outprog; На завершення програми | Програма пошуку елемента в масиві

заняття 1 | Організація роботи з асемблером | Програма типу EXE на макроассемблере | Програма типу com на макроассемблере | Спрощені директиви сегментації | самостійні розробки | умовні переходи | Переходи з допомогою команди CALL | Mess1 db 0Ah, 0Dh | Sub AX, AX. |

© um.co.ua - учбові матеріали та реферати