Инструкции процессора (продолжение)

OR Логическая операция ИЛИ.

--------------------------------------------------------- O D I T S Z A P C 0 * * ? * 0 ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +--------T-----------T----T-----T---T---T-----------------------+ ¦ ¦ ¦486 ¦386 ¦286¦86 ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦0C ib ¦OR AL,imm8 ¦1 ¦2 ¦3 ¦4 ¦Операция ИЛИ над не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственным байтом и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦0D iw ¦OR AX,imm16¦1 ¦2 ¦3 ¦4 ¦Операция ИЛИ над не-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦посредственным словом и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦0D id ¦OR EAX, ¦1 ¦2 ¦ ¦ ¦Операция ИЛИ над не-¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦посредственным двойным¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом и регистром EAX.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦80 /1 ib¦OR r/m8, ¦1/3 ¦2/7 ¦/7 ¦4/ ¦Операция ИЛИ над не-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦17+¦посредственным байтом¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦и байтом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦81 /1 iw¦OR r/m16, ¦1/3 ¦2/7 ¦/7 ¦4/ ¦Операция ИЛИ над не-¦ ¦ ¦ imm16 ¦ ¦ ¦ ¦17+¦посредственным словом¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦и словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦81 /1 iw¦OR r/m32, ¦1/3 ¦2/7 ¦ ¦ ¦Операция ИЛИ над не-¦ ¦ ¦ imm32 ¦ ¦ ¦ ¦ ¦посредственным двойным¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом и двойным словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦83 /1 ib¦OR r/m16, ¦1/3 ¦2/7 ¦ ¦ ¦Операция ИЛИ над не-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦посредственным байтом,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦расширяемым по знаку, и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦08 /r ¦OR r/m8,r8 ¦1/3 ¦2/6 ¦/7 ¦3/ ¦Операция ИЛИ над бай-¦ ¦ ¦ ¦ ¦ ¦ ¦16+¦товым регистром и бай-¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦том r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦09 /r ¦OR r/m16, ¦1/3 ¦2/6 ¦/7 ¦3/ ¦Операция ИЛИ над ре-¦ ¦ ¦ r16 ¦ ¦ ¦ ¦16+¦гистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦слово и словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦09 /r ¦OR r/m32, ¦1/3 ¦2/6 ¦ ¦ ¦Операция ИЛИ над ре-¦ ¦ ¦ r32 ¦ ¦ ¦ ¦ ¦гистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово и двойным¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦0A /r ¦OR r8,r/m8 ¦1/3 ¦2/6 ¦/7 ¦3/ ¦Операция ИЛИ над бай-¦ ¦ ¦ ¦ ¦ ¦ ¦16+¦товым регистром и бай-¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦том r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦0B /r ¦OR r16, ¦1/3 ¦2/6 ¦/7 ¦3/ ¦Операция ИЛИ над ре-¦ ¦ ¦ r/m16 ¦ ¦ ¦ ¦16+¦гистром размером в сло-¦ ¦ ¦ ¦ ¦ ¦ ¦EA ¦во и словом r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+-----+---+---+-----------------------+ ¦0B /r ¦OR r32, ¦1/3 ¦2/6 ¦ ¦ ¦Операция ИЛИ над ре-¦ ¦ ¦ r/m32 ¦ ¦ ¦ ¦ ¦гистром размером в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦двойное слово и словом¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+-----------+----+-----+---+---+------------------------ Операция OR выполняет операцию ИЛИ над двумя операндами и помещает результат в первый операнд. Бит результата равен 0, если оба соответствующих бита операндов равны 0, и 1 в противном слу- чае.

OUT Вывод данных в порт.

--------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код Инструкция Такты Описание ¦ ¦операции ¦ +-------T------------T------T-----T---T---T---------------------+ ¦ ¦ ¦486 ¦386 ¦286¦86 ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦E6 ib ¦OUT imm8,AL ¦16, ¦10, ¦3 ¦10 ¦Выводит байт AL в¦ ¦ ¦ ¦pm= ¦pm= ¦ ¦ ¦порт, номер которого¦ ¦ ¦ ¦11/31,¦4/24 ¦ ¦ ¦задается непосредст-¦ ¦ ¦ ¦vm=29 ¦ ¦ ¦ ¦венным операндом. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦E7 ib ¦OUT imm8,AX ¦16, ¦10, ¦3 ¦10 ¦Выводит слово AX в¦ ¦ ¦ ¦pm= ¦pm= ¦ ¦ ¦порт, номер которого¦ ¦ ¦ ¦11/31,¦4/25 ¦ ¦ ¦задается непосредст-¦ ¦ ¦ ¦vm=29 ¦ ¦ ¦ ¦венным операндом. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦E7 ib ¦OUT imm8, ¦16, ¦10, ¦ ¦ ¦Выводит двойное слово¦ ¦ ¦ EAX ¦pm= ¦pm= ¦ ¦ ¦в EAX в порт, номер¦ ¦ ¦ ¦11/31,¦4/25 ¦ ¦ ¦которого задается не-¦ ¦ ¦ ¦vm=29 ¦ ¦ ¦ ¦посредственным опе-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦рандом. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦EE ¦OUT DX,AL ¦16, ¦11, ¦ ¦ ¦Выводит байт AL в¦ ¦ ¦ ¦pm= ¦pm= ¦ ¦ ¦в порт, номер которо-¦ ¦ ¦ ¦11/31,¦5/25 ¦ ¦8 ¦го задается регистром¦ ¦ ¦ ¦vm=29 ¦ ¦ ¦ ¦DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦EF ¦OUT DX,AX ¦16, ¦11, ¦ ¦ ¦Выводит слово AX в¦ ¦ ¦ ¦pm= ¦pm= ¦ ¦ ¦в порт, номер которо-¦ ¦ ¦ ¦11/31,¦5/25 ¦ ¦8 ¦го задается регистром¦ ¦ ¦ ¦vm=29 ¦ ¦ ¦ ¦DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦EF ¦OUT DX,EAX ¦16, ¦11, ¦ ¦ ¦Выводит двойное слово¦ ¦ ¦ ¦pm= ¦pm= ¦ ¦ ¦в EAX в порт, номер¦ ¦ ¦ ¦11/31,¦5/25 ¦ ¦8 ¦которого задается ре-¦ ¦ ¦ ¦vm=29 ¦ ¦ ¦ ¦гистром DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+------------+------+-----+---+---+---------------------+ ¦ 11, 5 - если CPL <= IOPL. ¦ ¦ 31, 25 - если CLP > IOPL или в виртуальном режиме процессо-¦ ¦ ра 8086. ¦ L---------------------------------------------------------------- Инструкция OUT пересылает байт или слово данных из регистра (AL, AX или EAX) в порт, номер которого задается первым операн- дом. Вывод в порт с номером от 0 до 65535 выполняется путем зане- сения номера порта в регистр DX и выполнения инструкции OUT с DX в качестве первого операнда. Если инструкция содержит 8-битовый идентификатор порта, то значение расширяется (нулем) до 16 бит.

