Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Методы адресации данных




Методом, или способом адресации называют процедуру нахождения операнда. Способ адресации определяется комбинациями регистров общего назначения, индексных и базовых регистров, а также символических имен, и констант, с помощью которых в команде задается адрес для доступа к данным.

Все методы адресации данных можно отнести к одному из трех типов:

ü адресация к непосредственным данным;

ü адресация к данным в регистрах;

ü адресация к данным в памяти.

3.1.2. Непосредственная адресация. Операнд располагается в самой команде и может иметь любой смысл: константа (число), выражение, адрес, код ASCII, или в виде символического обозначения. Возможна пересылка относительных адресов (смещений). Для указания относительного адреса данной ячейки используется описатель OFFSET.

Examle 3.1. Фрагмент программы с непосредственной адресацией.

; сегмент данных

mes DB ‘Привет’; строка символов

X EQU 12;

; фрагмент кода программы

MOV AH, 40h; число 40h загружается в AH

MOV AL, ‘*’; код символа * загружается в AL

MOV CX, X; число, обозначенное как X загружается в CX, CX=12

MOV AX, (40*2); значение выражения 40*2 загружается в AX

INT 21h; команда прерывания типа 21h

; использования директивы OFFSET

MOV DX, OFFSET mes; адрес начало строки загружается в DX

3.2.1. Регистровая адресация. Операнд(ы) располагаются в одном из регистров общего назначения либо в сегментном регистре.

Examle 3.2. Фрагмент программы с регистровой адресацией.

INC CX; увеличить на 1 содержимое регистра CX

MOV CX, BX; переслать содержимое регистра BX в CX

PUSH DS; поместить содержимое регистра DS в стек

3.2.2. Адресация памяти. Чтобы облегчить управление массивами и сложными структурами данных в системе команд Intel 8086 используется много способов представления операндов памяти.

Прямая адресация. Адрес ячейки памяти указывается в команде. Прямой адрес может определятся относительно любого из четырех доступных сегментов. По умолчанию адреса памяти (смещение) вычисляется относительно DS. Прямая адресация может быть со смещением.

Регистрово-косвенная адресация: базовая и индексная.

При базовой адресации относительный адрес операнда находится в регистрах BX или BP, а при индексной - в регистрах SI или DI. При использовании регистров BX, SI и DI подразумевается сегмент, адресуемый через DS, при использовании регистра BP - подразумевается сегмент, адресуемый через SS. Допускается замена сегмента. Операнд указывается в квадратных скобках, например, [BX]. Это означает, что при обращение к регистру BX его содержимое расценивается как адрес, а не как значение.

Регистрово-косвенная со смещением: базовая и индексная. Относительный адрес операнда определяется как сумма содержимого регистра BX, BP, SI или DI и указанной в команде константы, называемой смещением. Допускается переопределение базового сегмента [].

Допустимы обозначения вида: [BX]+смещение или [BX + смещение]. Нельзя комбинировать два базовых или два индексных регистра.

Базово-индексная адресация. Относительный адрес операнда определяется как сумма содержимого следующих пар: [BX][SI] (по регистру DS), [BX][DI] (по регистру DS), [BP][SI] (по регистру SS), [BP][DI] (по регистру SS). Допускается переопределение сегментного регистра.

Базово-индексная адресация со смещением. Относительный адрес операнда определяется как сумма содержимого двух регистров и смещения: [BX][SI] (по регистру DS), [BX][DI] (по регистру DS), [BP][SI] (по регистру SS), [BP][DI] (по регистру SS). Допускается переопределение сегментного регистра и обозначения вида: смещение [BX + SI], [смещение + BX + SI] и [BX][SI] + смещение.

Examle 3.3. Фрагмент программы использования адресации памяти.

; сегмент данных

val DB 10h, 20h

val16 DW 1000h, 2000h

mes DB ‘Hello’

; сегмент кода

; Прямая адресация памяти

INC val; содержимое по указателю val увеличивается на 1

MOV DX, val16; DX = 1000h

MOV DL, val; DL = 10h

MOV DH, val+1; DH = 20h, прямая адресация со смещением

MOV AX, val16; AX = 1000h

MOV BX, val16 + 2; DH = 2000h, прямая адресация со смещением

MOV AL, DS:6h; AL = 20h, прямая, абсолютная адресация

;регистрово-косвенная адресации памяти.

MOV BX, OFFSET val; В BX содержится смещение переменной val

MOV SI, OFFSET mes; В SI содержится смещение переменной mes

MOV AL, [BX]; AL = 10h

INC BX; получить адрес следующей ячейки памяти

MOV AH, [BX]; AL = 20h

MOV DI, [SI]; DI = ‘H’

INC SI; получить адрес следующей ячейки памяти

INC DI; получить адрес следующей ячейки памяти

MOV DI, [SI]; DI = ‘e’

; регистрово-базовая, косвенная со смещением

MOV AL, [BX+1]; AL = 20h

MOV AH, [BX+2]; AH = 30h

; базовый индексная со смещением

INC BX; получить адрес следующей ячейки памяти

MOV AH, [BX]; AL = 20h

MOV DI, [SI]; DI = ‘H’

INC SI; получить адрес следующей ячейки памяти

INC DI; получить адрес следующей ячейки памяти

MOV DI, [SI]; DI = ‘e’





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 1189 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Неосмысленная жизнь не стоит того, чтобы жить. © Сократ
==> читать все изречения...

2287 - | 1992 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.