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

Адресация ячеек ОП

Читайте также:
  1. Адресация IP.
  2. Выбор высоковольтных выключателей (ячеек)
  3. Заполнение ячеек с помощью рядов данных
  4. Работа с именованными блоками ячеек
  5. Форматирование ячеек
  6. Форматирование ячеек таблицы

Напомним, что абсолютный (полный, физический) адрес (Аабс) в общем случае является суммой адресов сегмента (Асегм) и исполнительного адреса (Ансп), в свою очередь, формируемого как сумма максимум трех адресов: смещения (Асегм), базы (Абазы) и индекса (Аинд), то есть:

Aабс = Асегм + Аисп = Асегм + Асмещ [+Aбазы][+Aинд].


Прямая адресация ячеек ОП имеет несколько вариантов:

- прямая обычная:

MOV AX, pole

где polе — символьное имя переменной X, для которой в ОП были предварительно отведены (или зарезервированы) ячейки памяти директивами типа:

pole DB X

pole DW X

и т. п.

В команде в качестве Аисп берется Асмещ первой ячейки поля, отведенной для пере­менной X;

- прямая с индексированием:

MOV AX..pole[SI]

В команде в качестве Aисп берется Аисп = Асмещ + Аиндинд находится в регистре SI);

- прямая с базированием:

MOV AX,pole[BX]

Аисп = Асмещ + Абазыбазы находится в регистре ВХ;

- прямая с индексированием и базированием:

MOV AX,pole[SI+BX]

Аисп = Асмещ + Аинд + Абазы,

Существует два варианта косвенной адресации ячеек ОП:

- косвенная обычная:

MOV AX,[BX]

Исполнительный адрес берется в регистре ВХ, то есть Aисп = [ВХ];

- косвенная с индексированием:

MOV AX,[BX+SI]

Исполнительный адрес берется в виде суммы адресов, находящихся в регистрах BX и SI, Aисп = [BX] + [SI].

Смешанная непосредственная адресация ячеек ОП имеет несколько вариантов:

- непосредственная обычная:

MOV AX,offset pole

В качестве операнда берется непосредственно смещение адреса первой ячейки поля памяти, отведенного для переменной X; offset указывает, что берется не значение переменной X, а именно смещение ее адреса;

- непосредственная с индексированием:

MOV AX,[SI+const]

В качестве операнда берется сумма значения, хранящегося в регистре SI, и вели­чины const: const может быть задано числом, идентификатором, смещением адреса переменной (offset pole) или их комбинацией — простым выражением;

- непосредственная с базированием:

MOV AX,[BX+const]

Аналогично предыдущему варианту, но вместо регистра SI берется BX;

- непосредственная с базированием и индексированием:

MOV AX,pole[SI+BX+const]

Аналогично предыдущему, но вместо содержимого одного регистра берется сумма содержимого регистров BX и SL.

Почти все команды ассемблера за редким исключением (исключения: POP, PUSH, CALL, RET, IRET) в качестве Асегм обычно используют по умолчанию адрес, находящийся в регистре DS (в исполняемых программах типа.com – регистре CS); но регистр сегмента может быть задан и явно, например:

MOV AX, EX:pole: MOV AX,SS:[SI]

и т.п.


Последняя команда, в часности, позволяет реализовать прямой доступ к ячейке стековой памяти, стек при этом не изменяется.

Команды POP, PUSH, CALL, RET, IRET используют сегмент стека (регистр SS).

― Основные команды языка ассемблер

По назначению можно выделить команды (в скобках приводятся примеры мнемонических кодов операций команд ассемблера ПК типа IBM PC):

- выполнения арифметических операций (ADD и ADC – сложения и сложения с переносом, SUB и SBB – вычитания и вычитания с заемом, MUL и IMUL – умножения без знака и со знаком, DIV и IDIV – деления без знака и со знаком, CMP – сравнения и т.д.);

- выполнения логических операций (OR, AND, NOT, XOR, TEST и т.д.);

- пересылки данных (MOV – переслать, XCHG – обменять, IN – ввести в микропроцессор, OUT – вывести из микропроцессора и т.д.);

- передачи управления (ветвления программы: JMP – безусловного перехода, CALL – вызова процедуры, RET – возврата из процедуры, J* - условного прерывания и т.д.);

- обработки строк символов (MOVS – пересылки, CVPS – сравнения, LODS – загрузки, SCAS – сканирования, REP – повторения и т.д.);

- прерывания работы программы (INT – программное прерывания, INTO – условного прерывания при переполнении, IRET – возврата из прерывания);

- управления микропроцессором (ST* и CL* - установки и сброса флагов, HLT – останова, WAIT – ожидания, ESC – выхода, NOP – холостого хода и т.д.).

С полным списком команд ассемблера можно познакомиться в работах [1, 3, 11].


Дата добавления: 2015-12-07; просмотров: 55 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.008 сек.)