OUTS порт, источник ОUТSВ/ОUТSW/ОUТSD • 6Е OUTS DХ, DS:(E)SI 6F OUTS DX, DS:SI(ESI) 6F OUTS DX, DS: 6E OUTSB 6F OUTSW\OUTSO • Вывод строки байтов (слов, двойных слов) в порт. Действие: команда копирует элементы размером байт (слово, двойное слово) из источника в порт ввода-вывода. Номер порта ввода-вывода загружается в регистр DX. Адрес ячейки памяти, из которой копируются данные, содержится по адресу DS: ESI/SI (допускается замена сегмента). По результатам команды значение регистров ESI/SI изменяется на длину элемента. Направление изменения зависит от состояния флага DF: Ш если DF= 0, то содержимое регистров ESI/SI увеличивается на длину элемента последова- тельности; Ш если DF = 1, то содержимое регистров ESI/SI уменьшается на длину элемента последовательности. Для пересылки последовательности элементов необходимо использовать префикс REP. PAUSE • PAUSE • FЗ 90 •Улучшение выполнения циклов ожидания-занятости. Действие: улучшить выполнение циклов ожидания-занятости (spin-wait loops). При выполне- нии подобных циклов процессор Pentium 4 испытывает трудности в завершении цикла, обнаружи- вая возможное нарушение доступа к памяти. Команда PAUSE подсказывает процессору, что данная кодовая последовательность — цикл ожидания-занятости. Процессор использует эту подсказку, чтобы игнорировать возможную ситуацию нарушения доступа к памяти в большинстве случаев. Это улучшает работу процессора вплоть до того, что значительно уменьшает его энергопотребле- ние. По этой причине рекомендуется включать команду PAUSE во все циклы ожидания-занятости. POP • POP приемник ■ 8F/0 POP mlб 8F/0 POP mЗ2 58 + rw РОРrlб 58 + rd POP rЗ2 IF POP DS 07 POP ЕS 17 РОРSS OF Аl POP FS OF А9 POP GS • Извлечение значения из стека. Действие: команда восстанавливает содержимое вершины стека в регистр, ячейку памяти или сегментный регистр, после чего содержимое ESP/SP увеличивается на четыре байта для usеЗ2 и на два байта для usеlб. Недопустимо восстановление значения в сегментный регистр CS. POPA/POPAD • POPA/POPAD ' • 61 • Восстановление содержимого регистров общего назначения из стека. Действие: команда POPA/POPAD восстанавливает содержимое всех регистров общего назначе- ния (DI/ЕDI, SI/ЕSI, ВР/ЕВР, SР/ЕSР, ВХ/ЕВХ, DХ/ЕDХ, СХ/ЕСХ, АХ/ЕАХ) из стека, после чего значение указателя стека SP/ESP увеличивается на 16(32). Содержимое DI/EDI восстанавливается первым. Содержимое SP/ESP при этом не восстанавливается. Какие именно регистры — 16- или 32-раз- рядные — извлекаются из стека, зависит от установленного размера операнда. При необходимо- сти изменения размера операнда для инструкции POPA/POPAD можно использовать префикс 66h. POPF/POPFD • POPF/POPFD • 9D • Извлечение регистра флагов из стека. Действие: команда POPF/POPFD восстанавливает из стека содержимое регистра флагов FLAGS/ EFLAGS, после чего увеличивает значение регистра-указателя стека SP/ESP на 2(4). Размерность выталкиваемого регистра зависит от установленного размера операнда. Действие команды POPF/ POPFD зависит от режима работы процессора. ⅜-- В защищенном режиме на уровне привилегий 0 (или в реальном режиме) в регистре FLAGS/ EFLAGS могут быть изменены любые незарезервированные флаги (за исключением флагов VIP, VIFи VМ). Флаги VIP и VIFочищаются, афлагVМ не изменяется. В защищенном режиме на уровне привилегий, большем чем 0, но меньшем (или равным) значения в поле IOPL, все флаги могут быть изменены за исключением поля IOPL и флагов VIP, VIF и VМ, При этом поле IOPL и флаг VМ не изменяются, а флаги VIP и VIF очищаются. Флаг IF изменяется, если выполнение производится на уровне, равном или меньшем значению поля IOPL, в противном случае исключения не происходит, но и привилегированные биты не изме- няются. Λ В режиме виртуального процессора 8086 для использования команды POPF/POPFD уровень привилегий I/O (IOPL) должен быть равен 3 (при этом флаги VM, RF, IOPL, VIP и VIF не изменя- ются). Если уровень привилегий меньше 3, то команда POPF/POPFD вызывает исключение об- щей защиты (#GР). Флаги: изменяются все флаги, кроме зарезервированных и флага VМ.