Иллюстрированный самоучитель по Assembler

C

486+ CMPXCHG Сравнение и обмен

Команда cmpxchg выполняет в одной операции сравнение и обмен операндов. Команда требует два параметра и неявным образом использует третий операнд – регистр ЕАХ. Первый операнд (приемник) должен находиться в 16 – или 32-битовой ячейке памяти, второй операнд (источник) – в регистре общего назначения такого же размера. Команда выполняет сравнение операнда-приемника с содержимым неявного операнда – регистра ЕАХ.

Если сравниваемые значения совпадают, операнд-приемник замещается операндом-источником (т.е. содержимое регистра записывается в память). Если сравниваемые значения не совпадают, содержимое памяти (приемник) поступает в регистр ЕАХ (рис. П1). Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › C
Рис. П1. Действие команды cmpxchg

Пример 1:

; В полях данных
mem dw 135
; В программном сегменте
mov AX,135
mov BX,60
cmpxchg mem,BX; mem=AX. Регистр ® память;
mem=60, BX=60, АХ=135

Пример 2:

; В полях данных
mem dw 135
;В программном сегменте
mov AX,148
mov BX,60
cmpxchg mem,BX; mem<>AX. Память ® АХ
;mem=135, BX=60, AX=148

Pentium+ CMPXCHG8B Сравнение и обмен 8 байтов

Команда cmpxchgSb выполняет в одной операции сравнение и обмен 8-байтовых операндов. Команда требует один параметр и неявным образом использует еще два операнда – пары регистров EDX:EAX и ЕСХ:ЕВХ. В качестве явного операнда команды (приемника) может выступать только 64-битная (8-байтовая) ячейка памяти. Команда выполняет сравнение операнда-приемника в памяти с содержимым EDX:EAX. Если сравниваемые значения совпадают, то операнд-приемник в памяти замещается 64-битным значением ЕСХ:ЕВХ. Если сравниваемые значения не совпадают, содержимое памяти поступает в пару регистров EDXrEAX, замещая один из сравниваемых операндов (рис. П2). Команда воздействует на флаг ZF.

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › C
Рис. П2. Действие команды cmpxchg8b

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.