
- •Системное программное обеспечение
- •Способы адресации данных
- •Способы адресации данных
- •Способы адресации данных
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Системное программное обеспечение
- •Система команд процессора 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

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

Расширение системы команд в процессоре 80386
mov bx, 00010110b |
|
|
|
bsf cx, bx |
; cx |
= |
1 |
bsr cx, bx |
; cx |
= |
4 |
bt dest, src
(Bit Test — проверка бита)
Копирует бит приемника, номер которого указан в источнике, в флаг переноса cf. Каждый из операндов может быть 16- или 32-разрядным регистром; второй операнд может задаваться непосредственным значением. Приемник может быть 16- или 32- разрядной ячейкой памяти, а источник непосредственным значением.
btс dest, src
(Bit Test and Complement — проверка бита с инверсией)
То же самое, что bt, но только бит приемника после копирования в флаг переноса cf меняет значение на противоположное.

Расширение системы команд в процессоре 80386
btr dest, src
(Bit Test and Reset — проверка бита с его сбросом в 0)
То же самое, что bt, но только бит приемника после копирования в флаг переноса cf сбрасывается в 0.
bts dest, src
(Bit Test and Set — проверка бита с его установкой в 1)
То же самое, что bt, но только бит приемника после копирования в флаг переноса cf устанавливается в 1.
mov |
dx,01010011b |
|
bt |
dx,4 |
;проверка состояния бита 4 и установка cf в 1 |
jc |
m1 |
;перейти на m1, если проверяемый бит равен 1 |
2. Команды конвертирования данных
В дополнение к cbw и cwd можно использовать:

Расширение системы команд в процессоре 80386
cdq
(Convert Double word to Quad word — преобразование двойного слова в учетверенное слово),
для того чтобы конвертировать 32-битовое двойное слово со знаком в eax в 64-битовое четверное слово со знаком в паре регистров edx:eax путем копирования значения старшего бита регистра eax на все биты регистра edx
и
cwde
(Convert Word to Double Word Extended — преобразование слова в двойное слово)
для конвертации слова со знаком в ax в двойное слово со знаком в расширенный аккумулятор еах путем копирования значения старшего бита регистра ax на все биты старшего слова регистра еах.
Эти команды не влияют на флаги.

Расширение системы команд в процессоре 80386
mov |
eax,delimoe |
|
cdq |
|
|
idiv |
delitel |
;частное в eax, остаток в edx |
movsx dest, src
(MOVe and Sign eXtension — пересылка со знаковым расширением) преобразует элемент со знаком меньшей размерности в эквивалентный ему элементы со знаком большей размерности путем распространения значения знакового разряда источника на свободные старшие разряды приемника.
movzx dest, src
(MOVe and Zero eXtension — пересылка с нулевым расширением) то же самое, что и movsx, но для чисел без знака. При этом двоичный нуль распространяется на свободные старшие разряды приемника.
Эти команды также не влияют на флаги.

Расширение системы команд в процессоре 80386
Для обеих команд первый операнд должен быть 16- или 32- битовым расширенным регистром. Второй операнд может быть 8- либо 16-битовым регистром или указателем на память.
mov |
al, |
0ffh |
|
movsx |
bx, |
al |
;bx=0ffffh |
3. Команды для загрузки сегментных регистров Позволяют получить логический адрес в виде сегментной
составляющей и смещения.
lfs dest, src
(Load pointer into fs segment register — загрузка сегментного регистра fs указателем из памяти)
Алгоритм работы команды зависит от действующего режима адресации (16- или 32-разрядной):

Расширение системы команд в процессоре 80386
•если 16-разрядный, то первые два байта из ячейки памяти источника загружаются в 16-разрядный регистр, указанный операндом приемник. Следующие два байта источника загружаются в регистр fs;
•если 32-разрядный, то первые четыре байта из ячейки памяти источника заргужаются в 32-разрядный регистр, указанный операндом приемник. Следующие два байта источника загружаются в регистр fs.
lgs dest, src
(Load pointer into gs segment register — загрузка сегментного регистра gs указателем из памяти)
То же самое, что lfs, только загружается сегментный регистр gs.

Расширение системы команд в процессоре 80386
lss dest, src
(Load pointer into ss segment register — загрузка сегментного регистра ss указателем из памяти)
То же самое, что lfs, только загружается сегментный регистр ss.
Все команды не влияют на флаги.
Третья команда — lss позволяет, как частный случай, инициализировать одновременно ss и sp.
Одним из способов применения lss является подхватывание адреса альтернативного стека, как де монстрирует пример.

Расширение системы команд в процессоре 80386
mov oldss, ss |
; Сохранение старого стекового сегмента |
|
mov oldsp, sp |
; и старого указателя стека |
|
lss sp, newstack |
; Загрузка ss:sp |
новыми значениями |
. |
|
|
. |
|
|
. |
|
|
mov sp, oldsp |
; Восстановление |
sp |
mov ss, oldss |
; Восстановление |
ss |
4. Команды для работы со стеком pushad
(PUSH All general Double word registers onto stack — размещение всех регистров общего назначения в стеке)
Размещает в стеке регистры общего назначения в следующей последовательности: eax, ecx, edx, ebx, esp, ebp, esi, edi. Величина сохраненного esp равна величине указателя стека до выполнения
pushad.

Расширение системы команд в процессоре 80386
popad
(POP All general Double word registers from the stack — извлечение всех регистров общего назначения из стека)
Извлекает из стека регистры общего назначения в следующей последовательности: edi, esi, ebp, esp, ebx, edx, ecx, eax. Регистр esp по-прежнему восстанавливается тем же значением, которое он имел до pushad.
Команды не влияют на флаги. pushfd
(PUSH eFlags Double word register onto stack — размещение расширенного регистра флагов в стеке)
Размещает в стеке содержимое регистра флагов eflags.