C
Пример 1:
; В полях данных mem dq 1122334455667788h ;В программном сегменте mov ЕСХ,9 mov ЕВХ,5 mov EDX,11223344h mov EAX,55667788h cmpxchgSb mem; mem=EDX:EAX. ECX:EBX ® mem; mem=0000000900000005h
Пример 2:
; В полях данных mem dq 1122334455667788h ;B программном сегменте mov ECX,9 mov EBX,5 mov EDX,11223344h mov EAX,55667789h cmpxchgSb mem ;memOEDX: EAX. Mem – " EDX: EAX ;mem=1122334455667788h ;EDX=11223344h, EAX=55667788h
При работе с многобайтовыми данными не следует забывать о том, что в памяти байты любых данных всегда выстраиваются в порядке их номеров, т.е. от младшим к все более старшим, в то время как при изображении чисел мы применяем обратный порядок – сначала пишем старшие разряды числа, затем младшие. В то же время символьные строки мы изображаем так же, как они располагаются в памяти – для нас естественно считать, что по мере движения по строке вправо номер символа возрастает.
Пример 3:
; В полях данных mem1 db '12345678'; Строка-операнд mem2 db '12345678'; Сравниваемая строка ;В программном сегменте mov ECX,68676665h; 'efgh' mov EBX,64636261h; 'abcd' mov EDX,dword ptr mem2+4; Забираем старшую часть строки mov EAX,dword ptr mem2; Забираем младшую часть строки cmpxchg8b gword ptr mem1; Операнды совпадают ;ZF=1, mem1=''abcdefgh'' ;ECX:EBX без изменений ;EDX:EAX без изменений
Пример 4:
;В полях данных mem1 db '12345678'; Строка-операнд mem2 db 'abcdefgh'; Сравниваемая строка ; В программном сегменте mov ECX,68676665h; 'efgh' mov EBX,64636261h; 'abed' mov EDX,dword ptr mem2+4; 3абираем старшую часть строки mov EAX,dword ptr mem2; Забираем младшую часть строки cmpxchg8b qword ptm mem1; Операнды не совпадают ;ZF=0, EDX=38373635='5678' ;EAX=34333231='1234' ;mem1s без изменения ;При неравенстве ЕСХ:ЕВХ не принимают участие в операции