<<
>>

PREFETCHTO/PREFETCHT1/PREFETCHT2/PREFETCHNTA •

PREFETCHTO источник PREFETCHT1 источник РRЕFЕТСНТ2 источник PREFETCHNTA источник • OF,18,/1 PREFETCHTO m8 OF,18,/2 PREFETCHT1 Ш8 OF, 18/3 РRЕFЕТСНТ2 Ш8 OF,18,/0 PREFETCHNTA m8 • Предварительная запись в кэш-память данных из оперативной памяти.
Действие: команда проверяет, есть ли строка байтов в кэш-памяти — если есть, то никаких перемещений не производится. Если данных в кэш-памяти нет, то производится перемещение их в кэш-память того уровня, который определяется конкретной командой: Ш PREFETCHTO — загрузка строки в кэш-память всех уровней; ⅞ PREFETCHT1 — загрузка строки в кэш-память всех уровней, за исключением уровня 0; ⅝ PREFETCHT2 — загрузка строки в кэш-память всех уровней, за исключением уровней 0 и 1; ⅞ PREFETCHNTA — загрузка строки в кэш уровня 1. Количество записываемых байтов зависит от конкретного процессора, но минимальное ко- личество составляет 32 байта. PUSH • PUSH источник • FF/б РUSНr/mlб FF/б PUSH r/mЗ2 50 + rw PUSH rlб 50 + rd PUSH rЗ2 6А PUSH imm8 .
68 PUSH immlб/immЗ2 OE PUSH CS . 16 PUSH SS IE PUSH DS Об PUSH ЕS OF АО PUSH FS OF А8 PUSH GS • Размещение операнда в стеке. Действие: команда уменьшает значение регистра-указателя стека SP/ESP на 2(4) и затем за- писывает значение источника в вершину стека. PUSHA/PUSHAD • PUSHA/PUSHAD • 60 • Записьвсех регистров общего назначения в стек. Действие: команда уменьшает значение указателя стека ESP/SP на 16(32) (в зависимости от значения атрибута размера адреса — usеl6 или usеЗ2), после чего размещает в стеке регистры общего назначения в следующей последовательности: АХ/ЕАХ, СХ/ЕСХ, DX/EDX, ВХ/ЕВХ, SP/ESP, BP/ EBP, SI/ESI, DI/EDI (содержимое DI/EDI будет на вершине стека). В стек помещается содержимое SP/ESP, которое было до выполнения команды. PUSHF/PUSHFD • PUSHF/PUSHFD • 9С •Размещение регистра флагов встеке.
Действие: команда уменьшает значение указателя стека SP/ESP на 2(4), после чего помещает в вершину стека содержимое регистра FLAGS/EFLAGS. При этом флаги VM и RF (биты 16 и 17) не копируются, вместо этого значения для этих флагов в образе EFLAGS, сохраненном на стеке, уста- навливаются равными нулю. RCL/RCR RCL/RCRоперанд, количество_сдвигов RСLr/m8,l RСL r/m8,СL RСL r/m8,imrтi8 RСL r/mlб,l RСL r/mlб,СL RCL r/mlб,imm8 RСL r/тЗ2,l RСL r/тЗ2,СL RCL r/тЗ2,iтт8 RCRr/m8,l RCR r/m8,CL RCR r/m8,imm8 D1 /3 RСR r/mlб,l DЗ /3 RСR r/mlб,СL С1 /3 ib RСR r/mlб,imm8 D1 /3 RСR r/mЗ2Д DЗ/З RСR r/mЗ2,СL Сl /3 ib RСR r/mЗ2,imm8 • Циклический сдвиг операнда влево (вправо) через флагпереноса CF. Действие: каждый раз при циклическом сдвиге разрядов операнда влево (вправо) старший (младший) его бит становится значением флага переноса CF. Старое содержимое CF вдвигается в операнд справа (слева) и становится значением его младшего (старшего) бита. Флаги: CF = г 0F = ?r Флаг OF представляет интерес, если сдвиг осуществляется на один разряд. При сдвиге на не- сколько разрядов его значение не определено (поэтому обозначен ?r). По значению флага OF можно судить о факте изменения знакового (старшего) разряда операнда: ® OF - 1, если после операции сдвига значения флага CF и старшего бита операнда различны; • OF = 0, если после операции сдвига влево значения флага CF и старшего бита операнда совпа- дают. RDMSR • RDMSR • 0F 32 • Чтение из регистра МSR. Действие: команда проверяет то, что уровень привилегий нулевой и что в регистре ЕСХ нахо- дится значение, адресующее один из регистров MSR. Если хотя бы одно из этих условий не вы- полняется, то выполнение команды заканчивается. Если выполняются оба условия, то значение регистра, адресуемого содержимым регистра ЕСХ, помещается в пару 32-разрядных регистров EDX:EAX. RDPMC • RDPMC • 0F 33 • Чтение счетчиков производительности процессора. Действие: команда проверяет то, что регистр ЕСХ содержит 0 или 1 и бит CR4.PCE = 1 и что бит CR4.PCE = 0 и CPL = 0.
Если одно из этих условий выполнено, то содержимое счетчика, идентифи- цированного содержимым регистра ЕСХ (0 или 1), пересылается в пару регистров EDX:EAX и вы- полнение команды заканчивается. Если ни одно из этих условий не выполнено, то выполнение команды заканчивается с возбуждением исключения общей защиты. RDTSC • RDTSC , • 0F 31 • Чтение 64-разрядного счетчика меток реального времени (Time Stamp Counter, TSC). Действие: команда проверяет состояние второго бита регистра CR4.TSD (Time Stamp Disable — отключить счетчик меток реального времени): IS если CR4.TSD - 0, то выполнение команды RDTSC разрешается на любом уровне привилегий; Ш если CR4.TSD = 1, то выполнение команды RDTSC разрешается только на нулевом уровне приви- легий. Если выполнение команды разрешено на текущем уровне привилегий, то значение 64-раз- рядного MSR-счетчика TSC сохраняется в паре 32-разрядных регистров EDX:EAX. Если выполне- ние команды на текущем уровне привилегий запрещено, работа заканчивается. REP/REPE/REPZ/REPNE/REPNZ • REP/REPE/REPZ/REPNE/REPNZ • RЕР/RЕРЕ/RЕРZ — fЗ RЕРNЕ/RЕРNZ — f2 • Повторение цепочечной операции. Действие: команды REP/REPE/REPZ/REPNE/REPNZ вызывают повторение цепочечной команды столько раз, сколько указано в регистре ЕСХ, или до тех пор, пока не выполнится обозначенное флагом ZF условие. Префикс RЕР может быть добавлен к командам INS, OUTS, МОVS, LОDS и SТОS. Префиксы REPE, RЕРNЕ, RЕРZ и RЕРNZ могут быть добавлены к командам СМРS и SСАS. Префиксы REPZ и REPNZ — синонимы префиксов REPE и REPNE. Поведение префикса REP не определено при его использовании с командами, отличными от цепочечных. В табл. П. 12 приведены условия завершения повторения цепочечных команд при использо- вании с ними определенных префиксов.
Таблица П. 12. Условия завершения повторения цепочечных команд

