Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция № 4 Способы адресации данных Структура программы на языке Ассемблер.ppt
Скачиваний:
7
Добавлен:
07.08.2024
Размер:
1.91 Mб
Скачать

Расширение системы команд в процессоре 80286

Если 3 процедуры включаются одна в другую, самая внутренняя находится на уровне 2, средняя — на уровне 1, а внешняя

— на уровне 0. Уровни вложения нужны для поддержки таких языков, как Паскаль, который позволяет дочерним процедурам получать доступ к локальным переменным, описанным в родительских процедурах. Команда enter аналогична трем командам процессора 8086:

push bр

;

Сохранить текущее значение

mov

bp,sp ;

Записать указатель стека в

Вначале bр засылается в стек для сохранения его исходной величины.

sub sp,n ; Выделить стековое пространство для переменных

Затем в bр устанавливается значение указателя­ стека sp, что позволит командам использовать регистр для адресации локальных переменных. Затем выделяется­ место под переменные путем вычитания первого параметра команды enter из указателя стека.

Расширение системы команд в процессоре 80286

В любой процедуре, использующей enter, перед выходом из процедуры командой ret необходимо выполнить команду­

leave

для освобождения стекового пространства, выделенного enter, и для восстановления sp и . Команда leave выполняет те же действия, что и две команды процессора 8086:

mov

sp,bp

;

Восстановить

указатель стека из bр

pop

;

Восстановить

значение bр

Копирование в sp освобождает пространство, занятое в стеке перед восстановлением величины bр, которая могла использоваться другими процедурами для адресации их собственных локальных переменных. В качестве примера полной процедуры, использующий enter и leave, можно привести подпрограмму:

Расширение системы команд в процессоре 80286

proc1 proc

;зарезервировать в стеке место для локальных переменных ;proc1 16 байт

;лексический уровень вложенности 0 enter 16,0

...

leave ret

proc1 endp

Эти команды не меняют флаги.

2. Новые команды для работы со стеком. Команда

pusha

сохраняет регистры ах, cx, dx, bx, sp, bp, si и di в стеке в перечисленном порядке. Обратите внимание, что указатель стека также сохраняется. Но величина sp, копируемая в стек, соответствует значению­ sp перед выполнением pusha.

Расширение системы команд в процессоре 80286

Команда

рора

удаляет все регистры основного назначения из стека. Выполнение рора (обычно после предшествующей pusha) извлекает регистры di, si, bp, sp, bx, dx, cx и ax в соответствующем порядке. Все регистры общего назначения восстанавливают значения, которые они имели перед выполнением предыдущей команды pusha. Сегментные регистры не сохраняются­ и не восстанавливаются командами pusha

и рора.

Обычно это необходимо в начале и конце процедур обслуживания прерываний, хотя можно использовать эти команды и в простых процедурах.

Эти команды не меняют флаги.

Расширение системы команд в процессоре 80286

3. Команды ввода-вывода строк в порты Синтаксис команд аналогичен описанию примитивов команд

обработки строк. ins dest, port

Команда вводит данные из порта ввода-вывода, номер которого загружен в регистр dx, в память по адресу es:[di]. Сегментная составляющая адреса должна быть обязательно в регистре es. Замена сегментного регистра недопустима. Непосредственное задание порта в команде также недопустимо - для этого используется регистр dx. Размеры вводимых элементов (байт или слова) зависят от способа описания приемника в программе на Ассемблере. Транслятор, обработав команду ins и выяснив тип операнда, генерирует одну из машинных команд:

Расширение системы команд в процессоре 80286

Расширение системы команд в процессоре 80286

Расширение системы команд в процессоре 80286

Пример.

; в сегменте данных

 

str_10

db

10 dup(0)

adr_str

dd

str_10

lds

si,

adr_str

mov

dx,

300h

mov

cx,

10

rep

outsb

 

Эти команды не меняют флаги.

4. Модификация команд сдвига и циклического сдвига. Малозаметным улучшением в командах 80286 является

возможность устанавливать величины непосредственного­ сдвига и циклического сдвига, большие, чем на 1. Это означает, что команды 8086:

Расширение системы команд в процессоре 80286

mov

cl, 4

shl

ax, cl

могут быть упрощены:

shl ах,4

Такое же изменение применимо ко всем командам сдвига и циклического сдвига процессора 8086. При необходимости можно по- прежнему указывать значение сдвига в cl.

Расширение системы команд в процессоре 80386

В процессоре 80386 введены новые команды, позволяющие работать с 32-разрядными данными. Их можно разделить на следующие группы:

1. Команды битового сканирования и проверки битов bsf dest, src

(Bit Scan Forward — битовое сканирование вперед) Используется для установки в 16- или 32-разрядный регистр

приемника номера позиции первого ненулевого бита в байте, слове­ или двойном слове источника. Флаг zf при этом равен 0. Источником может быть регистр или ячейка памяти. Сканирование проходит от младшего бита к старшему. Если не найдено ни одного единичного бита, флаг zf устанавливается в 1 и содержимое приемника не меняется.