- •Лекция №33 Адресация регистров и ячеек памяти в ассемблере. Основные команды языка ассемблер.
- •Адресация регистров и ячеек памяти в ассемблере
- •1.1 Непосредственная адресация
- •1.2 Прямая адресация регистров мпп
- •1.3 Адресация ячеек оп
- •Основные команды ассемблера
- •2.1 Команды пересылки данных
- •2.2 Арифметические команды
- •2.3 Команды сложения, вычитания и сравнения
- •2.4 Команды приращения
- •2.5 Команды умножения
- •2.6 Команды деления
- •2.7 Логические команды
- •2.8 Команды безусловной передачи управления
- •2.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •2.10 Команда перехода к подпрограмме: calLopr
- •2.11 Команда выхода из подпрограммы
- •2.12 Команды условной передачи управления
- •2.13 Команды управления циклами
- •2.14 Команды прерывания
Лекция №33 Адресация регистров и ячеек памяти в ассемблере. Основные команды языка ассемблер.
План
Адресация регистров и ячеек памяти в ассемблере.
Основные команды языка ассемблер.
Адресация регистров и ячеек памяти в ассемблере
При программировании на ассемблере используются неявный, непосредственный, прямой и косвенный методы адресации, причем для адресации регистров в МПП — только прямой, а для адресации ячеек ОП — прямой, косвенный и смешанный непосредственный методы. Рассмотрим их на примере адресации второго операнда в команде MOV (переслать).
1.1 Непосредственная адресация
Величина операнда і (impendence) непосредственно указывается в поле команды и может быть задана числом в десятичной, двоичной и шестнадцатеричной системах счисления (последний символ числа должен быть, соответственно, D(или никакой), В и Н) или идентификатором, а также задана простым выражением, в котором указанные элементы связаны символами арифметических операций: +, -, * и /. Идентификатор (с соответствующим именем, например,const) должен быть предварительно описан в программе директивой типаconstequ1024 или const= 1024.
Примеры непосредственной адресации:
и т. п.
Следует помнить, что диапазон чисел, посылаемых в регистры, ограничивается вместимостью последнего: в 1-байтовый регистр (АН, AL, ВН и т. д.) можно посылать числа в диапазоне от 0 до +255 (целое без знака) или от -128 до +127 (целое со знаком); в 2-байтовый регистр (АХ, ВХ, СХ и т. д.) — от 0 до +65 535 (целое без знака) или от -32 768 до +32 767 (целое со знаком).
1.2 Прямая адресация регистров мпп
В качестве адреса операнда указывается имя регистра (его символьное обозначение: АХ, AL, АН, ВХ, BL и т. д.).
Примеры: MOV АХ, ВХ, MOV ВХ,DX, MOVАН,BL.
Необходимо следить, чтобы разрядность второго операнда (его регистра) соответствовала разрядности принимающего регистра.
1.3 Адресация ячеек оп
Напомним, что абсолютный (полный, физический) адрес (Ла6с) в общем случае является суммой адресов сегмента(Асеш) и исполнительного адреса (Лисп), в свою очередь формируемого как сумма максимум трех адресов: смещения (Лсмещ), базы и индекса(Аат), то есть
1.4 Прямая адресация ячеек ОП имеет несколько вариантов:
□ прямая обычная: MOV AX,pole.
pole — символьное имя переменной X, для которой в ОП были предварительно отведены (или зарезервированы) ячейки памяти директивами типа poleDBX,poleDWX и т. п.
В команде в качестве Ажп берется Лсмещ первой ячейки поля, отведенной для переменнойX;
□ прямая
с индексированием:
MOV AX,pole[SI]:
В
команде в качестве Аисп беретсяsнаходится
в регистре SI);
□ прямая
с базированием: MOV
AX,pole[BX]:
, находится в регистре ВХ;
□ прямая с индексированием и базированием: MOVAX,pole[SI+BX]:
Существуют два варианта косвенной адресации ячеек ОП:
□ косвенная обычная: MOVАХ, [ВХ].
Исполнительный адрес извлекается из регистра ВХ, то есть Лисп- [ВХ];
□ косвенная с индексированием: MOVAX, [BX+SI].
Исполнительный адрес Атп ' [BX+SI] берется в виде суммы адресов, находящихся в регистрах ВХ и SI. Смешанная непосредственная адресация ячеек ОП имеет несколько вариантов:
□ непосредственная
обычная:
В качестве операнда берется непосредственно смещение адреса первой ячейки поля памяти, отведенного для переменной X; offset указывает, что берется не значение переменной X, а именно смещение ее адреса;
□ непосредственная с индексированием: MOVAX, [Sl+const].
В качестве операнда берется сумма значения, хранящегося в регистре SI, и величиныconst; const может быть задана числом, идентификатором, смещением адреса переменной (offsetpole) или их комбинацией — простым выражением;
□ непосредственная с базированием: MOVAX, [BX+const].
Аналогично предыдущему варианту, но регистр SI замещен ВХ;
□ непосредственная с базированием и индексированием: MOVAX,pole[SI+BX+const]. Аналогично предыдущему, но вместо содержимого одного регистра берется сумма содержимого регистров ВХ иSI.
Почти все команды ассемблера за редким исключением (исключения: POP,PUSH,CALL,RET,IRET) в качестве Лсегмобычно используют по умолчанию адрес, находящийся в регистре DS (в исполняемых программах типа .СОМ — в регистре CS); но регистр сегмента может быть задан и явно, например: MOVAX,EX:pote;MOVAX]SS:[SI] и т. п.
Последняя команда, в частности, позволяет реализовать прямой доступ к ячейке стековой памяти, стек при этом не изменяется. Команды POP,PUSH,CALL,RET,IRETиспользуют сегмент стека (регистрSS).
