ХАНДЫФАР

Инструкция LOCK


Установить префикс сигнала LOCK#


LOCK - Установить сигнал lock# на время действия прилагаемой инструкции.


Вызывает сигнал блокировки процессора во время выполнения сопровождающей инструкции (превращает инструкцию в атомарную). В многопроцессорной среде сигнал LOCK# гарантирует, что процессор имеет исключительное право на использование любой совместно используемой памяти во время сигнала.


Префикс lock может быть добавлен только к следующим инструкциям и только к тем формам инструкций, где операндом назначения является операнд памяти: add, adc, and, dec, inc, neg, not, or, sbb, sub, xor и xchg. Если префикс lock используется с одной из этих инструкций, а исходным операндом является операнд памяти, может быть сгенерировано исключение неопределённого кода операции (#UD). Также будет сгенерировано исключение с неопределённым кодом операции, если префикс lock используется с какой-либо инструкцией, отсутствующей в приведённом выше списке. Инструкция xchg всегда утверждает сигнал LOCK# независимо от наличия или отсутствия префикса lock.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____value dw_4
  6. data ends
  7. code segment public
  8. ____assume ds:data, cs:code
  9. ____main proc
  10. ________mov_____ax, seg data
  11. ________mov_____ds, ax
  12. ___lock add_____value, 1
  13. ________mov_____ax, value
  14. ________mov_____ax, 4C00h
  15. ________int_____21h
  16. ____main endp
  17. code ends
  18. end main

Инструкция LOCK


Установить префикс сигнала LOCK#


LOCK - Установить сигнал lock# на время действия прилагаемой инструкции.


Вызывает сигнал блокировки процессора во время выполнения сопровождающей инструкции (превращает инструкцию в атомарную). В многопроцессорной среде сигнал LOCK# гарантирует, что процессор имеет исключительное право на использование любой совместно используемой памяти во время сигнала.


Префикс lock может быть добавлен только к следующим инструкциям и только к тем формам инструкций, где операндом назначения является операнд памяти: add, adc, and, dec, inc, neg, not, or, sbb, sub, xor и xchg. Если префикс lock используется с одной из этих инструкций, а исходным операндом является операнд памяти, может быть сгенерировано исключение неопределённого кода операции (#UD). Также будет сгенерировано исключение с неопределённым кодом операции, если префикс lock используется с какой-либо инструкцией, отсутствующей в приведённом выше списке. Инструкция xchg всегда утверждает сигнал LOCK# независимо от наличия или отсутствия префикса lock.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____value dw_4
  6. data ends
  7. code segment public ____________; Начало сегмента кода
  8. ____assume ds:data, cs:code
  9. ____main proc __________________; Начало процедуры main
  10. ________mov_____ax, seg data____; Получаем адрес сегмента памяти данных и сохраняем его в ax
  11. ________mov_____ds, ax__________; Передаём адрес сегмента памяти данных из регистра ax в ds
  12. ___lock add_____value, 1
  13. ________mov_____ax, value
  14. ________mov_____ax, 4C00h_______; Копируем значение функции завершения процесса в ah а значение в al
  15. ________int_____21h ____________; Вызываем прерывание DOS
  16. ____main endp __________________; Конец процедуры main
  17. code ends ______________________; Конец сегмента кода
  18. end main _______________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda