Привет. В интеловском мануале написано "the xchg instruction always assert the lock# signal regardless of the presence or absence of the lock prefix". Английский у меня не оч. хороший, но я как понял xchg всегда допускает lock префикс. Пробовал (lock xchg eax,ebx) - вылетает неправильная инструкция. Я мож не так понял?
Использование префикса 'lock' разрешено только в некоторых командах и при условии, что один из операндов -- ячейка памяти. В случае xchg шина блокируется независимо от наличия/отсутствия префикса, но опять же, если один из операндов -- ячейка памяти. Раньше правила пользования префиксом были более свободны (не помню, можно ли было указывать в командах работающих только с регистрами, но все команды позволяли использовать префикс), но начиная с 486 правила пользования lock были ужесточены.
все. понял. Просто у интела написано как-то не совсем понятно. Я знаю что lock работает только с некоторыми командами (в мануале написано с какими) и только если приемник - память (если ячейкой памяти является источник - то #UD), но подумал что типа на xchg это не распространяется. интересно. т.е. на 386 команды типа lock inc eax работают. не знал, думал на всех x86 будет #UD.