Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция № 6 Расширение системы команд в процессорах 80286 и 80386.ppt
Скачиваний:
8
Добавлен:
07.08.2024
Размер:
637.95 Кб
Скачать

Расширение системы команд в процессоре 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 и содержимое приемника не меняется.

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

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