Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
CMPXCHG
Влияние команды на флаги и форматы команды:
* |
* |
* |
* |
* |
* |
0F B0 /r |
CMPXCHG r/m8,r8 |
Сравнить AL и r/m8, если равны, то установить ZF и загрузить r8 в r/m8, иначе очистить ZF и загрузить r/m8 в AL |
Intel486 |
cmpxchg al,dh |
0F B1 /r |
CMPXCHG r/m16,r16 |
Сравнить AX и r/m16, если равны, то установить ZF и загрузить r16 в r/m16, иначе очистить ZF и загрузить r/m16 в AX |
Intel486 |
cmpxchg ax,dx |
0F B1 /r |
CMPXCHG r/m32,r32 |
Сравнить EAX и r/m32, если равны, то установить ZF и загрузить r32 в r/m32, иначе очистить ZF и загрузить r/m32 в EAX |
Intel486 |
cmpxchg ecx,edi |
Описание:
Команда CMPXHG сравнивает аккумулятор (регистр AL, AX или EAX) с операндом-назначением. В случае их равенства операнд-источник загружается в операнд-назначение, иначе операнд-назначение загружается в аккумулятор.
Эта команда может быть использована с префиксом LOCK. Для упрощения интерфейса с шиной процессора операнд-назначение принимает цикл записи, не обращая внимания на результат сравнения. Операнд-назначение записывается обратно, если сравнение неудачно, и операнд-источник записывается в операнд-назначение в противном случае. (Процессор никогда не производит блокировки чтения без блокировки записи.)
Операция:
IF (Аккумулятор = DEST) (* Аккумулятор это AL, AX или EAX *)
THEN
ZF = 1;
DEST = SRC;
ELSE
ZF = 0;
Аккумулятор = DEST;
FI;
Особые ситуации защищенного режима:
#GP(0), если результат находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru