- •3.11.1 Команды пересылки данных
- •Команды пересылки общего назначения
- •Xchg приемник, источник
- •Команды загрузки адресных значений
- •Команды обращения к стеку
- •Команды пересылки флагов
- •Команды ввода/вывода
- •In аккумулятор, порт
- •In аккумулятор, dx.
- •3.11.2. Арифметические команды
- •Типы арифметических данных
- •Команды инкрементирования и декрементирования
- •Inc приемник
- •Команды сложения и вычитания
- •Команды расширения знака
- •Команды умножения и деления
- •Imul источник.
- •Команды десятичной коррекции
- •Сложение в bdc-формате
- •Вычитание в bcd-формате
- •Сложение в ascii-формате
- •Вычитание в ascii-формате
- •Умножение в ascii-формате
- •Деление в ascii-формате
- •3.11.3 Логические команды
- •Команды логических операций
- •Команды сравнения
- •Команды сдвигов
- •Команды логических сдвигов
- •Команды арифметических сдвигов
- •Команды циклических сдвигов
- •3.11.4. Команды передачи управления
- •Команды безусловных переходов
- •Команды условных переходов
- •Команды перехода по состоянию арифметических флагов
- •Команды перехода по соотношению между числами
- •Команды перехода по состоянию регистра cx
- •Команды управления циклами
- •Команды для организации подпрограмм
- •Команды прерываний
- •3.11.5. Команды обработки строк
- •Строковые примитивы
5) команды обработки строк;
6) команды управления микропроцессором.
Краткий справочник по системе команд, удобный для повседневной работы, приведен в приложении.
В последующих разделах все команды и особенности их использования будут рассмотрены более подробно.
3.11.1 Команды пересылки данных
Команды пересылки данных осуществляют обмен данными или адресами между регистрами МП и ячейками памяти или портами ввода/вывода. Их можно разделить на следующие подгруппы:
1) команды пересылки общего назначения;
2) команды загрузки адресных значений;
3) команды обращения к стеку;
4) команды пересылки флагов;
5) команды ввода/вывода.
Команды пересылки общего назначения
К этой подгруппе относятся команды MOV, XCHG и XLAT.
Команда MOV является основной командой пересылки общего назначения. Она имеет следующий формат:
MOV приемник, источник
и осуществляет пересылку байта или слова данных из источника в приемник. В качестве приемника и источника данных могут использоваться регистры МП или ячейки памяти. Кроме того, источник может быть и непосредственным значением.
В команде MOV допустимо большинство из возможных сочетаний операндов.
Пример 3.43:
MOV AX, Table ; Пересылка из памяти в регистр
MOV Table, AX ; и наоборот
MOV ES:[BX],DX ; Пересылка из регистра в память
MOV DS,AX ; Пересылка между 16-битными
MOV BL,AL ; или 8-битными регистрами
MOV CL,30 ; Пересылка константы в регистр
MOV [BX+SI],25h ; или в память
Некоторые из сочетаний операндов в команде MOV недопустимы.
1. Нельзя переслать данные из одной ячейки памяти в другую. При необходимости они пересылаются через промежуточный регистр.
Пример 3.44:
MOV Alpha,[BX] ; Ошибка - обращение типа
; "память" - "память"
MOV AX,[BX] ; Пересылка данных из ячейки,
MOV Alpha,AX ; адресуемой BX, в ячейку Alpha
2. Нельзя загрузить непосредственный операнд в сегментный регистр. При необходимости эта загрузка осуществляется через промежуточный регистр.
Пример 3.45:
MOV DS,0ABCDh ; Ошибка - загрузка константы
; в регистр DS
MOV AX,0ABCDh ; Загрузка константы
MOV DS,AX ; в регистр DS
3. Нельзя переслать данные между сегментными регистрами. При необходимости такая пересылка осуществляется через промежуточный регистр.
Пример 3.46:
MOV ES,DS ; Ошибка - пересылка между
; сегментными регистрами
MOV AX,ES ; Пересылка между сегментными
MOV DS,AX ; регистрами (из ES в DS)
4. В качестве приемника данных не может использоваться регистр CS, так как его изменение эквивалентно передаче управления, что не является пересылкой данных.
Команда обмена XCHG имеет формат:
Xchg приемник, источник
и осуществляет обмен байтами или словами данных между источником и приемником. В качестве источника и приемника данных могут использоваться регистры МП, либо регистр и ячейка памяти.
Пример 3.47:
XCHG AX,BX ; Обмен между 16-битными
XCHG AL,DH ; или 8-битными регистрами
XCHG Alpha,DX ; Обмен между ячейкой
XCHG AL,Beta ; памяти и регистром
Ни один из операндов команды XCHG не может быть сегментным регистром.
Команда табличного преобразования XLAT записывается в формате:
XLAT или XLAT таблица-источник
и выполняет преобразование кода из AL в соответствии с выражением (AL)=((BX)+(AL)).
Преобразование осуществляется по таблице, на которую указывает регистр BX. Следовательно, перед выполнением этой команды начальный адрес таблицы необходимо загрузить в регистр BX. Преобразуемый байт должен быть в регистре AL. При выполнении команды XLAT преобразуемый байт используется как индекс таблицы. Он складывается с начальным адресом таблицы, в результате чего формируется адрес ее строки (BX)+(AL), по которой осуществляется преобразование. По этому адресу считывается элемент таблицы и помещается в регистр AL.
Команда XLAT удобна для выполнения преобразований при отсутствии алгоритмической связи между преобразуемыми кодами.
Пример 3.48:
Выполнить быстрое возведение в квадрат числа из ячейки памяти, лежащего в диапазоне 05.
TablConv DB 0,1,4,9,16,25 ;Описание таблицы преобразования
. . . . . . . . . .
MOV AL,X ;Чтение операнда
MOV BX,OFFSET TablConv ;Загрузка адреса таблицы
XLAT TablConv ;Преобразование
MOV Y,AL ;Запись результата
Указание в команде XLAT имени таблицы-источника необязательно, но предпочтительно, так как позволяет ассемблеру при трансляции программы проверить наличие таблицы и ее корректность.