Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 117; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.89 (0.01 с.) |