Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Адресация регистров и ячеек памяти в Ассемблере
При программировании на языке ассемблер используются неявный, непосредственный, прямой и косвенный методы адресации; причем для адресации регистров в МПП— только прямой, а для адресации ячеек ОП — прямой, косвенный, и смешанный непосредственный методы. Рассмотрим их на примере адресации второго операнда в команде 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 прямая с индексированием и базированием: 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 непосредственная с базированием и индексированием: Аналогично предыдущему, но вместо содержимого одного регистра берется сумма содержимого регистров 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).
|
|||||
Последнее изменение этой страницы: 2021-11-27; просмотров: 46; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.122.4 (0.006 с.) |