lock xchg

Тема в разделе "WASM.RESEARCH", создана пользователем Ra!N, 12 авг 2008.

  1. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    Привет.

    В интеловском мануале написано "the xchg instruction always assert the lock# signal regardless of the presence or absence of the lock prefix". Английский у меня не оч. хороший, но я как понял xchg всегда допускает lock префикс. Пробовал (lock xchg eax,ebx) - вылетает неправильная инструкция. Я мож не так понял?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Использование префикса 'lock' разрешено только в некоторых командах и при условии, что один из операндов -- ячейка памяти. В случае xchg шина блокируется независимо от наличия/отсутствия префикса, но опять же, если один из операндов -- ячейка памяти.

    Раньше правила пользования префиксом были более свободны (не помню, можно ли было указывать в командах работающих только с регистрами, но все команды позволяли использовать префикс), но начиная с 486 правила пользования lock были ужесточены.
     
  3. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    все. понял. Просто у интела написано как-то не совсем понятно. Я знаю что lock работает только с некоторыми командами (в мануале написано с какими) и только если приемник - память (если ячейкой памяти является источник - то #UD), но подумал что типа на xchg это не распространяется.

    интересно. т.е. на 386 команды типа lock inc eax работают. не знал, думал на всех x86 будет #UD.