Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

3.2. Команды push и рор

Стек необходим для временного сохранения данных (содержимого регистров и ячеек памяти) при работе программы.

Команда PUSH помещает содержимое регистра или ячейки памяти размером в 16-битовое слово на вершину стека. А команда POP снимает слово с вершины стека и помещает его в ячейку памяти или регистр. Команды PUSH и POP имеют следующие форматы:

PUSH источник

POP приемник

Под вершиной стека мы понимаем ячейку в сегменте стека, адрес которой содержится в указателе стека SP. Стек "растет" по направлению к млад­шим адресам памяти (к ячейке 0), поэтому первое помещаемое в стек слово запоминает­ся в ячейке стека с наибольшим адресом, следующее – на два байта ниже и т.д.

Регистр SP всегда указывает на слово, помещенное в стек последним. Следова­тельно, команда PUSH вычитает 2 из значения указателя стека, а затем пересылает операнд-источник (слово) в стек. Действуя обратным образом, команда POP пересылает в операнд-приемник слово, адрес которого содержится в регистре SP, а затем добавляет 2 к содержимому этого регистра.

Команды PUSH и POP удобны для копирования содержимого одного регистра сегмента в другой. Например, с помощью команд

PUSH ES

POP DS

можно скопировать значение регистра ES в регистр DS.

Для этого метода не требуется использования регистра общего назначения для промежуточного копирования значения регистра сегмента. Однако, исполнение пары команд PUSH–POP требует в несколько раз больше времени, чем исполнение пары команд MOV.

4. Режимы адресации

4.1. Регистровая и непосредственная адресация

При регистровой адресации микропроцессор извлекает операнд из регистра или загружает его в регистр.

Например, команда

MOV АХ, СХ

копирует 16-битовое содержимое регистра счетчика СХ в аккумулятор АХ. Содер­жимое регистра СХ не изменяется. В данном примере микропроцессор ис­пользует регистровую адресацию для извлечения операнда-источника из регистра СХ и загрузки его в регистр-приемник АХ.

Непосредственная адресация позволяет указывать 8- или 16-битовое значение константы в качестве операнда-источника. Эта константа содержится в команде (куда она помещается Ассемблером), а не в регистре или в ячейке памя­ти.

Например, команда

MOV СХ, 5

загружает значение 5 в регистр СХ.

4.2. Исполнительный адрес

Смещение, которое вычисляется для доступа к находящемуся в памяти операнду, называется исполнительным адресом операн­да. Исполнительный адрес показывает, на каком расстоянии (в байтах) располага­ется операнд от начала сегмента, в котором он находится.

4.3. Прямая адресация

При прямой адресации исполнительный адрес является составной частью команды (так же, как значения при непосредственной адресации). Микро­процессор добавляет этот исполнительный адрес к сдвинутому на 4 разряда содержимому регистра сегмента данных DS и получает 20-битовый физический адрес операнда.

Обычно прямая адресация применяется, если операндом служит метка. Напри­мер, команда

MOV AX, TABLE

загружает содержимое ячейки памяти TABLE в регистр АХ.

4.4. Косвенная регистровая адресация

При косвенной регистровой адресации исполнительный адрес операнда содержится в регистре ВХ (базовом регистре), регистре ВР (регистре указателя базы), регистрах SI или DI (индексных регистрах). Косвенные регистровые операнды надо заключать в квадрат­ные скобки, чтобы отличить их от регистровых операндов. Например, команда

MOV АХ, [ ВХ ]

загружает в регистр АХ содержимое ячейки памяти, адресуемой значением регистра ВХ.

Как поместить смещение адреса в регистр ВХ? Один из методов состоит в применении операции OFFSET (смещение) к адресу ячейки памяти.

Операция OFFSET возвращает значение смещения адреса переменной или метки. Например, оператор

MOV ВХ, OFFSET TАBLE

загрузит смещение адреса переменной TABLE в регистр ВХ.

Таким образом, для загрузки слова из ячейки TABLE в регистр АХ можно воспользоваться последова­тельностью команд

MOV ВХ, OFFSET TABLE

MOV АХ, [ ВХ ]

Эти две команды выполняют те же действия, что и одна команда MOV АX, TABLE

с той разницей, что в первом случае предыдущее содержимое регистра ВХ уничтожается.

Если нужен доступ лишь к одной ячейке памяти (в данном случае TABLE), то разумнее воспользоваться одной командой. Однако для досту­па к нескольким ячейкам, начиная с данного базового адреса, гораздо лучше иметь исполнительный адрес в регистре. Почему? Потому что содержимым регист­ра можно манипулировать, не извлекая каждый раз новый адрес.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]