OUTS Вывод строки в порт (инструкции OUTS/OUTSB/OUTSW толь- OUTSB ко для процессоров 80186/286/386/486, инструкция OUTSD OUTSW - только для процессоров 386 и i486).

OUTSD ------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T--------------T--------T------T---T---------------------+ ¦ ¦ ¦486 ¦386 ¦286¦ ¦ +------+--------------+--------+------+---+---------------------+ ¦6E ¦OUTS DX,r/m8 ¦17,pm= ¦14,pm=¦5 ¦Выводит байт [(E)SI]¦ ¦ ¦ ¦10/32, ¦8/28 ¦ ¦в порт, номер кото-¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦рого задан в регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ре DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+--------+------+---+---------------------+ ¦6F ¦OUTS DX,r/m16 ¦17,pm= ¦14,pm=¦ 5 ¦Выводит слово [(E)SI]¦ ¦ ¦ ¦10/32, ¦8/28 ¦ ¦в порт, номер кото-¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦рого задан в регист-¦ ¦ ¦ ¦ ¦ ¦ ¦ре DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+--------+------+---+---------------------+ ¦6F ¦OUTS DX,r/m32 ¦17,pm= ¦14,pm=¦ ¦Выводит двойное слово¦ ¦ ¦ ¦10/32, ¦8/28 ¦ ¦[(E)SI] в порт, номер¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦которого задан в ре-¦ ¦ ¦ ¦ ¦ ¦ ¦гистре DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+--------+------+---+---------------------+ ¦6E ¦OUTSB ¦17,pm= ¦14,pm=¦ 5 ¦Выводит байт DS:¦ ¦ ¦ ¦10/32, ¦8/28 ¦ ¦[(E)SI] в порт, номер¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦которого задан в ре-¦ ¦ ¦ ¦ ¦ ¦ ¦гистре DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+--------+------+---+---------------------+ ¦6E ¦OUTSW ¦17,pm= ¦14,pm=¦ 5 ¦Выводит слово DS:¦ ¦ ¦ ¦10/32, ¦8/28 ¦ ¦[(E)SI] в порт, номер¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦которого задан в ре-¦ ¦ ¦ ¦ ¦ ¦ ¦гистре DX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------------+--------+------+---+---------------------+ ¦6F ¦OUTSD ¦17,pm= ¦14,pm=¦ ¦Выводит двойное слово¦ ¦ ¦ ¦10/32, ¦8/28 ¦ ¦DS:[(E)SI] в порт,¦ ¦ ¦ ¦vm=30 ¦ ¦ ¦номер которого задан¦ ¦ ¦ ¦ ¦ ¦ ¦в регистре DX. ¦ L------+--------------+--------+------+---+---------------------- Инструкция OUTS пересылает данные из байта, слова или двой- ного слова в памяти в соответствии с индексным регистром источни- ка в порт вывода, адресуемый через регистр DX. Если атрибут раз- мера адреса для данной инструкции равен 16 битам, то в качестве индексного регистра источника используется регистр SI. В против- ном случае, если атрибут размера адреса равен 32, то в качестве индексного используется регистр ESI. Инструкция OUTS не позволяет задавать номер порта, как не- посредственное значение. К порту нужно адресоваться через значе- ние в регистре DX. Перед выполнением инструкции OUTS загрузите в регистр DX корректное значение. Адрес исходных данных определяется содержимым индексного ре- гистра источника. Перед выполнением инструкции OUTS загрузите в регистр SI или ESI. После выполнения передачи данных исходный индексный регистр автоматически продвигается. Если флаг направления равен 0 (была выполнена инструкция CLD), то индексный регистр источника инкре- ментируется (увеличивается). Если флаг направления равен 1 (была выполнена инструкция STD), то он декрементируется (уменьшается). Инструкции OUTSB, OUTSW и OUTSD являются синонимами инструк- ции OUTS для работы с байтами, словами и двойными словами. Инс- трукции OUTS может предшествовать префикс REP. Это позволяет вы- водить блоки из CX байт или слов. Подробности этой операции можно найти в описании REP.

POP Извлекает слово из стека.

------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T--------T---T------T------T-----T-----------------------+ ¦ ¦ ¦486¦386 ¦286 ¦86 ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦8F /0 ¦POP m16 ¦6 ¦5 ¦5 ¦17+EA¦Извлекает слово из сте-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ка и помещает его в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово в памяти. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦8F /0 ¦POP m32 ¦6 ¦5 ¦ ¦ ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в двойное¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦слово в памяти. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦58+rw ¦POP r16 ¦4 ¦4 ¦ ¦8 ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр раз-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦мером в слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦58+rd ¦POP r32 ¦4 ¦4 ¦ ¦ ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр раз-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦мером в двойное слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦1F ¦POP DS ¦3 ¦7,pm= ¦5,pm= ¦8 ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦21 ¦20 ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр DS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦07 ¦POP ES ¦3 ¦7,pm= ¦5,pm= ¦8 ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦21 ¦20 ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр ES. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦17 ¦POP SS ¦3 ¦7,pm= ¦5,pm= ¦8 ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦21 ¦20 ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр SS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦0F A1 ¦POP FS ¦3 ¦7,pm= ¦ ¦ ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦21 ¦ ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр FS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+---+------+------+-----+-----------------------+ ¦0F A9 ¦POP GS ¦3 ¦7,pm= ¦ ¦ ¦Извлекает верхний эле-¦ ¦ ¦ ¦ ¦21 ¦ ¦ ¦мент из стека и поме-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦щает его в регистр GS. ¦ L------+--------+---+------+------+-----+------------------------ Инструкция POP заменяет предыдущее содержимое операнда в па- мяти, регистра или сегментного регистра словом, которое находится в вершине стека и адресуется через SS:SP (если атрибут размера адреса равен 16) или SS:ESP (если атрибут размера адреса равен 32). Указатель стека SP увеличивается на 2 для операнда размером в 16 бит и на 4 для операнда размером в 32 бита. После этого он указывает на новую вершину стека. POP CS - это не инструкция. Извлечение из стека в регистр CS выполняется с помощью инструкции RET. Если операндом-приемником является сегментный регистр (DS, ES, FS, GS или SS), то извлекаемое из стека значение должно быть селектором. В защищенном режиме загрузка селектора инициализирует автоматическую загрузку в скрытую часть сегментного регистра свя- занной с селектором информации о дескрипторе. Загрузка инициали- зирует также проверку допустимости информации селектора и деск- риптора. Нулевое значение (0000 - 0003) должно извлекаться и зано- ситься в регистры DS, ES, FS или GS не вызывая исключительной си- туации по нарушению защиты. Попытка ссылки на значение сегмента, соответствующий сегментный регистр которого загружен нулевым зна- чением, вызывает исключительную ситуацию #GP(0). Ссылки на память не происходит. Сохраненное значение сегментного регистра равно нулю. Инструкция POP SS запрещает все прерывания, включая NMI (не- маскируемые), до выполнения следующей инструкции. Это позволяет последовательно выполнять инструкции POP SS и POP ESP без опас- ности получения в процессе прерывания недопустимого стека. Одна- ко, предпочтительным методом загрузки регистров SS и ESP является использование инструкции LSS. Примечание: Турбо Ассемблер расширяет синтаксис инс- трукции POP, чтобы можно было извлекать несколько элементов последовательности. Извлекаемые элементы могут включать в себя любое допустимое значение POP, включая регистры, непос- редственные значения и ячейки памяти. На генерируемый код данное средство в действительности не влияет.

