Команда 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 (замена).



Первые шаги в программирование Первые шаги в программирование

Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su