Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
LOCK
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
F0 |
LOCK |
Выдавать сигнал блокировки шины LOCK# во время выполнения следующей за префиксом команды |
8086 |
lock |
Описание:
Префикс выдачи сигнала LOCK# (префикс блокировки шины) заставляет процессор установить сигнал LOCK# во время выполнения следующей за ним команды. В многопроцессорной среде этот сигнал может быть использован для гарантии того, что процессор имеет исключительный доступ к любой памяти с распределенным доступом, пока установлен сигнал LOCK#.
Префикс LOCK функционирует только со следующими командами (причем только с теми их формами которые используют операнды в памяти): ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD и XCHG. В процессорах, начиная с Intel386, при попытке использования префикса с любой другой командой генерируется особая ситуация #UD.
Команда XCHG всегда производит блокировку шины, независимо от наличия префикса LOCK.
Последовательность чтение-модификация-запись с префиксом LOCK обычно используется для осуществления операции "проверить и установить" по команде BTS.
Целостность префикса LOCK не подвергается воздействию выравниванием полей памяти. Блокировка памяти отслеживается для произвольных невыровненных полей.
Начиная с процессора Pentium Pro, при доступе к памяти с применением префикса LOCK внешний сигнал LOCK# как правило не выставляется, поскольку все обращения обрабатываются чепез внутреннюю КЭШ-память. При этом происходит внутренняя блокировка КЭШ, а за соответствием содержимого КЭШ внешней памяти следит специальный механизм управления КЭШ.
Особые ситуации защищенного режима:
#UD, если префикс LOCK используется с командой не из списка, приведенного выше, другие особые ситуации могут генерироваться последующей (блокированной) командой.
Особые ситуации режима реальной адресации:
#UD, если префикс LOCK используется с командой не из списка, приведенного выше, другие особые ситуации могут генерироваться последующей (блокированной) командой.
Особые ситуации режима V86:
#UD, если префикс LOCK используется с командой не из списка, приведенного выше, другие особые ситуации могут генерироваться последующей (блокированной) командой.
Замечание:
Автоматическая блокировка шины происходит не только при применении префикса LOCK. Существует достаточно широкий диапазон ситуаций, когда процессор для поддержания стабильности производит блокировку данных в памяти, не допуская их изменения. Полное описание всех таких ситуаций и тонкости написания самомодифицирующихся кодов ищите в технических описаниях конкретных микропроцессоров.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru