Команды передачи данных
Группу команд передачи данных можно условно разделить на четыре части: общие, ввода/вывода, адресные и флагов. Эти команды представлены в таблице 3.1.
Таблица 3.1.
Команды передачи данных.
| Мнемокод/Операнды | Краткое описание команды | |
| Общие команды: | ||
| MOV назначение, источник | Переслать (скопировать) байт или слово | |
| XCHG назначение, источник | Перестановка байтов или слов | |
| POP назначение | Извлечение слова из стека | |
| PUSH источник | Занесение слова в стек | |
| XLAT/XLATB таблица | Перекодировка таблицы | |
| Команды ввода/вывода: | ||
| IN сумматор, порт | Выборка байта или слова из порта | |
| OUT порт, сумматор | Размещение байта или слова в порт | |
| Адресные команды: | ||
| LDS назначение, источник | Загрузка регистра сегмента данных | |
| LEA назначение, источник | Загрузка эффективного адреса | |
| LES назначение, источник | Загрузка регистра дополнительного сегмента | |
| Команды работы с регистром флагов: | ||
| LAHF | Загрузка флагов в регистр AH | |
| SAHF | Установка флагов из регистра AH | |
| POPF | Извлечение регистра флагов из стека | |
| PUSHF | Занесение регистра флагов в стек |
Рассмотрим некоторые из них.
Команда пересылки данных MOV (move data) –на место первого операнда пересылается значение второго операнда, флаги не меняет:
MOV dst, src
где dst – оператор получатель, src – операнд отправитель.
Допустимые комбинации операндов:
| dst | src |
| r8 | i8, r8, m8 |
| m8 | i8, r8 |
| r16 | i16, r16, sr, m16 |
| sr (кроме CS) | i16, m16 |
| m16 | i16, r16, sr |
Команда обмена данными XCHG (exchange) – меняет местами значения своих операндов (они должны быть либо байтами, либо словами), флаги не меняются:
XCHG dst, src
Допустимые типы операндов команды XCHG:
| dst | src | размер операндов |
| r8 | r8, m8 | перестановка байтов |
| m8 | r8 | |
| r16 | r16, m16 | перестановка слов |
| m16 | r16 |
Examle 3.4.Фрагмент программы использования команды XCHG.
; описание данных
count db 10h, 20h
total dw 1234h
var16 dw ?
; фрагмент кода программы
XCHG AX, total ;
XCHG AX, BX ;
XCHG DL, AL ;
XCHG count, AL ;
XCHG var16, AX ;
Команда PUSH (PUSHed) - включает в стек слово операнда, a команда POP (POPed) - извлекает слово из стека.
PUSH src.
POP dst
В командах PUSH и POP допустимы следующие операнды:
dst - r16, m16, sr (кроме CS) src - r16, m16, sr
Examle 3.5.Фрагмент программы использования команд PUSH и POP.
; описание данных
var16 dw 1234h
; фрагмент кода программы
PUSH BX ;
PUSH var16 ;
POP BX ;
POP var16 ;
; доступ к элементам стека
MOV BP, SP ;
MOV AX, [BP] ;
Команда преобразования XLAT применяется для быстрого преобразования символов из одного кода в другой. Она заменяет содержимое аккумулятора AL на байт из 256-байтовой таблицы, начальный адрес которой находится в регистре BX, а восьмибитовое смещение - в регистре AL. В качестве сегментного используется регистр DS. Некоторые ассемблеры допускают мнемонику XLATB, подчеркивающую, что команда преобразует байты.
XLAT [table]
XLATB [table]
где [table] – необязательный параметр, представляющий собой символическое имя начального адреса таблицы преобразования.
На рисунке 3.1. показан механизм работы команды перекодировки таблиц XLAT.

Examle 3.6.Фрагмент программы использования команды XLAT.
; Преобразование чисел от 0 до 15 в 16-ое число
; описание данных
tablehex db ‘0123456789ABCDEF’ ; Таблица для преобразования
; фрагмент кода программы
MOV BX, OFFSET tablehex ; В BX поместить смещение tablehex
MOV AL, 10 ; В AL поместить число для преобразования
XLAT ; Преобразовать число в 16-ое число
Команда LEA извлекает из памяти 16-битовый адрес и помещает его в один из общих регистров. Практически эта команда дублирует один из вариантов команды MOV, но выполняется быстрее.
Команда LDS извлекает из памяти 32-битовый адрес и помещает первое считанное из памяти слово в заданный общий регистр, а второе - в сегментный регистр DS.
Команда LES извлекает из памяти 32-битовый адрес и помещает первое считанное из памяти слово в заданный общий регистр, а второе - в сегментный регистр ES.
LEA reg, mem
LDS reg, mem
LES reg, mem
Examle 3.7.Фрагмент программы использования команд LES, LDS и LEA.
; описание данных
str_1 DB ‘Hello’ ; str_1 содержит смещение строки ‘Hello’
str_2 DB 50 DUP (‘ ‘) ;
str_pnt DD str_1 ; str_pnt содержит полный указатель переменной str_1
; фрагмент кода программы
LEA SI, str_1 ;
LEA DI, str_2 ;
MOV AL, [SI] ;
MOV [DI], AL ;
LES BX, str_pnt ;
LDS BX, str_pnt ;