|
Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Команда XCHG
Команда XCHG в Ассемблере выполняет перестановку операндов (то есть меняет местами значения операндов). Синтаксис:
XCHG ОПЕРАНД1, ОПЕРАНД2
После выполнения команды значение из ОПЕРАНД1 будет помещено в
ОПЕРАНД2, а из ОПЕРАНД2 - в ОПЕРАНД1.
ОПЕРАНД1 может быть один из следующих:
- Регистр общего назначения (REG)
- Область памяти (MEM)
ОПЕРАНД2 может быть один из следующих:
- Регистр общего назначения (REG)
- Область памяти (MEM)
С учётом ограничений, которые были описаны выше, комбинации ОПЕРАНД1-ОПЕРАНД2 могут быть следующими:
REG, MEM MEM, REG REG, REG
После выполнения команды никакие флаги не изменяются.
Пример на ассемблере:
.model tiny
.code
ORG 100h
start:
MOV AL, 1
MOV AH, 2
XCHG AL, AH ;Теперь AL=2, AH=1
XCHG AL, AH ;Теперь AL=1, AH=2
RET ;Выйти из программы
END start
Это, пожалуй, одна одна из немногих команд, которая опровергает утверждение о сложности ассемблера и о том, что исходные тексты на языке высокого уровня всегда занимают меньше места, чем на языке Ассемблера. Пример на Lazarus (Free Pascal):
program xchg;
{$ASMMODE INTEL} //!!!Использовать эту директиву
var A : byte = 1;
B : byte = 2;
C : byte;
begin
//Меняем местами значения A и B на Паскале
C := A; //C = 1
A := B; //A = 2
B := C; //B = 1
//Меняем местами значения A и B на Ассемблере
asm
MOV AX, B
MOV BX, AX
MOV AX, A
XCHG AX, BX //A = 1, B = 2
MOV A, AX
MOV AX, BX
MOV B, AX
end;
WriteLn('A = ', A, ', B = ', B);
ReadLn;
end.
Как видите, вместо ТРЁХ инструкций на Паскале мы используем всего ОДНУ инструкцию на Ассемблере.
На остальные инструкции не обращайте внимания - это связано с особенностями использования Ассемблера в определённых языках и средствах разработки (кое что про это можно найти здесь).
Напоследок, как всегда, о происхождении аббревиатуры XCHG.
XCHG - это своеобразное сокращение слова eXCHanGe (замена).
|
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |