Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 44.Ассемблер.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
55.65 Кб
Скачать

Лекция №33 Адресация регистров и ячеек памяти в ассемблере. Основные команды языка ассемблер.

План

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

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

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

При программировании на ассемблере используются неявный, непосредствен­ный, прямой и косвенный методы адресации, причем для адресации регистров в МПП — только прямой, а для адресации ячеек ОП — прямой, косвенный и сме­шанный непосредственный методы. Рассмотрим их на примере адресации второ­го операнда в команде 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).