Инструкция mov передает байт, слово или двойное слово из операнда- источника в операнд-назначение. Она может передавать данные между регистрами общего назначения, из регистра общего назначения в память или из памяти в этот регистр, но она не может перемещать данные из памяти в память. Также она может передать непосредственное значение в регистр общего назначения или память, сегментный регистр в регистр общего назначения или память, регистр общего назначения или память в сегментный регистр, управляющий или отладочный регистр в регистр общего назначения и регистр общего назначения в управляющий или отладочный регистр. Инструкция mov может быть скомпилирована только в случае, если размер операнда-источника совпадает с размером операнда-назначения. Ниже приведены примеры для каждой допустимой комбинации:
mov bx,ax ; из регистра общего назначения в регистр общего назначения
mov [char],al ; из регистра общего назначения в память
mov bl,[char] ; из памяти в регистр общего назначения
mov dl,32 ; непосредственное значение в регистр общего назначения
mov [char],32 ; непосредственное значение в память
mov ax,ds ; из сегментного регистра в регистр общего назначения
mov [bx],ds ; из сегментного регистра в память
mov ds,ax ; из регистра общего назначения в сегментный регистр
mov ds,[bx] ; из памяти в сегментный регистр
mov eax,cr0 ; из управляющего регистра в регистр общего назначения
mov cr3,ebx ; из регистра общего назначения в управляющий регистр
Инструкция xchg обменивает содержимое двух операндов. Она может поменять значения операндов с одинаковым размером: два байта, два слова или два двойных слова. Порядок операндов не важен. Операндами могут выступать два регистра общего назначения или регистр общего назначения и память. Например:
xchg ax,bx ; обменивает значения двух регистров общего назначения
xchg al,[char] ; обменивает значения регистра общего назначения и памяти
Инструкция push уменьшает значение регистра-указателя стека (регистр sp/esp в зависимости от разрядности режима 16 или 32-битный) на 2 или 4 (размер адреса), а затем передает операнд на вершину стека, на который указывает регистр sp/esp. Операндом может быть память, регистр общего назначения, сегментный регистр или непосредственное значение размером в слово или двойное слово. Если операндом является непосредственное значение и его размер не определен, то по умолчанию в 16-битном режиме он обрабатывается как слово, а в 32-битном режиме как двойное слово. Инструкции pushw и pushd ‑ мнемоники вариантов этой инструкции, в которых сохраняют соответственно значения в размере слова или двойного слова. Если в одной строке содержится несколько операндов (разделенных только пробелами, а не запятыми), то компилятор будет компилировать последовательность инструкций push с этими операндами. Примеры этой инструкции с одним операндом:
push ax ; сохраняет регистр общего назначения
push es ; сохраняет сегментный регистр
pushw [bx] ; сохраняет память
push 1000h ; сохраняет непосредственное значение
Инструкция pusha сохраняет содержимое восьми регистров общего назначения в стек. Соответственно эта инструкция уменьшает значение указателя стека sp/esp на 16/32. Эта команда не имеет операндов. Существуют две версии этой инструкции, одна 16-битная, а вторая 32-битная, ассемблер автоматически генерирует нужную версию для текущего режима, но это можно изменить с помощью инструкций pushaw или pushad, позволяющих всегда получать 16-битные или 32-битных версии. 16-битная версия этой инструкции помещает регистры общего назначения в стек в следующем порядке: ax, cx, dx, bx, sp, bp, si и di. В стек помещается содержимое регистра sp на момент до выполнения команды. 32-битная версия помещает в стек эквивалентные 32-битные регистры общего назначения в том же порядке.
Инструкция pop перемещает слово или двойное слово из текущей вершины стека в операнд-назначение, а после увеличивает регистр esp, так чтобы он указывал на новую вершину стека. Операндом может быть память, регистр общего назначения или сегментный регистр. Мнемоники popw и popd ‑ это варианты этой инструкции, восстанавливающие соответственно слова и двойные слова. Если на одной строке находится несколько операндов, разделенных пробелами, ассемблер компилирует последовательность инструкций с этими операндами.
pop bx ; восстанавливает регистр общего назначения
pop ds ; восстанавливает сегментный регистр
popw [si] ; восстанавливает память
Инструкция popa восстанавливает регистры, сохраненные в стек инструкцией pusha, кроме сохраненного значения sp/esp, который игнорируется. У этой инструкции нет операндов. Чтобы компилировать 16-битную или 32-битную версию этой инструкции, используйте мнемоники popaw или popad.