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


486+ CMPXCHG Сравнение и обмен - часть 2


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


; В полях данных

meml 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 meml ;Операнды совпадают

;ZF=1, mem1=''abcdefgh''

;ECX:EBX без изменений

;EDX:EAX без изменений

 

Пример 4


;В полях данных

meml 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 без изменения

;При неравенстве ЕСХ:ЕВХ не принимают участие в операции


 

Pentium+ CPUID Идентификация процессора


Команда cpuid позволяет получить код идентификации процессора, установленного на данном компьютере. Команда в качестве неявного операнда использует регистр ЕАХ. Для процессоров Pentium регистр ЕАХ перед вызовом команды cpuid может принимать два значения: 0 и 1. Если ЕАХ=0, то команда возвращает в регистре ЕАХ код 1, а в регистрах ЕВХ, EDX и ЕСХ (именно в таком порядке) - три части символьной строки, идентифицирующей изготовителя процессора. Для процессоров Intel возвращаемая строка в целом имеет вид "Genumclatcl".




Начало  Назад  Вперед



Книжный магазин