POPA Извлекает из стека все общие регистры (инструкция POPA POPAD только для процессоров 80186/286/386/486, инструкция POPAD - только для процессоров 386 и i486).

------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T--------T---T---T-----T-------------------------------+ ¦ ¦ ¦486¦386¦286 ¦ ¦ +--------+--------+---+---+-----+-------------------------------+ ¦61 ¦POPA ¦9 ¦24 ¦19 ¦Извлекает из стека регистр DI. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+--------+---+---+-----+-------------------------------+ ¦61 ¦POPAD ¦9 ¦24 ¦19 ¦Извлекает из стека EDI. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+--------+---+---+-----+-------------------------------- Инструкция POPA извлекает из стека восемь 16-разрядных общих регистров. Однако, вместо загрузки в SP значение SP отбрасывает- ся. Инструкция POPA изменяет действие предыдущей инструкции PUSHA на обратное, восстанавливая общие регистры в те значения, которые у них были до инструкции PUSHA. Первым извлекается регистр DI. Инструкция POPAD извлекает из стека восемь 32-разрядных об- щих регистров. Однако, вместо загрузки в ESP значение ESP отбра- сывается. Инструкция POPAD изменяет действие предыдущей инструк- ции PUSHAD на обратное, восстанавливая общие регистры в те значения, которые у них были до инструкции PUSHAD. Первым извле- кается регистр EDI.

POPF Извлекает из стека регистр FLAGS (регистр флагов) или POPFD EFLAGS (инструкция POPFD - только для процессоров 386 и i486).

------------------------------------------------------- O D I T S Z A P C * * * * * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T--------T-------T---T---T--T----------------------------+ ¦ ¦ ¦486 ¦386¦286¦86¦ ¦ +------+--------+-------+---+---+--+----------------------------+ ¦9D ¦POPF ¦9,pm=6 ¦5 ¦5 ¦8 ¦Извлекает из стека FLAGS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+--------+-------+---+---+--+----------------------------+ ¦9D ¦POPFD ¦9,pm=6 ¦5 ¦ ¦ ¦Извлекает из стека EFLAGS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+--------+-------+---+---+--+----------------------------- Инструкции POPF/POPFD извлекают слово или двойное слово из вершины стека и записывают это значение в регистре флагов. Если атрибут размера операнда в инструкции равен 16, то слово извлека- ется, а значение сохраняется в регистре флагов FLAGS. Если атри- бут размера операнда равен 32, то извлекается двойное слово, а значение записывается в EFLAGS. Заметим, что биты 16 и 17 регистра EFLAGS, которые называют- ся соответственно VM и RF инструкцией POPF или POPFD не изменяют- ся. Уровень привилегий ввода-вывода изменяется только при выпол- нении на привилегированном уровне 0. Флаг прерываний изменяется только при выполнении на уровне, привилегии которого по крайней мере не ниже, чем уровень привилегий ввода-вывода. (Режим реаль- ной адресации эквивалентен уровню привилегий 0.) Если инструкция POPF выполняется с недостаточными привилегиями, исключительная ситуация не возникает, а биты привилегий не изменяются.

PUSH Заносит операнд в стек.

------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T----------T---T---T---T---T-----------------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦FF /6 ¦PUSH m16 ¦4 ¦5 ¦5 ¦16 ¦Заносит в стек слово из памя-¦ ¦ ¦ ¦ ¦ ¦ ¦+EA¦ти. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦FF /6 ¦PUSH m32 ¦4 ¦5 ¦ ¦ ¦Заносит в стек двойное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦из памяти. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦50+/r ¦PUSH r16 ¦1 ¦2 ¦3 ¦11 ¦Заносит в стек слово из ре-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦гистра. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦50+/r ¦PUSH r32 ¦1 ¦2 ¦ ¦ ¦Заносит в стек двойное слово¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦из регистра. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦6A ¦PUSH imm8 ¦1 ¦2 ¦3 ¦ ¦Заносит в стек непосредствен-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ный байт. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦68 ¦PUSH imm16¦1 ¦2 ¦3 ¦ ¦Заносит в стек непосредствен-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦68 ¦PUSH imm32¦1 ¦2 ¦ ¦ ¦Заносит в стек непосредствен-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ное двойное слово. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦0E ¦PUSH CS ¦3 ¦2 ¦3 ¦ 10¦Заносит в стек регистр CS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦16 ¦PUSH SS ¦3 ¦2 ¦3 ¦ 10¦Заносит в стек регистр SS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦1E ¦PUSH DS ¦3 ¦2 ¦3 ¦ 10¦Заносит в стек регистр DS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦06 ¦PUSH ES ¦3 ¦2 ¦ ¦ 10¦Заносит в стек регистр ES. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦0F A0 ¦PUSH FS ¦3 ¦2 ¦ ¦ ¦Заносит в стек регистр FS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+---+---+---+---+-----------------------------+ ¦0F A8 ¦PUSH GS ¦3 ¦2 ¦ ¦ ¦Заносит в стек регистр GS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+----------+---+---+---+---+------------------------------ Инструкция PUSH уменьшает указатель стека на 2, если атрибут размера операнда инструкции равен 16, в противном случае указа- тель стека уменьшается на 4. Затем инструкция PUSH помещает опе- ранд в новую вершину стека, на которую указывает указатель стека. Инструкция PUSH ESP процессора 386 заносит в стек значение ESP, которое существовало до выполнения инструкции. Инструкция PUSH SP процессора 80286 также заносит в стек значение регистра SP, которое существовало до выполнения инструкции. Это отличается от процессора 8086, который заносит в стек новое значение (умень- шенное на 2). Примечание: Турбо Ассемблер расширяет синтаксис инс- трукции PUSH, чтобы можно было заносить в стек несколько элементов последовательности. Заносимые в стек элементы мо- гут включать в себя любое допустимое для инструкции PUSH значение, включая регистры, непосредственные значения и ячейки памяти. На генерируемый код данное средство в дейс- твительности не влияет. Кроме того, инструкция PUSH допуска- ет использование аргумента-константы, даже для процессора 8086. Такие инструкции заменяются в объектном коде 10-байто- вой последовательностью, которая моделирует инструкцию PUSH процессора 80186/286/286 с непосредственным значением.

PUSHA Заносит в стек все общие регистры (инструкция PUSHA PUSHAD только для процессоров 80186/286/386/486, инструкция PUSHAD - только для процессоров 386 и i486).

