Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эрни Каспер Программирование на языке Ассемблер...doc
Скачиваний:
120
Добавлен:
09.11.2019
Размер:
954.88 Кб
Скачать

1.5.Команды пересылки информации

Несмотря на пересылку данных в неизменном виде, эти команды осуществляют один из способов обработки информации. В качестве примера такой обработки можно привести сортировку. В командах пересыл­ки используется все разнообразие способов адресации данных. Пересылка данных может осуществляться в форматах байта, половины байта, двух байтов и бита.

Начнем с байтового формата. Команда MOV (MOVe по-английски означает «передвинуть»; далее в аналогичных случаях мы не будем указывать специально, что дается перевод с английского) копирует содержимое источника в приемник (при выполнении этой команды первоначальное содержимое приемника теряется):

MOV A, #src

MOV A, Rn

MOV A, @Ri

MOV A, src

MOV Rn, A

MOV Rn, #src

MOV Rn , src

MOV @Ri, A

MOV @Ri, #src

MOV @Ri , src

MOV dst, A

MOV dst, #src

MOV dst, Rn

MOV dst, @Ri

MOV dst, dst

Для засылки нуля в накопитель проще использовать команду очистки CLR (CLeaR означает очистить):

CLR A

Чтение и запись данных байтового формата при обращении к внешнему ОЗУ осуществляется при помощи команд MOVX, где буква X, по-видимому, означает external (внешняя память):

MOVX A, @Ri

MOVX A, @DPTR

MOVX @Ri, A

MOVX @DPTR, A

Перед выполнением этой команды в соответствующий регистр нужно записать адрес.

Чтение данных из ПЗУ осуществляется при помощи команды MOVC, притом буква С скорее всего означает Code (программа).

MOVC A, @A+DPTR

MOVC А, @А+РС

Эти команды очень удобны для чтения из таблиц, записываемых в ПЗУ.

Запись в ОЗУ и чтение из него при помощи стекового способа адре­сации производятся командами

PUSH src

POP dst

Мнемокоды стековых команд соответствуют английским глаголам «затолкнуть» и «вытолкнуть».

Существует еще одна команда копирования ХСН (eXCHange означает «обменять»), которая осуществляет обмен содержимого источника и приемника. В принципе обмен можно произвести при помощи трех команд пересылки. Следующие команды делают это за то же время, но занимают меньше места в ПЗУ и не требуют использования дополнительной ячейки ОЗУ:

ХСН A, Rn

ХСН A, @Ri

ХСН A, src

Есть также команда, обменивающая младшие половины байтов:

XCHD A, @Ri

Здесь D означает Digit (четыре бита используются для двоичного представ­ления десятичной цифры).

Одна из команд пересылки данных записывает два байта в регистр указателя данных:

MOV DPTR, #src

Других команд для явной пересылки двухбайтовых данных нет.

Несколько команд пересылки информации работают в битовом фор­мате. В команде MOV источником или приемником должен быть бит переноса С:

MOV С, flag

MOV flag, С

Для записи констант 0 и 1 используются команды очистки CLR и уста­новки SETB (SET Bit означает «установить бит»):

CLR С

CLR flag

SETB С

SETB flag

Все команды пересылки не влияют на содержимое слова состояния программы, за исключением случаев пересылки информации в этот регистр или один из его битов.

1.6.Команды поразрядной обработки информации

Команды поразрядной обработки информации отличаются от команд арифметических операций тем, что работают с отдельными битами независимо от содержимого байта в целом. Такие команды есть для байтового и битового формата данных. Их также называют логическими командами, потому что с их помощью можно вычислять функции алгебры логики НЕ, И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ. Приведем для справки таблицу значений этих функций:

X

Y

/X

X . AND . Y

X.OR.Y

X.XOR.Y

0

0

1

0

0

0

0

1

1

0

1

1

1

0

0

0

1

1

1

1

0

1

1

0

Все команды поразрядной обработки информации не влияют на содер­жимое слова состояния программы, за исключением случаев непосредст­венной записи результата в этот регистр или его биты.

Для получения обратного кода (логическая функция НЕ) при байто­вом формате данных предназначена команда

CPL A

Мнемоника этой команды ComPLement означает «дополнение», хотя в результате ее выполнения получается не дополнительный, а обратный код. Имеются две команды аналогичного назначения, работающие с отдельными битами:

CPL С

CPL flag

Кроме того, инверсия бита может быть использована в командах И и ИЛИ, как показано далее.

Команды для вычисления функции И в байтовом формате используют разнообразные способы адресации. По-видимому, мнемоника команды расшифровывается как ANd Logical.

ANL A, #src

ANL A, Rn

ANL A, @Ri

ANL A, src

ANL dst, A

ANL dst, #src

Эти команды могут использоваться, например, для очистки отдельных битов двоичного кода или для проверки наличия 1 в некотором наборе битов. Имеются две команды, вычисляющие функцию И в битовом формате:

ANL С, flag

ANL С, /flag

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

Аналогичный набор команд имеется и для функции ИЛИ в байтовом формате с мнемоникой OR Logical:

ORL А, #src

ORL A, Rn

ORL A, @Ri

ORL A, src

ORL dst, A

ORL dst, #src

Эти команды могут использоваться, например, для установки отдельных битов двоичного кода в 1. Имеются две аналогичные команды, вычис­ляющие функцию ИЛИ в битовом формате:

ORL С, flag

ORL С, /flag

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

Для функции ИСКЛЮЧАЮЩЕЕ ИЛИ аналогичные команды суще­ствуют только в байтовом формате. Наверно, соответствующая команда расшифровывается как eXclusive oR Logical:

XRL A, #src

XRL A, Rn

XRL A, src

XRL A, @Ri

XRL dst, A

XRL dst, #src

Эти команды могут использоваться, например, для изменения значения отдельных битов двоичного кода на обратное (toggle). Они могут также использоваться для проверки кодов на совпадение.

К командам поразрядной обработки информации можно отнести команды циклического сдвига влево и вправо, работающие с 8 битами (накопитель) или с 9 битами (накопитель + бит переноса):

RL А

RR А

RLC А

RRC А

Первая буква в мнемокодах этих команд означает Rotate (поворачивать), вторая указывает на направление (Left или Right), а третья — на участие бита переноса. При сдвиге влево во все биты накопителя кроме самого младшего записывается старое содержимое соседнего правого бита. При сдвиге вправо во все биты накопителя кроме самого старшего запи­сывается старое содержимое соседнего левого бита. Если бит переноса не участвует в операции циклического сдвига, то при сдвиге влево в самый младший байт записывается старое содержимое самого старшего бита, а при сдвиге вправо в самый старший байт записывается старое содержи­мое самого младшего бита. При участии бита переноса его содержимое включается в цепочку циклического переноса, что позволяет осуществ­лять сдвиги содержимого многобайтовых кодов. К операции циклическо­го сдвига на 4 разряда без участия бита переноса можно отнести команду

SWAP A

Она осуществляет обмен полубайтов содержимого накопителя, так что ее можно интерпретировать как сдвиг младшего полубайта на 4 разряда влево и сдвиг старшего полубайта на 4 разряда вправо.

Если перед выполнением команды сдвига очистить бит переноса, то сдвиг с участием этого бита может использоваться в качестве команды арифметической операции. Сдвиг вправо соответствует делению положи­тельного числа на 2, притом в бит переноса записывается остаток от деления. Сдвиг влево соответствует умножению положительного числа на 2, притом 1 в бите переноса сигнализирует о переполнении.