Адресация регистров и ячеек памяти в Ассемблере  

Адресация регистров и ячеек памяти в Ассемблере


afarskij-avstralopitek-po-prozvishu-lyusi.html
afazii-klassifikaciya-klinicheskie-proyavleniya-topicheskaya-diagonostika-osnovnie-prichini-vozniknoveniya.html

При программировании на языке ассемблер используются неявный, непосредственный, прямой и косвенный методы адресации; причем для адресации регистров в МПП— только прямой, а для адресации ячеек ОП — прямой, косвенный, и смешанный непосредственный методы. Рассмотрим их на примере адресации второго операнда в команде MOV (переслать).

Непосредственная адресация

Величина операнда i (impendence) непосредственно указывается в поле команды и может быть задана числом в десятичной, двоичной и шестнадцатеричной системах счисления (последний символ числа должен быть, соответственно, D (или никакой), B и H) или идентификатором, а также простым выражением, в котором указанные элементы связаны символами арифметических операций: +, -, * и /. Идентификатор (с соответствующим именем, например, const) должен быть предварительно описан в программе директивой типа: const equ 1024 или const = 1024.

Примеры непосредственной адресации:

MOV AX, 1024D; MOV AL, 64; MOV AX, const; MOV AX, 156*10H/2

и т. п.

Следует помнить, что диапазон чисел, посылаемых в регистры, ограничивается вместимостью последнего: в 1-байтовый регистр (AH, AL, BH и т.д.) можно посылать числа в диапазоне от 0 до +255 (целое без знака) или от –128 до +127 (целое со знаком); в 2-байтовый регистр (AX, BX, CX и т.д.)— от 0 до +65 535 (целое без знака) или от –32 768 до +32 767 (целое со знаком).

Прямая адресация регистров МПП

В качестве адреса операнда указывается имя регистра (его символьное обозначение: AX, AL, AH, BX, BL и т.д.). Примеры:

MOV AX, BX; MOV BX, DX; MOV AH, BL

Необходимо следить, чтобы разрядность второго операнда (его регистра) соответствовала разрядности принимающего регистра.

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

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

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

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

l прямая обычная: MOV AX, pole.

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

pole DB X, pole DW X и т.п.

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

l прямая с индексированием: MOV AX, pole[SI].

В команде в качестве Aисп берется Aисп = Aсмещ + Aинд

Aинд находится в регистре SI.

l прямая с базированием: MOV AX, pole[BX].

Aисп = Aсмещ + Aбаз,

Aбаз находится в регистре BX.

l прямая с индексированием и базированием:
MOV AX, pole[SI+BX].

Aисп = Aсмещ + Aинд + Aбаз

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

l косвенная обычная: MOV AX, [BX].

Исполнительный адрес извлекается из регистра BX, то есть Aисп = [BX].

l косвенная с индексированием: MOV AX, [BX+SI].

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



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

l непосредственная обычная: MOV AX, offset pole.

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

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

l MOV AX, [SI+const].

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

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

l MOV AX, [BX+const].

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

l непосредственная с базированием и индексированием:
MOV AX, pole[SI+BX+const].

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

Почти все команды ассемблера за редким исключением (исключения: POP, PUSH, CALL, RET, IRET) в качестве Aсегм обычно используют по умолчанию адрес, находящийся в регистре DS (в исполняемых программах типа .COM — в регистре CS); но регистр сегмента может быть задан и явно, например: MOV AX, EX:pole; MOV AX, SS:[SI] и т.п.

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

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

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

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

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

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

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

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

l обработки строк символов (MOVS — пересылки, CMPS — сравнения, LODS — загрузки, SCAS — сканирования. Эти команды обычно используются с префиксом (модификатором повторения) REP;

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

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

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

Команды пересылки данных

l MOV dst, src — пересылка данных (mov — переслать из src в dst).

Пересылает один байт (если src и dst имеют формат байта) или одно слово (если src и dst имеют формат слова) между регистрами или между регистром и памятью, а также заносит непосредственное значение в регистр или в память[34].

Операнды dst и src должны иметь одинаковый формат — байт или слово.

Src могут иметь тип: r (register) — регистр, m (memory) — память, i (impedance) — непосредственное значение.

Dst могут быть типа r, m.

Нельзя в одной команде использовать операнды: rsegm совместно с i; два операнда типа m, два операнда типа rsegm). Операнд i может быть и простым выражением:

mov AX, 156*10H

mov AX, (152 + 101B) / 15

и т.п.

Вычисление выражения выполняется только при трансляции. Флаги не меняет.

l PUSH src — занесение слова в стек (pushпротолкнуть; записать в стек изsrc). Помещает в вершину стека содержимое src — любого 16-битового регистра (в том числе и сегментного) или двух ячеек памяти, содержащих 16-битовое слово. Флаги не меняются;

l POP dst — извлечение слова из стека (pop— вытолкнуть; считать из стека в dst). Снимает слово с вершины стека и помещает его в dst — любой 16-битовый регистр (в том числе и сегментный) или в две ячейки памяти. Флаги не меняются.

В командах PUSH и POP операнды dst и src могут быть только типов r и m.

Арифметические команды

Операнды могут быть двоичные (8 или 16 битов, целые, со знаком или без знака), двоично-десятичные (от 1 до 255 байтов, без знака, в упакованном или распакованном (ASCII-коды) форматах). Машина не обращает внимания на формат и обращается с ними формально, как с двоичными числами в дополнительном коде. Но для десятичной арифметики после операции требуется коррекция (операции только над одним байтом).




akela-raksha-sherhan-balu-bagira-maugli-shakal.html
akela-sherhan-shakal-potom-maugli-i-raksha.html
akida-salyafov-i-imamov-hadisa.html
akimov-vadim-mbudo-detskaya-hudozhestvennaya-shkola-imeni-nvovechkina-gnovoshahtinskrostovskaya-oblast-rukovoditel-algurkovskaya.html
akkreditaciya-organov-po-sertifikacii-i-ispitatelnih-laboratorij-centrov.html
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
Реферат
    PR.RU™