Команды Ассемблера: Команды пересылки и обмена информацией
Команда пересылки MOV
Move operand to/from system registers - Пересылка операнда в/из системных регистров. Иными словами,
команда выполняет присвоение.
Пример:
mov eax,ebx
mov eax,[a]
mov al,[b]
Первая строка кода в регистр eax запишет значение регистра ebx. Два операнда, содержащиеся в команде
mov должны иметь одинаковую длину. Если первый операнд - регистр общего назначения, то второй операнд
может быть любым. Если же в качестве операнда используется сегментный регистр, то использование второго
сегментного регистра запрещено, также, запрещено использование двух адресов памяти.
Команда обмена данными XCHG
Exchange
Команда XCHG меняет значения двух операндов местами.
Пример:
mov eax,[a]
xchg eax,[b]
mov [a],eax
Этот обмен можно сделать через команду mov:
mov eax,[a]
mov ebx,[b]
mov [a],ebx
mov [b],eax
При сравнивании этих двух обменов можно сказать следующее. Команда XCHG сэкономила на регистрах, и
вместо двух, - использовала один. Количество команд тоже удалось сократить. Однако, эта команда не является
оптимизированной, и по времени выполнения, применение 4 ассемблерных команд mov будут более эффективными.
Команда загрузки адреса LEA
Load effective address
Пример:
lea eax,[a]
Эта же операция может быть записана и с помощью команды mov:
mov eax, offset a
Использование второго варианта предпочтительнее, поскольку он более эффективен.
Команды для работы со стеком
PUSH - помещает число в стек.
POP - извлекает число из стека.
Пример:
push [a]
push [b]
pop [a]
pop [b]
Выше описанный пример меняет местами значения a и b. Это достигается с помощью специфики стека - "Первый
вошел - последний вышел". Сначала в стек помещается адрес переменной a, потом - b. Первое извлеченное данное
(верхнее, то есть помещенное последним) записывается в a, а второе команда pop извлекает из стека в
переменную b.
|