Команды обмена
Для обмена данными можно использовать 4 команды MOV или специальные команды.
Команда XCHG
XCHG R8|R16|R32, R8|R16|R32|M8|M16|M32
Запись означает, что в качестве первого операнда можно использовать регистры общего назначения длиной байт (R8), слово (R16) или двойное слово (R32), в качестве второго – те же регистры или адреса памяти длиной байт, слово или двойное слово (M8, M16, M32).
Пример 1. Используя команду XCHG, реализовать оператор swap (s2[0], s2[2]) для данных длиной 2 байта
;swap (s2[0], s2[2])
mov ax, [s2]
xchg ax, [s2+4]
mov [s2], ax
Команда позволяет вместо двух общих регистров использовать только один, вместо 4-х команд используются 3, но команда xchg не входит в основную группу команд, которая оптимизирована и не может быть спарена с другими командами, поэтому использование команд MOV
по времени выполнения более эффективно.
Пример 2. Пусть необходимо поменять местами байты числа длиной 4 байта
X dd 11223344h
Y dd ?
…
mov eax, [X]
mov [Y], eax
mov al, [BYTE Y]
mov ah, [BYTE Y +3]
mov [BYTE Y +3], al
mov [BYTE Y ], ah
mov al, [BYTE Y+1]
mov ah, [BYTE Y +2]
mov [BYTE Y +2], al
mov [BYTE Y+1], ah
Команда BSWAP
BSWAP R32
Решение предыдущей задачи с помощью команды BSWAP
MOV EAX, [X]
BSWAP EAX
MOV [Y], EAX