- •Системное программное обеспечение
- •Расширение системы команд в процессоре 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
Для обеих команд первый операнд должен быть 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 - вывести строку двойных слов в порт.
