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

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

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

popfd

(POP eFlags Double word register from the stack — извлечение расширенного регистра флагов из стека)

Извлекает из стека содержимое регистра флагов eflags. Действие на флаги аналогично командам pushf и popf с

учетом 32-разрядного расширения. 5. Set-команды

Набор команд, общий синтаксис которых, может быть представлен следующим образом:

setcc dest

(byte SET on condition — установка байта по условию)

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

Установка приемника (байтового регистра или ячейку памяти) логическим значением (0 или 1) в зависимости от истинности условия, заданного модификатором кода операции cc. Окончание cc у set такие же, как и у команд условного перехода: seta, setae, setb, setbe и т.д.

Пример:

;подсчитать число единичных битов в регистре ax

 

mov

cx,16

 

mov

bh,0

m1:

rol

ax,1

 

setc

bl

 

add

bh,bl

 

clc

 

 

loop

m1

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

6. Сдвиги двойной точности

shld dest, src, cnt

(SHift Left Double word — cдвиг двойного слова влево)

Первый операнд определяет приемник результата и может быть регистром слова либо двойного слова или ссылкой на память. Второй операнд, который должен быть регистром слова или двойного слова, содержит биты, сдвигаемые в первый операнд. Сам он при этом не меняется. Третий операнд представляет собой число битов, которые надо сдвинуть влево. Этот операнд может быть конкретной величиной от 0 до 31 или же регистром cl.

shrd dest, src, cnt

(SHift Right Double word — cдвиг двойного слова вправо) То же самое, что shld, только сдвиг вправо.

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

Два двойных слова, vl и v2, образуют в памяти 64-битовую переменную. Только четыре инструкции требуются для сдвига этой переменной влево на любое число битов — в данном примере­ на 8. Прежде всего в cl загружается счетчик сдвига. Затем вторая часть значения загружается­ в еах. Инструкция shld сдвигает биты из еах в v1, которое также сдвигается влево равное число раз. Инструкция shl завершает сдвиг, сдвигая v2 в соответствии с этим же счетчиком, хранящимся в cl. Эффективным ре­ зультатом является умножение за очень короткий промежуток времени полного 64-битового значения двойной точности на 28 (256 десятичное).

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

7. Команды обработки строк Во все примитивы команд обработки строк процессоров 8086

и 80286 добавлются команды для работы со строками, состоящими из двойных слов:

movsd – копировать строку двойных слов; cmpsd – сравнение строк двойных слов; scasd – сканировать строку двойных слов; lodsd – загрузить строку двойных слов; stosd – сохранить строку двойных слов; insd – ввести строку двойных слов из порта; outsd - вывести строку двойных слов в порт.