Программирование на Ассемблере


         

Команды обмена


Для обмена данными можно использовать 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



Содержание  Назад  Вперед