------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T--------T---T---T----T----------------------------------+ ¦ ¦ ¦486¦386¦286 ¦ ¦ +------+--------+---+---+----+----------------------------------+ ¦61 ¦PUSHA ¦11 ¦18 ¦17 ¦Заносит в стек AX, CX, DX, BX, ис-¦ ¦ ¦ ¦ ¦ ¦ ¦ходные SP, BP, SI. ¦ +------+--------+---+---+----+----------------------------------+ ¦61 ¦PUSHAD ¦11 ¦18 ¦ ¦Заносит в стек EAX, ECX, EDX, EBX.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L------+--------+---+---+----+----------------------------------- Инструкция PUSHA сохраняет в стеке восемь 16-разрядных общих регистров. Инструкция PUSHA, чтобы можно было записать 8 значений размером в слово, уменьшает указатель стека (SP) на 16. Инструк- ция PUSHAD уменьшает указатель (ESP) стека на 32, чтобы можно бы- ло записать 8 значений размером в двойное слово. Поскольку ре- гистры заносятся в стек в том порядке, как они задаются, извле- каться они будут в виде 16 или 32 байт стека в обратном порядке. Последним заносится регистр DI или EDI.

PUSHF Заносит в стек регистр флагов (инструкция PUSHFD - PUSHFD только для процессоров 386 и i486).

------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T--------T-------T---T---T--T--------------------------+ ¦ ¦ ¦486 ¦386¦286¦86¦ ¦ +--------+--------+-------+---+---+--+--------------------------+ ¦9C ¦PUSHF ¦4,pm=3 ¦4 ¦5 ¦10¦Заносит в стек FLAGS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+--------+-------+---+---+--+--------------------------+ ¦9C ¦PUSHFD ¦4,pm=3 ¦4 ¦ ¦ ¦Заносит в стек EFLAGS. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L--------+--------+-------+---+---+--+--------------------------- Инструкция PUSHF уменьшает указатель стека на 2 и копирует регистр флагов FLAGS в новую вершину стека. Инструкция PUSHFD уменьшает указатель стека на 4, а регистр EFLAGS процессора 386 копируется в новую вершину стека, на которую указывает EE:ESP.

RCR Циклический сдвиг.

RCR ------------------------------------------------------- ROL O D I T S Z A P C ROR * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +--------T-----------T----T----T---T-------T--------------------+ ¦ ¦ ¦486 ¦386 ¦286¦86 ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D0 /2 ¦RCL r/m8,1 ¦3/4 ¦9/10¦2/7¦2/15+EA¦Циклическая перес-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦тановка 9 бит (CF,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m) влево 1¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D2 /2 ¦RCL r/m8,CL¦8-30¦9/10¦5/8¦8+4 на ¦Циклическая перес-¦ ¦ ¦ ¦/9- ¦ ¦ ¦бит/(20¦тановка 9 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦байта r/m) влево CL¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C0 /2 ib¦RCL r/m8, ¦8-30¦9/10¦ ¦ ¦Циклическая перес-¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦тановка 9 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦байта r/m) влево¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /2 ib¦RCL r/m16,1¦3/4 ¦9/10¦2/7¦2/15+EA¦Циклическая перес-¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦тановка 17 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦слова r/m) влево¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /2 ¦RCL r/m16, ¦8-30¦9/10¦5/8¦8+4 на ¦Циклическая перес-¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦бит/(20¦тановка 17 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦слова r/m) влево CL¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /2 ib¦RCL r/m16, ¦8-30¦9/10¦5/8¦ ¦Циклическая перес-¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦тановка 17 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦слова r/m) влево¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /2 ¦RCL r/m32,1¦3/4 ¦9/10¦ ¦ ¦Циклическая перес-¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦тановка 33 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦двойного слова r/m)¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦влево 1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /2 ¦RCL r/m16, ¦8-30¦9/10¦ ¦ ¦Циклическая перес-¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦ ¦тановка 33 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦двойного слова r/m)¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦влево CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /2 ib¦RCL r/m32, ¦8-30¦9/10¦5/8¦ ¦Циклическая перес-¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦тановка 33 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦двойного слова r/m)¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦влево imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D0 /3 ¦RCR r/m8,1 ¦3/4 ¦9/10¦2/7¦2/15+EA¦Циклическая перес-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦тановка 9 бит (CF,¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m) вправо 1¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D2 /3 ¦RCR r/m8,CL¦8-30¦9/10¦5/8¦8+4 на ¦Циклическая перес-¦ ¦ ¦ ¦/9- ¦ ¦ ¦бит/(20¦тановка 9 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦байта r/m) вправо CL¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C0 /3 ib¦RCR r/m8, ¦8-30¦9/10¦ ¦ ¦Циклическая перес-¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦тановка 9 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦байта r/m) вправо¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /3 ib¦RCR r/m16,1¦3/4 ¦9/10¦2/7¦2/15+EA¦Циклическая перес-¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦тановка 17 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦слова r/m) вправо¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /2 ¦RCR r/m16, ¦8-30¦9/10¦5/8¦8+4 на ¦Циклическая перес-¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦бит/(20¦тановка 17 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦слова r/m) вправо CL¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /2 ib¦RCR r/m16, ¦8-30¦9/10¦5/8¦ ¦Циклическая перес-¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦тановка 17 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦слова r/m) вправо¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /2 ¦RCR r/m32,1¦3/4 ¦9/10¦ ¦ ¦Циклическая перес-¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦тановка 33 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦двойного слова r/m)¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вправо 1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /2 ¦RCR r/m16, ¦8-30¦9/10¦ ¦ ¦Циклическая перес-¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦ ¦тановка 33 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦двойного слова r/m)¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вправо CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /0 ib¦RCR r/m32, ¦8-30¦9/10¦5/8¦ ¦Циклическая перес-¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦тановка 33 бит (CF,¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦двойного слова r/m)¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вправо imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D0 /0 ¦ROL r/m8,1 ¦3/4 ¦9/10¦2/7¦2/15+EA¦Перестановка 8 бит¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m влево 1¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D2 /0 ¦ROL r/m8,CL¦8-30¦9/10¦5/8¦8+4 на ¦Перестановка 8 бит¦ ¦ ¦ ¦/9- ¦ ¦ ¦бит/(20¦байта r/m влево CL¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C0 /0 ib¦ROL r/m8, ¦8-30¦9/10¦ ¦ ¦Перестановка 8 бит¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦байта r/m влево imm8¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /0 ib¦ROL r/m16,1¦3/4 ¦9/10¦2/7¦2/15+EA¦Перестановка 16 бит¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦слова r/m влево 1¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /0 ¦ROL r/m16, ¦8-30¦9/10¦5/8¦8+4 на ¦Перестановка 16 бит¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦бит/(20¦слова r/m влево CL¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /0 ib¦ROL r/m16, ¦8-30¦9/10¦5/8¦ ¦Перестановка 16 бит¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦слова r/m) влево¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /0 ¦ROL r/m32,1¦3/4 ¦9/10¦ ¦ ¦Перестановка 32 бит¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦двойного слова r/m¦ ¦ ¦ ¦13 ¦ ¦ ¦ ¦влево 1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /0 ¦ROL r/m16, ¦8-30¦9/10¦ ¦ ¦Перестановка 32 бит¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦ ¦двойного слова r/m¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦влево CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /0 ib¦ROL r/m32, ¦8-30¦9/10¦5/8¦ ¦Перестановка 32 бит¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦двойного слова r/m¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦влево imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D0 /1 ¦ROR r/m8,1 ¦3/4 ¦9/10¦2/7¦2/15+EA¦Перестановка 9 бит¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m вправо 1¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D2 /1 ¦ROR r/m8,CL¦8-30¦9/10¦5/8¦8+4 на ¦Перестановка 9 бит¦ ¦ ¦ ¦/9- ¦ ¦ ¦бит/(20¦байта r/m вправо CL¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C0 /1 ib¦ROR r/m8, ¦8-30¦9/10¦ ¦ ¦Перестановка 9 бит¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦байта r/m вправо¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /1 ib¦ROR r/m16,1¦3/4 ¦9/10¦2/7¦2/15+EA¦Перестановка 16 бит¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦слова r/m вправо¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /1 ¦ROR r/m16, ¦8-30¦9/10¦5/8¦8+4 на ¦Перестановка 16 бит¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦бит/(20¦слова r/m вправо CL¦ ¦ ¦ ¦31 ¦ ¦ ¦+ 4 на ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /1 ib¦ROR r/m16, ¦8-30¦9/10¦5/8¦ ¦Перестановка 16 бит¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦слова r/m вправо¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D1 /1 ¦ROR r/m32,1¦3/4 ¦9/10¦ ¦ ¦Перестановка 32 бит¦ ¦ ¦ ¦/9- ¦ ¦ ¦ ¦двойного слова r/m¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦вправо 1 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦D3 /1 ¦ROR r/m16, ¦8-30¦9/10¦ ¦ ¦Перестановка 32 бит¦ ¦ ¦ CL ¦/9- ¦ ¦ ¦ ¦двойного слова r/m¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦вправо CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦C1 /1 ib¦ROR r/m32, ¦8-30¦9/10¦5/8¦ ¦Перестановка 32 бит¦ ¦ ¦ imm8 ¦/9- ¦ ¦ ¦ ¦двойного слова r/m¦ ¦ ¦ ¦31 ¦ ¦ ¦ ¦вправо imm8 раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +--------+-----------+----+----+---+-------+--------------------+ ¦ Для каждой выполненной перестановки добавьте к указанным ¦ ¦временным значениям 1 (только для процессора 80286). ¦ L---------------------------------------------------------------- Каждая инструкция перестановки (сдвига) сдвигает биты ре- гистра или операнда в памяти. Инструкции сдвига влево сдвигают биты в направлении возрастания адресов, кроме верхнего бита, ко- торый возвращается "вниз". Инструкции сдвига вправо делают обрат- ное: биты сдвигаются в направлении уменьшения адресов, а нижний бит сдвигается "вверх". Для инструкций RCL и RCR флаг переноса является частью пере- мещаемой группы бит. Инструкция RCL сдвигает флаг переноса в младший (нижний) бит и сдвигает старший (верхний) бит во флаг пе- реноса. Инструкция RCR сдвигает флаг переноса в старший бит, а младший бит - во флаг переноса. Для инструкций ROL и ROR исходное значение флага переноса не является частью результата, но во флаг переноса заносится копия бита, который был сдвинут из конца груп- пы бит. Операция сдвига повторяется столько раз, сколько задается вторым операндом, который может представлять собой непосредствен- ное число или содержимое регистра CL. Чтобы уменьшить максималь- ное время выполнения инструкции, процессоры 80286/386 не позволя- ют использовать значения счетчика, превышающее 31. Если делается попытка использовать значение счетчика, превышающее 31, то ис- пользуются только младшие 5 бит счетчика. В процессоре 8086 счет- чики перестановки не маскируются. В процессорах 386 в виртуальном режиме 8086 выполняется маскирование счетчиком перестановки. Флаг переполнения определен только для тех форм инструкции, где второй операнд равен 1. Во всех других случаях он не опреде- лен. Для сдвигов/циклических перестановок влево выполняется опе- рация XOR над битом CF и старшим битом результата. Для сдви- гов/циклических перестановок вправо операция XOR выполняется над старшими двумя битами результата для получения флага OF.

REP Повторения последующей строковой операции.

REPE ------------------------------------------------------- REPZ O D I T S Z A P C REPZ * REPNE REPNZ ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +------T----------T-------T------T---T--T-----------------------+ ¦ ¦ ¦ 486 ¦386 ¦286¦86¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 6C ¦REP INS ¦16+ ¦13+ ¦5+ ¦ ¦Ввод (E)CX байт из пор-¦ ¦ ¦r/m8,DX ¦8(E)CX,¦6(E)CX¦4CX¦ ¦та DX в ES:[(E)DI]. ¦ ¦ ¦ ¦pm=10+ ¦pm=7+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦/30+ ¦/27+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX,¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦vm=29+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 6D ¦REP INS ¦16+ ¦13+ ¦5+ ¦ ¦Ввод (E)CX слов из пор-¦ ¦ ¦r/m16,DX ¦8(E)CX,¦6(E)CX¦4CX¦ ¦та DX в ES:[(E)DI]. ¦ ¦ ¦ ¦pm=10+ ¦pm=7+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦/30+ ¦/27+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX,¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦vm=29+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 6D ¦REP INS ¦16+ ¦13+ ¦ ¦ ¦Ввод (E)CX двойных¦ ¦ ¦r/m32,DX ¦8(E)CX,¦6(E)CX¦ ¦ ¦слов из порта DX в ES:¦ ¦ ¦ ¦pm=10+ ¦pm=7+ ¦ ¦ ¦[(E)DI]. ¦ ¦ ¦ ¦8(E)CX ¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦/30+ ¦/27+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX,¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦vm=29+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 A4 ¦REP MOVS ¦5,13, ¦5+4(E)¦5+ ¦9+¦Ввод (E)CX байт из¦ ¦ ¦m8,m8 ¦12+3(E)¦CX ¦4CX¦17¦[(E)SI] в ES:[(Е)DI]. ¦ ¦ ¦ ¦CX ¦ ¦ ¦CX¦ ¦ ¦ ¦ ¦8(E)CX ¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦/30+ ¦/27+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX,¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦vm=29+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 A5 ¦REP MOVS ¦5,13, ¦5+4(E)¦5+ ¦9+¦Перемещение (E)CX слов¦ ¦ ¦m16,m16 ¦12+3(E)¦CX ¦4CX¦17¦из [(E)CX] в ES:[(Е) ¦ ¦ ¦ ¦CX ¦ ¦ ¦CX¦DI]. ¦ ¦ ¦ ¦8(E)CX ¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦/30+ ¦/27+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX,¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦vm=29+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 A5 ¦REP MOVS ¦5,13, ¦5+4(E)¦ ¦ ¦Перемещение (E)CX¦ ¦ ¦m32,m32 ¦12+3(E)¦CX ¦ ¦ ¦двойных слов из [(E) ¦ ¦ ¦ ¦CX ¦ ¦ ¦ ¦CX] в ES:[(E)DI]. ¦ ¦ ¦ ¦8(E)CX ¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦/30+ ¦/27+ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX,¦6(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦vm=29+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦8(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 6E ¦REP OUTS ¦17+5(E)¦5+12( ¦ 5+¦ ¦Вывод (E)CX байт из¦ ¦ ¦DX,r/m8 ¦CX,pm= ¦CX,pm=¦4(E¦ ¦[E)SI] в порт DX. ¦ ¦ ¦ ¦11+5(E)¦6+5(E)¦)CX¦ ¦ ¦ ¦ ¦ ¦CX/31+ ¦CX/26+¦ ¦ ¦ ¦ ¦ ¦ ¦5(E)CX ¦5(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦/26+5 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 6F ¦REP OUTS ¦17+5(E)¦5+12( ¦ 5+¦ ¦Вывод (E)CX слов из¦ ¦ ¦DX,r/m16 ¦CX,pm= ¦CX,pm=¦4(E¦ ¦[E)SI] в порт DX. ¦ ¦ ¦ ¦11+5(E)¦6+5(E)¦)CX¦ ¦ ¦ ¦ ¦ ¦CX/31+ ¦CX/26+¦ ¦ ¦ ¦ ¦ ¦ ¦5(E)CX ¦5(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦/26+5 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 6F ¦REP OUTS ¦17+5(E)¦5+12(E¦ ¦ ¦Вывод (E)CX двойных¦ ¦ ¦DX,r/m32 ¦CX,pm= ¦CX,pm=¦ ¦ ¦слов из [E)SI] в порт¦ ¦ ¦ ¦11+5(E)¦6+5(E)¦ ¦ ¦DX. ¦ ¦ ¦ ¦CX/31+ ¦CX/26+¦ ¦ ¦ ¦ ¦ ¦ ¦5(E)CX ¦5(E)CX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦/26+5 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AC ¦REP LODS ¦5,7+ ¦ ¦ ¦ ¦Загрузка (E)CX байт из¦ ¦ ¦m8 ¦4(E)CX ¦ ¦ ¦ ¦[(E)SI] в AL. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AD ¦REP LODS ¦5,7+ ¦ ¦ ¦ ¦Загрузка (E)CX слов из¦ ¦ ¦m16 ¦4(E)CX ¦ ¦ ¦ ¦[(E)SI] в AX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AD ¦REP LODS ¦5,7+ ¦ ¦ ¦ ¦Загрузка (E)CX двойных¦ ¦ ¦m32 ¦4(E)CX ¦ ¦ ¦ ¦слов [(E)SI] в EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AA ¦REP STOS ¦5,7+ ¦7+5(E)¦9+ ¦9+¦Заполнение (E)CX байт¦ ¦ ¦m8 ¦4(E)CX ¦CX ¦10 ¦10¦ES:[(E)DI] из AL. ¦ ¦ ¦ ¦ ¦ ¦CX ¦CX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AB ¦REP STOS ¦5,7+ ¦7+5(E)¦9+ ¦9+¦Заполнение (E)CX слов¦ ¦ ¦m16 ¦4(E)CX ¦CX ¦10 ¦10¦ES:[(E)DI] из AX. ¦ ¦ ¦ ¦ ¦ ¦CX ¦CX¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AB ¦REP STOS ¦5,7+ ¦7+5(E)¦ ¦ ¦Заполнение (E)CX двой-¦ ¦ ¦m32 ¦4(E)CX ¦CX ¦ ¦ ¦ных ES:[(E)DI] из EAX. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 A6 ¦REPE CMPS ¦5,7+ ¦5+9N ¦5+ ¦5+¦Поиск несовпадающих¦ ¦ ¦m8,m8 ¦7(E)CX ¦ ¦9N ¦9N¦байт в ES:[(E)DI] и¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 A7 ¦REPE CMPS ¦5,7+ ¦5+9N ¦5+ ¦9+¦Поиск несовпадающих¦ ¦ ¦m16,m16 ¦7(E)CX ¦ ¦9N ¦22¦слов в ES:[(E)DI] и¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦[(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 A7 ¦REPE CMPS ¦5,7+ ¦5+9N ¦ ¦ ¦Поиск несовпадающих¦ ¦ ¦m32,m32 ¦7(E)CX ¦ ¦ ¦ ¦двойных слов в ES:¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)DI] и [(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AE ¦REPE SCAS ¦5,7+ ¦5+8N ¦5+ ¦9+¦Поиск отличного от AL¦ ¦ ¦m8 ¦7(E)CX ¦ ¦9N ¦15¦байта, начиная с ES:¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AF ¦REPE SCAS ¦5,7+ ¦5+8N ¦5+ ¦9+¦Поиск отличного от AX¦ ¦ ¦m16 ¦7(E)CX ¦ ¦9N ¦15¦слова, начиная с ES:¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F3 AF ¦REPE SCAS ¦5,7+ ¦5+8N ¦ ¦ ¦Поиск отличного от EAX¦ ¦ ¦m32 ¦7(E)CX ¦ ¦ ¦ ¦слова, начиная с ES:¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦[(E)DI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 A6 ¦REPNE CMPS¦5,7+ ¦5+9N ¦5+ ¦9+¦Поиск совпадающих байт¦ ¦ ¦m8,m8 ¦7(E)CX ¦ ¦9N ¦22¦в ES:[(E)DI] и¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦[(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 A7 ¦REPNE CMPS¦5,7+ ¦5+9N ¦5+ ¦9+¦Поиск совпадающих слов¦ ¦ ¦m16,m16 ¦7(E)CX ¦ ¦9N ¦15¦в ES:[(E)DI] и¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦[(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 A7 ¦REPNE CMPS¦5,7+ ¦5+9N ¦5+ ¦9+¦Поиск cовпадающих¦ ¦ ¦m16,m16 ¦7(E)CX ¦ ¦9N ¦15¦двойных слов в ES:[(E)¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦DI] и [(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 AE ¦REPNE CMPS¦5,7+ ¦5+9N ¦5+ ¦9+¦Поиск совпадающих¦ ¦ ¦m16,m16 ¦7(E)CX ¦ ¦9N ¦15¦двойных слов в ES:[(E)¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦DI] и [(E)SI]. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 AE ¦REPNE SCAS¦5,7+ ¦5+8N ¦5+ ¦9+¦Поиск AL. ¦ ¦ ¦m8 ¦7(E)CX ¦ ¦9N ¦15¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 AF ¦REPNE SCAS¦5,7+ ¦5+8N ¦5+ ¦9+¦Поиск AX. ¦ ¦ ¦m8 ¦7(E)CX ¦ ¦9N ¦15¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦N ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦F2 AF ¦REPNE SCAS¦5,7+ ¦5+8N ¦ ¦ ¦Поиск EAX. ¦ ¦ ¦m32 ¦7(E)CX ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +------+----------+-------+------+---+--+-----------------------+ ¦ 4,3,6,9,10,22 - если CPL <= IOPL ¦ ¦ 5CX,6CX - если CPL > IOPL. ¦ ¦ 5 - если (E)CX = 0. ¦ ¦ 13 - если (E)CX = 1. ¦ ¦ CX - если (E)CX 1. ¦ ¦ 7(E)CX - если (E)CX 0. ¦ L---------------------------------------------------------------- REP, REPE (повторять, пока равно) и REPNE (повторять, пока не равно) - это префиксы, которые применяются к строковым опера- циям. Каждый префикс вызывает повторение выполнения выполнения последующей строковой инструкции столько раз, сколько задается в регистре-счетчике, или до (не)выполнения определенного условия во флаге нуля (REPE, REPNE). Синонимами инструкции REPE и REPNE являются соответственно инструкции REPZ и REPNZ. Префикс REP применяется только к одной строковой инструкции. Для повторения блока инструкций используйте инструкцию LOOP или другую конструкцию цикла. На каждой итерации выполняется следующее действие: 1. Если атрибут размера адреса операнда равен 16 битам, в качестве счетчика используется регистр CX. Если атрибут размера адреса равен 32, то в качестве счетчика использу- ется регистр ECX. 2. Проверяется значение регистра CX. Если он равен нулю, то выполняется выход из итерации и переход к следующей инс- трукции. 3. Запрашиваются все отложенные прерывания. 4. Один раз выполняется строковая операция. 5. Значение регистра CX или ECX уменьшается на 1. Флаги при этом не модифицируются. 6. Если строковой операцией является операция SCAC или CMPS, то проверяется содержимое флага нуля. Если условие повто- рения не удовлетворяется, то выполняется выход из итера- ции и перемещение к следующей инструкции. Выход из итера- ции выполняется, если префиксом является REPE, и флаг ZF равен 0 (последнее сравнение не дало равенства), или пре- фиксом является REPNE и флаг ZF равен 1 (последнее срав- нение дало равенство). 7. Возврат на шаг 1 для каждой итерации. Выйти из повторяющихся инструкций CMPS и SCAS можно, если счетчик исчерпан или условие повторения не удовлетворяется в со- ответствии с флагом нуля. Эти два случая можно разделить, либо используя инструкцию JCXZ, либо инструкцию условного перехода, при которой проверяется флаг нуля (JZ, JNZ и JNE).

RET Возврат из процедуры.

------------------------------------------------------- O D I T S Z A P C ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T---------T------T------T-----T--T-------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦C3 ¦RET ¦5 ¦10+m ¦11 ¦16¦Ближний возврат в¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦вызывающую програм-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦му. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦CB ¦RET ¦13,pm=¦18+m, ¦15, ¦16¦Дальний возврат в¦ ¦ ¦ ¦18 ¦pm=32+¦pm=25¦ ¦вызывающую програм-¦ ¦ ¦ ¦ ¦m ¦ ¦ ¦му с теми же приви-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦легиями. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦CB ¦RET ¦13,pm=¦pm=68 ¦55 ¦ ¦Дальний возврат. ¦ ¦ ¦ ¦33 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦C2 iw ¦RET imm16¦5 ¦10+m ¦11 ¦20¦Ближний возврат. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦CA iw ¦RET imm16¦14, ¦18+m, ¦15, ¦25¦Дальний возврат и¦ ¦ ¦ ¦pm=17 ¦pm=32+¦pm=25¦ ¦извлечение 16 байт.¦ ¦ ¦ ¦ ¦m ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦CA iw ¦RET imm16¦14, ¦pm=68 ¦55 ¦ ¦Дальний возврат. ¦ ¦ ¦ ¦pm=33 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L----------+---------+------+------+-----+--+-------------------- Инструкция RET передает управление по адресу возврата, кото- рый находится в стеке. Адрес обычно помещается в стек инструкцией CALL, а возврат выполняется на инструкцию, следующую за CALL. Необязательный числовой параметр инструкции CALL задает чис- ло байт (атрибут равен 16) или слов (атрибут равен 32) в стеке, которые должны освобождаться после извлечения адреса возврата. Эти элементы используются обычно, как входные параметры вызывае- мой процедуры. Для возврата ближнего типа (внутрисегментного) адрес в стеке представляет собой смещение в сегменте, которое извлекается из стека в указатель инструкций. Регистр CS не изменяется. При меж- сегментном (дальнем) возврате адрес в стеке представляет собой указатель дальнего типа. Сначала извлекается смещение, за ним - селектор. В реальном режиме регистры CS и IP загружаются непосредс- твенно. В защищенном режиме межсегментный возврат вызывает про- верку процессором дескриптора, адресуемого селектором возврата. Байт AR дескриптора должен указывать на сегмент кода с равными или меньшими привилегиями (или большим либо равным числовым зна- чением), чем текущий уровень привилегий. Возврат к более низкому уровню привилегий вызывает перезагрузку стека из значения, сохра- ненного перед блоком параметров. В процессе межуровневой передачи сегментные регистры DS, ES, FS и GS могут устанавливаться инструкцией RET в нулевое значение. Если эти регистры ссылаются на сегмент, который не может исполь- зоваться на новом уровне привилегий, то, чтобы предотвратить неу- полномоченный доступ из нового уровня привилегий, они устанавли- ваются в значение 0.

SAHF Запись регистра AH в регистр флагов.

------------------------------------------------------- O D I T S Z A P C * * * * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +----------T---------T------T------T-----T--T-------------------+ ¦ ¦ ¦486 ¦386 ¦286 ¦86¦ ¦ +----------+---------+------+------+-----+--+-------------------+ ¦9E ¦SAHF ¦2 ¦3 ¦2 ¦4 ¦Запись AH во флаги¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦SF ZF xx AF xx PF¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦xx CF. ¦ L----------+---------+------+------+-----+--+-------------------- Инструкция SAHF загружает в перечисленные выше флаги значения из регистра AH (биты 7, 6, 4, 2 и 0 соответственно).

SAL Инструкции сдвига.

SAR ------------------------------------------------------- SHL O D I T S Z A P C SHR * * * ? * * ----------------------------------------------------------------¬ ¦Код операции Инструкция Такты Описание ¦ +-------T----------T---T---T---T--------T-----------------------+ ¦ ¦ ¦486¦386¦286¦86 ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D0 /4 ¦SAL r/m8,1¦3/4¦3/7¦2/7¦2/15+EA ¦Умножает байт r/m на 2.¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D2 /4 ¦SAL r/m8, ¦3/4¦3/7¦5/8¦8+4 на ¦Умножает байт r/m на 2¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C0 /4 ¦SAL r/m8, ¦2/4¦3/7¦5/8¦ ¦Умножает байт r/m на 2.¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /4 ¦SAL r/m16,¦3/4¦3/7¦2/7¦2/15+EA ¦Умножает слово r/m на¦ ¦ ¦ 1 ¦ ¦ ¦ ¦ ¦2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /4 ¦SAL r/m16,¦3/4¦3/7¦5/8¦8+4 на ¦Умножает слово r/m на 2¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /4 ¦SAL r/m16,¦2/4¦3/7¦5/8¦ ¦Умножает слово r/m на¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /4 ¦SAL r/m32,¦3/4¦3/7¦ ¦ ¦Умножает двойное слово¦ ¦ ¦ 1 ¦ ¦ ¦ ¦ ¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /4 ¦SAL r/m32,¦3/4¦3/7¦ ¦ ¦Умножает двойное слово¦ ¦ ¦ CL ¦ ¦ ¦ ¦ ¦r/m на 2 CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /4 ¦SAL r/m32,¦2/4¦3/7¦ ¦ ¦Умножает двойное слово¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D0 /7 ¦SAR r/m8,1¦3/4¦3/7¦2/7¦2/15+EA ¦Деление со знаком байта¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D2 /7 ¦SAR r/m8, ¦3/4¦3/7¦2/7¦8+4 на ¦Деление со знаком байта¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C0 /7 ¦SAR r/m8, ¦2/4¦3/7¦5/8¦ ¦Деление со знаком байта¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /7 ¦SAR r/m16,¦2/4¦3/7¦5/8¦2/15+EA ¦Деление со знаком слова¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /7 ¦SAR r/m16,¦3/4¦3/7¦5/8¦8+4 на ¦Деление со знаком слова¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /7 ¦SAR r/m16,¦2/4¦3/7¦5/8¦ ¦Деление со знаком слова¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /7 ¦SAR r/m32,¦3/4¦3/7¦ ¦ ¦Деление со знаком двой-¦ ¦ ¦ 1 ¦ ¦ ¦ ¦ ¦ного слова r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /7 ¦SAR r/m32,¦3/4¦3/7¦ ¦ ¦Деление со знаком двой-¦ ¦ ¦ CL ¦ ¦ ¦ ¦ ¦ного слова r/m на 2 CL¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /7 ¦SAR r/m32,¦2/4¦3/7¦ ¦ ¦Деление со знаком двой-¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦ного слова r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D0 /4 ¦SHL r/m8,1¦3/4¦3/7¦2/7¦2/15+EA ¦Умножение байта r/m на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦два. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D2 /4 ¦SHL r/m8, ¦3/4¦3/7¦5/8¦8+4 на ¦Умножение байта r/m на¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦два CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит+EA) ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C0 /4 ¦SHL r/m8, ¦2/4¦3/7¦5/8¦ ¦Умножение байта r/m на¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦два. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /4 ¦SHL r/m16,¦2/4¦3/7¦2/7¦2/15+EA ¦Умножение слова r/m на¦ ¦ ¦ 1 ¦ ¦ ¦ ¦ ¦два CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /4 ¦SHL r/m16,¦3/4¦3/7¦5/8¦8+4 на ¦Умножение слова r/m на¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦два CL раз. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /4 ¦SHL r/m16,¦2/4¦3/7¦5/8¦ ¦Умножение слова r/m на¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦два. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /4 ¦SHL r/m32,¦2/4¦3/7¦ ¦ ¦Умножение двойного сло-¦ ¦ ib ¦ 1 ¦ ¦ ¦ ¦ ¦ва r/m на два. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /4 ¦SHL r/m32,¦2/4¦3/7¦ ¦ ¦Умножение двойного сло-¦ ¦ ib ¦ CL ¦ ¦ ¦ ¦ ¦ва r/m на два. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /4 ¦SHL r/m32,¦2/4¦3/7¦5/8¦ ¦Умножение двойного сло-¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦ва r/m на два. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D0 /5 ¦SHR r/m8,1¦3/4¦3/7¦2/7¦2/15+EA ¦Беззнаковое деление¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦байта r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D2 /5 ¦SHR r/m8, ¦3/4¦3/7¦2/7¦8+4 на ¦Беззнаковое деление¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦байта r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C0 /5 ¦SHR r/m8, ¦2/4¦3/7¦5/8¦ ¦Беззнаковое деление¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦байта r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /5 ¦SHR r/m16,¦2/4¦3/7¦5/8¦2/15+EA ¦Беззнаковое деление¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦слова r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /5 ¦SHR r/m16,¦3/4¦3/7¦5/8¦8+4 на ¦Беззнаковое деление¦ ¦ ¦ CL ¦ ¦ ¦ ¦бит/(20+¦слова r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦4 на ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦бит)+EA ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /5 ¦SHR r/m16,¦2/4¦3/7¦5/8¦ ¦Беззнаковое деление¦ ¦ ib ¦ imm8 ¦ ¦ ¦ ¦ ¦слова r/m на 2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D1 /5 ¦SHR r/m32,¦3/4¦3/7¦ ¦ ¦Беззнаковое деление¦ ¦ ¦ 1 ¦ ¦ ¦ ¦ ¦двойного слова r/m на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦D3 /5 ¦SHR r/m32,¦3/4¦3/7¦ ¦ ¦Беззнаковое деление¦ ¦ ¦ CL ¦ ¦ ¦ ¦ ¦двойного слова r/m на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦2. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------+----------+---+---+---+--------+-----------------------+ ¦C1 /5 ¦SHR r/m32,¦2/4¦3/7¦ ¦ ¦Беззнаковое деление¦ ¦ ¦ imm8 ¦ ¦ ¦ ¦ ¦двойного слова r/m на¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦2. ¦ L-------+----------+---+---+---+--------+------------------------ Инструкция SAL (или ее синоним, инструкция SHL) сдвигает би- ты операнда "вверх". Старший бит сдвигается во флаг переноса, а младший бит устанавливается в нулевое значение. Сдвиг повторяется число раз, указанное вторым операндом, ко- торый представляет собой непосредственное значение или содержимое регистра CL. Чтобы уменьшить максимальное время выполнения, про- цессоры 80286/286 не позволяют сдвигать операнды более, чем на 31. При попытке использовать значение счетчика, превышающее 31, используются только младшие пять бит счетчика сдвига. (Процессор 8086 использует все 8 бит счетчика сдвига.) Флаг переполнения устанавливается только при использовании форм инструкций с единичным значением счетчика. При сдвиге влево OF устанавливается в 0, если старший бит результата тот же, что и результат флага переноса (то есть старшие два бита исходного опе- ранда совпадали). Если они различны, OF устанавливается в 1. В инструкции SAR флаг OF устанавливается в 0 для всех сдвигов на 1. В инструкции SHR OF устанавливается в значение старшего бита ис- ходного операнда.
                              Назад | Содержание | Вперед