Выяснить, какое именно условие привело к завершению выполнения цепочечной команды, можно, анализируя значение в регистре ЕСХ (командой J ЕСХZ) или проверяя флаг ZF (командой 32, JNZилиJNЕ).

Флаги: не изменяются (за исключением случая использования префиксов с командами СМРS и SCAS, которые устанавливают флаги в регистре EFLAGS). RET • RET RET число • СЗ (ret — близкий возврат в вызывающую процедуру); СВ (ret — дальний возврат в вызывающую процедуру); С2 ilб (ret ilб — близкий возврат с выталкиванием ilб байт из стека); САilб (ret 116 — дальний возврат с выталкиванием il6 байт из стека) • Ближний (дальний) возврат из процедуры. Действие: передача управления по адресу, расположенному на вершине стека. Этот адрес обычно помещается в стек командой CALL, его значение соответствует команде, следующей за командой CALL. Необязательный операнд число определяет количество байтов стека, которые бу- дут вытолкнуты после выталкивания адреса возврата. Команда RET используется для выполне- ния трех вариантов возврата управления. ⅜ Близкий возврат — возврат управления вызывающей процедуре в пределах текущего сегмен- та кода (внутрисегментный возврат). При этом из вершины стека выталкивается значение в регистр EIP. Регистр CS не изменяется. Процессор продолжает выполнение кода в том же сегменте, но по другому смещению. Дальний возврат — возврат управления вызывающей процедуре, расположенной в отличном от текущего сегменте кода (межсегментный возврат). При этом из вершины стека последова- тельно выталкиваются значения в регистры EIP и CS. Процессор продолжает выполнение кода в другом сегменте. Я Дальний возврат между уровнями привилегий — дальний возврат управления коду на уров- не привилегий, отличном от текущего. Этот вид возврата может быть выполнен только в за- щищенном режиме. Его механизм подобен механизму дальнего возврата за исключением того, что процессор следит за уровнями привилегий и правами доступа к сегментам кода и стека, которым возвращается управление для определения возможности подобной передачи. Ко- манда RET очищает регистры DS, ES, FS и GS, если они ссылаются на соответствующие сегмен- ты, недоступные иа новом уровне привилегий. Так как при межуровневом возврате управ- ления производится переключение стека, то команда RET также производит загрузку этих регистров из стека.
Если в вызываемую процедуру передавались параметры, то при возврате в команде RET необходимо указать параметр число для их удаления. ROL/ROR • ROL/ROR операнд, количество_сдвиrов • DO /О RОL r/m8,l D2/0 RОL r/m8,СL C0/0ib RОLr/m8,imm8 ■ Dl/0 RОL r/mlб,l DЗ/0 RОL r/ml6,СL С1 /0 ib RОL r/шlб,imm8 D1 /0 ROL r/m32,l DЗ/0 RОL r/mЗ2,СL Сl /0 ib RОL r/mЗ2,imm8 DO /1 RОRr/m8,l D2 /1 RОR r/m8,СL СО/lib RОR r/m8,imm8 D1 /1 RОR r/mlб,l DЗ/1 RОR r/тlб,СL Сl/lib RОR r/тlб,iтт8 D1 /1 RОR r/тЗ2,l DЗ/1 RОR r/mЗ2,СL Сl/lib RОR r/тЗ2,iтт8 • Циклический сдвиг операнда влево (вправо). Действие: каждый раз при циклическом сдвиге разрядов операнда влево (вправо) его стар- ший выдвигаемый бит вдвигается в операнд справа (слева) и становится одновременно значени- ем младшего (старшего) бита операнда и флага переноса CF. Флаги: СF= г ОF= ?rSF= rZF = г РF= г АF = ? Флаг OF представляет интерес, если сдвиг осуществляется на один разряд. При сдвиге на не- сколько разрядов его значение не определено (поэтому обозначен ?r) Ло значению флага OF можно судить о факте изменения знакового (старшего) разряда операнда: ⅞ OF = 1, если после операции сдвига значения флага CF и старшего бита операнда различны; iS OF = 0, если после операции сдвига значения флага CF и старшего бита операнда совпадают. RSM • RSM • OF АА • Возврат процессора из S-режима с восстановлением контекста. Действие: команда проверяет контекст прерванной программы на предмет выполнения сле- дующих условий: • в регистре CRO недопустимаякомбинация значений битов; Ss установлен любой из зарезервированных битов в регистре СR4; начало области памяти, с которой работает процессор в S-режиме, не выровнено на границу, кратную 32 Кбайт. Если хотя бы одно из условий выполняется, процессор переходит в состояние ожидания. Если ни одно из условий не выполняется, происходит возврат из S-режима и восстановление контекста из определенной области памяти. Данная операция напоминает восстановление контекста при пе- реключении из вложенной задачи.
Флаги: изменяются в соответствии с содержимым регистра EFLAGS восстанавливаемого кон- текста. SAHF • SAHF ■ ' • 9Е • Загрузка регистра флагов EFLAGS/FLAGS изрсгистра АН. Действие: команда загружает значение из младшего байта регистра АН в регистр EFLAGS/FLAGS. При этом флаги SF, ZF, AF, PF и CF инициализируются битами 7, 6, 4, 2, и 0 регистра АН. Биты 1,3 и 5 регистров EFLAGS/FLAGS не изменяются, то есть остаются равными значениям 1, 0 и 0 соответ- ственно. Флаги: SF = r ZF = r AF = r PF = r ОF = r SAL/SAR • SAL/SAR операнд, количество_сдвигов • DO /4 SAL r/m8,l D2/4 SАL r/m8,СL СО /4 ib SАL r/m8,imrп8 Dl /4 SАL r/шlб,l DЗ/4 SАL r/mlб,СL ■ С1 /4 ib SАL r/mlб,imm8 Dl/4 SАL r/mЗ2,l DЗ/4 SАL r/mЗ2,СL Сl /4 ib SАL r/mЗ2,imm8 DO /7 SAR r/m8,l D2/7 SAR r/m8,СL СО/7ib SAR r/m8,imm8 01 /7 SAR r/шlб,l DЗ /7 SAR r/mlб,СL Сl /7 і'b SAR r/тlб,iшт8 Dl /7 SAR r/mЗ2,l DЗ/7 SAR r/mЗ2,СL Сl/7ib SAR r/тЗ2,iтш8 • Арифметический сдвиг операнда влево (вправо). Действие: сдвиг всех битов операнда операнд влево (вправо) на количество разрядов, указан- ных операндом количество_сдвигов, при этом выдвигаемый слева (справа) бит становится значе- нием флага переноса CF. Одновременно для команды SAL справа в операнд вдвигается нулевой бит. Для команды SAR по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда. Флаги: СF = rОF = ?rSF= г ZF = г PF= г AF = ? Флаг OF представляет интерес только для команды SAL в случае, если сдвиг осуществляется на один разряд. При сдвиге на несколько разрядов его значение те определено (поэтому обозна- чен ?r). По значению флага OF можно судить о факте изменения знакового (старшего) разряда операнда: ⅞ если OF = 1, то текущее значение флага CF и значения выдвигаемого слева бита операнда раз- личны; ⅜ если OF = 0, то текущее значение флага CF и значения выдвигаемого слева бита операнда со- впадают. В отличие от других команд сдвига, команда SAR всегда сбрасывает в ноль флаг OF в операци- ях сдвига на один разряд. SBB • SBB операнд_1, операнд_2 • 1C ib SBB АL,imm8 lDiw SВВАХ,imml6 ID id SВВЕАХ,immЗ2 80/Зib SBB r/m8,imm8 81/Зiw SBB r/тl6,iттl6 ' 81 /3 id SBB r/тЗ2,iттЗ2 83 /3 ib SBB r/тlб,iтт8 83 /3 ib SBB r/тЗ2,iтт8 18 /г SВВr/т8,r8 19 /r SBB r/тlб,rlб - 19 /г SBB r/тЗ2,rЗ2 IA/r SВВr8,r/т8 IB/r SBB rlб,r/тlб 1В/г SBB rЗ2,r/тЗ2 • Вычитание сзаемом. Действие: операнд_l = операнд_1 - (операнд_2 + CF). Состояние флага CF представляет собой заем от предыдущего вычитания. Команда SBB пе различает знаков операндов. Вместо этого про- цессор устанавливает флаги OF и CF, чтобы идентифицировать фактзаема для знакового и беззна- кового операндов. Флаг SF отражает знак результата (состояние его старшего бита). Флаги: CF = r OF = r SF = r ZF = r PF = r AF = r
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме PREFETCHTO/PREFETCHT1/PREFETCHT2/PREFETCHNTA •:

  1. Л.О. Доліненко, В.О. Доліненко, С.О. Сарновська. Цивільне право України, 2006
  2. ЦИВІЛЬНЕ ПРАВО УКРАЇНИ
  3. ПЕРЕДМОВА
  4. Частина І ПРОГРАМА КУРСУ «ЦИВІЛЬНЕ ПРАВО УКРАЇНИ»
  5. Розділ І. Загальні положення цивільного права
  6. Тема 1. Поняття цивільного права. Предмет та метод, система цивільного права. Функції та принципи цивільного права
  7. Тема 2. Цивільне законодавство України
  8. Тема 3. Поняття, елементи та види цивільних правовідносин
  9. Тема 4. Здійснення цивільних прав і виконання обов’язків
  10. Тема 5. Захист цивільних прав та інтересів
  11. Тема 6. Об’єкти цивільних прав
  12. Тема 7.ФІЗИЧНІ особи як суб’єкти цивільного права
  13. Тема 8. Юридичні особи
  14. Тема 9. Держава як суб’єкт цивільного права. Територіальні громади та Автономна Республіка Крим як суб’єкти цивільного права
  15. Тема 10. Правочини: поняття, види. Умови чинності правочину
  16. Тема 11. Представництво і довіреність
  17. Тема П.Строки. Позовна давність
  18. Нормативний матеріал:
  19. Література
  20. Розділ ІІ Особисті немайнові права фізичних осіб