ХАНДЫФАР

Обменять содержимое регистра или памяти с содержимым регистра

____________________XCHG AX, reg16 --------- Обмен содержимого reg16 с AX.
____________________XCHG reg16, AX --------- Обмен содержимого AX с reg16.
____________________XCHG reg/mem8, reg8 --- Обмен содержимого reg8 с reg/mem8.
____________________XCHG reg8, reg/mem8 --- Обмен содержимого reg/mem8 с reg8.

XCHG reg/mem16, reg16 - Обмен содержимого reg16 с reg/mem16.

____________________XCHG reg16, reg/mem16 - Обмен содержимого reg/mem16 с reg16.


Обменивается содержимым целевого (первого) и исходного (второго) операндов. Операндами могут быть два регистра общего назначения или регистр и ячейка памяти. При обращении к операнду памяти автоматически реализуется протокол блокировки процессора на время операции обмена, независимо от наличия или отсутствия префикса lock или значения IOPL.

Эта инструкция полезна для реализации семафоров или аналогичных структур данных для синхронизации процессов.

Предположим, что регистр al содержит 1116, регистр bl содержит 2216. После выполнения xchg al, bl регистр al будет содержать 2216, а регистра bl будет содержать 1116.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public _______; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc _____________; Начало процедуры main
  7. ________mov_____al, 11h ___; Копируем значение 1710 в регистр al
  8. ________mov_____bl, 22h ___; Копируем значение 3410 в регистр bl
  9. ________xchg____al, bl ____; Выполняем обмен содержимого al с bl
  10. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  11. ________int_____21h _______; Вызываем прерывание DOS
  12. ____main endp _____________; Конец процедуры main
  13. code ends _________________; Конец сегмента кода
  14. end main __________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda