Андрей Газибаров


без тайни

Инструкциите On-line

LOCK
Заключване на шината
Общи форми: LOCK
 
Форма КОП   I8086 I80386 I80486
LOCK F0   2 2 2
Действие: Указва на процесора да забрани предаването на шината на друго устройство през цялото време, за което се изпълнява инструкцията. Външно това се индицира чрез активиране на сигнала LOCK. Този префикс позволява изпълнението на неделими операции четене-модификация-запис за всички инструкции от този тип.
386+ поставят ограничение върху инструкциите, които могат да използват префикс LOCK. Това са само точно инструкциите от типа четене-модифициране-запис:
  • BTS, BTR, BTC m, r/i
  • АDD, ADC, SUB, SBB, AND, OR, XOR m, r/i
  • NOT, NEG, INC, DEC m
  • XADD, CMPXCHG m,r
  • CMPXCHG8B, CMPXCHG16B
  • XCHG m,r
Във всички останали случаи процесорът генерира #UD.
Като недостатък може да отбележи, че инструкциите за изместване и ротация (също от вида четене-модифициране-запис) не позволяват използване на LOCK.
I80286 няма ограничение върху LOCK, но при него той е зависим от IOPL: ако IOPL < CPL, инструкция с LOCK предизвиква #GP(0). В 386 тази зависимост е премахната като излишна (и дори вредна).
Процесорът автоматично активира LOCK при следните случаи:
  • инструкция XCHG m, r
  • установяване бита A на дескриптор (I80486+: само ако още не е установен. За целта втората двойна дума на дескриптора се чете без блокиране; ако A = 0, шината се блокира, двойната дума се прочита отново, битът се вдига и се записва обратно. Първата двойна дума се прочита при блокирана шина. Ако A = 1, се прочита и първата двойна дума без блокировка. В многопроцесорна система свалянето на бита A задължително трябва да става с инструкция LOCK BTR или LOCK AND);
  • промяна на бита за заетост в дескриптор на задача
  • установяване битовете A и/или D в описанието на страница. Осъществява се по горната схема.
Флагове
PE VM NT IOPL OF DF IF TF SF ZF AF PF CF
                         
CPU
8086 186 V20 286 386 486 P P-P P-II MMX SSE 3D! E64
• • • • • • • • •       •
Изключения
Реален режим
#UD Неправилно използване на префикса
Защитен режим
#UD Неправилно използване на префикса
#GP(0) Само I80286: CPL > IOPL
V86 режим
#UD Неправилно използване на префикса
 
Съдържание Пълен текст
 
  PDF, 3.6M Приложение, 18К