Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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, ….





Дата публикования: 2014-12-10; Прочитано: 361 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...