
- •Системное программное обеспечение
- •Способы адресации данных
- •Способы адресации данных
- •Способы адресации данных
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Системное программное обеспечение
- •Система команд процессора 8086
- •Команды передачи данных
- •Команды передачи данных
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Логические команды
- •Логические команды
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления процессором
- •Команды управления процессором
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Системное программное обеспечение
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386

Расширение системы команд в процессоре 80286
Если 3 процедуры включаются одна в другую, самая внутренняя находится на уровне 2, средняя — на уровне 1, а внешняя
— на уровне 0. Уровни вложения нужны для поддержки таких языков, как Паскаль, который позволяет дочерним процедурам получать доступ к локальным переменным, описанным в родительских процедурах. Команда enter аналогична трем командам процессора 8086:
push bр |
; |
Сохранить текущее значение |
bр |
|
mov |
bp,sp ; |
Записать указатель стека в |
bр |
Вначале bр засылается в стек для сохранения его исходной величины.
sub sp,n ; Выделить стековое пространство для переменных
Затем в bр устанавливается значение указателя стека sp, что позволит командам использовать регистр для адресации локальных переменных. Затем выделяется место под переменные путем вычитания первого параметра команды enter из указателя стека.

Расширение системы команд в процессоре 80286
В любой процедуре, использующей enter, перед выходом из процедуры командой ret необходимо выполнить команду
leave
для освобождения стекового пространства, выделенного enter, и для восстановления sp и bр. Команда leave выполняет те же действия, что и две команды процессора 8086:
mov |
sp,bp |
; |
Восстановить |
указатель стека из bр |
pop |
bр |
; |
Восстановить |
значение bр |
Копирование 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 и содержимое приемника не меняется.