Assembler для начинающих



         

Специальные команды - часть 2


 
      Команда LOCK - это командный префикс, такой же, как подавление
    сегментации или REP-префикс. Она предназначена для
    мультипроцессорных систем, в которых несколько микропроцессоров
    могут одновременно работать с одними и теми же ячейками памяти.
    Префикс LOCK вынуждает микропроцессор 8088 захватить линии
    управления, и тем самым получить исключительное право достура в
    память на время обработки команды с префиксом. Лучший пример этого
    - установка- проверка флага в общей памяти.
 
      MOV   AL,1
    LOCK XCHG     AL,FLAG_BYTE
      CMP   AL,1
 
      В этом примере байт FLAG_BYTE содержит нулевой или единичный
    индикатор. Микропроцессор устанавливает флаг равным единице, когда
    входит в "критическую" область программы, где он выполняет
    некоторые системные действия, которые может выполнять в данный
    момент времени лишь один микропроцессор. Перед входом в
    "охраняемую" область микропроцессор должен проверить, не работает
    ли в ней другой микропроцессор. Если это так, он должен подождать
    перед входом; иначе он может войти в область. В примере перед
    командой XCHG используется префикс LOCK. Префикс LOCK дает
    микропроцессору право исключительного доступа в течение выполнения
    команды XCHG, которая читает содержимое ячейки памяти, а затем
    записывает данные в эту же ячейку. Команда XCHG записывает 1 из
    регистра AL в поле FLAG_BYTE, засылая его текущее значение в
    регистр AL. Теперь, если регистр AL содержит 1, то в "охраняемой"
    области находится другой микропроцессор, и проверяющий
    микропроцессор обязан ждать. Если регистр AL нулевой,
    микропроцессор может войти в "охраняемую" область, а команда XCHG
    уже установила поле FLAG_BYTE равным 1, чтобы больше ни один
    микропроцессор не смог войти туда. Префикс LOCK препятствует любому
    другому микропроцессору проверять поле FLAG_BYTE в течение
    короткого интервала времени между проверкой и установкой ячейки



Содержание  Назад  Вперед