CMPXCHG
(CoMPare and eXCHanGe)
Сравнение и обмен
Схема команды: | cmpxchg приемник,источник(аккумулятор) |
Назначение: сравнение и обмен значений между источником и приемником.
Алгоритм работы:
выполнить сравнение элементов источник и приемник;
если источник и приемник не равны, то:
установить zf=0;
переслать содержимое операнда приемник в источник (регистр al/ax/eax).
если источник и приемник равны, то:
установить zf=1;
переслать содержимое операнда источник (регистр al/ax/eax) по месту операнда приемник.
Состояние флагов после выполнения команды:
11 | 07 | 06 | 04 | 02 | 00 |
OF | SF | ZF | AF | PF | CF |
r | r | r | r | r | r |
Применение:
Команды сравнивают два операнда. Один из сравниваемых операндов находится в аккумуляторе (регистре al/ax/eax), другой может находиться в памяти или регистре общего назначения. Если значения равны, то производится замена содержимого операнда приемник содержимым источника, находящимся в регистре-аккумуляторе. Если значения не равны, то производится замена содержимого операнда источника находящимся в регистре-аккумуляторе содержимым операнда назначения. Определить тот факт, была ли произведена смена значения в аккумуляторе (то есть были ли не равны сравниваемые операнды), можно по значению флага zf.
.486 mov ax,114eh mov bx,8e70h cmpxchg bx,ax jz m1 ;переход, если zf=1, то есть операнды равны ;и ax не изменился ... ;действия, если операнды не равны m1: |
См. также: уроки 7, 10 и команды ,