Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 2).doc
Скачиваний:
155
Добавлен:
08.03.2015
Размер:
380.93 Кб
Скачать

149

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:

Выполнить быстрое возведение в квадрат числа из ячейки памяти, лежащего в диапазоне 05.

TablConv DB 0,1,4,9,16,25 ;Описание таблицы преобразования

. . . . . . . . . .

MOV AL,X ;Чтение операнда

MOV BX,OFFSET TablConv ;Загрузка адреса таблицы

XLAT TablConv ;Преобразование

MOV Y,AL ;Запись результата

Указание в команде XLAT имени таблицы-источника необязательно, но предпочтительно, так как позволяет ассемблеру при трансляции программы проверить наличие таблицы и ее корректность.