| CMPXCHG8B |
| Сравнение с размяна на осем байта |
| Общи форма: |
CMPXCHG8B dest |
| Форма |
КОП |
CPUID |
| 16 |
32 |
64 |
Alt |
|
| [LOCK] CMPXCHG8B mdd |
[F0] 0F C7 /1 |
[F0] 0F C7 /1 |
[F0][40+bx] 0F C7 /1 |
[F0] 6B /r |
EDX.8 |
|
| Действие |
IF EDX:EAX = dest
ZF ← 1
dest ← ECX:EBX
ELSE
ZF ← 0
EDX:EAX ← dest
ENDIF
|
| Пояснение |
Тази инструкция е аналогична на CMPXCHG, но операндите са с двойна ширина – осигурява се възможност за неделима операция четене-проверка-модификация-запис на осем последователни байта (дескриптор!), т.е. две двойни думи.
|
| Флагове |
| PE |
VM |
NT |
IOPL |
OF |
DF |
IF |
TF |
SF |
ZF |
AF |
PF |
CF |
| |
|
|
|
? |
|
|
|
? |
AF |
? |
? |
? |
Аритметичният смисъл на ZF тук е, че двата операнда са равни, а булевият – че е била извършена размяната.
|
| CPU |
| 8086 |
186 |
V20 |
286 |
386 |
486 |
P |
P-P |
P-II |
MMX |
SSE |
3D! |
E64 |
| |
|
|
|
|
|
• |
• |
• |
|
|
|
|
Инструкцията се изпълнява, ако CPUID(1) върне EDX.8 = 1
|
| Изключения | ОБЩИ |