Я не совсем понимаю: если префекс rep стоит перед какой-нибудь не строковой коммандой, то он не несёт никакой смысловой нагрузки? то есть работает как nop... тоже самое и с остальными префиксами. скажем сегментными. если сегментный префикс стоит перед каким-нибудь push eax или inc edi. Почему тогда Intel так неоптимально расходеут опкоды?
Почему то же самое? Префикс замены сегментного регистра переопределяет сегментный регистр, принятый для использования регистром/командой по-умолчанию. Просто в Win/*nix используется плоская модель памяти, поэтому замена сегментных регистров не так актуальна. Но актуально, например, для регистра fs в Win. Но если вспомнить DOS, например, или взять неплоскую модель памяти, то замена сегментных регистров будет иметь намного больший эффект.
Тип адресации, как я понимаю, касается операций с памятью. если стоит что-то типа: 2E:8BD0 | mov edx,eax то как тогда может повлиять префикс 2E на результат комманды mov edx,eax? тут ведь нет обращения к памяти. Или, скажем, тот-же самый 36:50 | push eax Я понимаю суть префикса, когда идёт, скажем mov [edx],eax. но не понимаю какую смысловую нагрузку он несёт в случаях, когда процессор не обращается к памяти... Подобная ситуация с прехексами repX. если rep прехикс идёт не перед строковой коммандой, то какой от него толк? F3:50 | push eax В данном вопросе я просто хочу услышать - несут ли прехиксы в таких ситуациях какую-нибудь смысловую нагрузку?
Quark IA-32 Instruction Set Reference Use of the repeat prefixes with other IA-32 instructions is reserved and may cause unpredictable behavior. Some of the SSE and SSE2 instructions have three-byte opcodes. For these three-byte opcodes, the third opcode byte may be F2H, F3H, or 66H. For example, the SSE2 instruction CVTDQ2PD has the three-byte opcode F3 OF E6
leo угу, тоже хотел написать, то что для SSE/SSE2 комманд префикс строковый очень важен, и команда может по разному декодироватся.
"rep nop" - интересная инструкция. "pause" тоже В сорцах wrk можно найти как реализацию YIELD макроса и KeYieldProcessor ф-ии.
HoBleen Согласно учению Intel: Согласно учению AMD: Ну и сингле-степ, брейкпойнт, но это уже не к инструкции, собссна...
Да, но это не всё) Нет, только команда 90h, без префиксов! EIP указывает на память, начинающуюся с 90h, если так понятней) Не пойдёт, это уже изменение содержимого памяти...
Ну дык тогда никакие. Может быть PAGE FAULT если EIP указывает на неприсутствующую страницу в которую будет подгружен nop. Но если то IMHO никакого не будет. Или какой ответ? Чего-то прикол не ясен
Ну это уже несколько неточно... Откуда известно значение ячейки памяти, на которое БУДЕТ указывать eip после обработки исключения? Вопрос более точный - по eip стоит nop (реальный линейный адрес команды вычислим). Ага, #GP, а еще? =) Ниче особо хитрого, просто вопросик по работе х86 процессора =))
Ну, если не ошибаюсь, на старых процах запоздалое исключение x87, если не использовалась fwait при определенных условиях... а отсюда при каких-то условиях может и #DF...