Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к цифрам.doc
Скачиваний:
28
Добавлен:
06.05.2019
Размер:
2.08 Mб
Скачать

3.8. Группа арифметических команд

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

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

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

ADD A, #dat8

ADD A, Rn

ADD A, @Ri

ADD A, dat8

Мнемоника этой команды соответствует слову ADDition (сложение).

Для работы с числами, которые не могут быть представлены одним байтом, используется команда сложения, учитывающая перенос, полу­ченный при сложении предыдущей пары байтов:

ADDC A, #dat8

ADDC A, Rn

ADDC A, @Ri

ADDC A, dat8

С теми же операндами работают и команда вычитания с заемом:

SUBB A, #dat8

SUBB A, Rn

SUBB A, @Ri

SUBB A, dat8

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

Для увеличения, или уменьшения содержимого регистров на «1» существуют команды INC и DEC соответственно:

INC A

INC Rn

INC dat8

INC @Ri

DEC A

DEC Rn

DEC dat8

DEC @Ri

Команда INC работает и для двухбайтового регистра DPTR.

Команды уменьшения для работы с двухбайтовым форматом данных нет.

Результаты выполнения команд сложения и вычитания влияют на содержимое битов переноса, дополнительного переноса и переполнения в cлове состояния программы. Результаты выполнения команд увеличе­ния и уменьшения не влияют па содержимое слова состояния программы.

Команда умножения (MULtiplication) и деления (DIVision) работают при записи операндов в накопитель и регистр В, Для команды умножения порядок записи сомножителей в эти регистры не важен:

MUL АВ

Произведение имеет двухбайтовый формат. Младший байт произведения записывается в накопитель, а старший - в регистр В.

Для команды деления делимое должно быть записано в аккумулятор а делитель - в регистр В:

DIV AB

После выполнения команды в накопителе находится частное, а в регистре В - остаток. После выполнения команд умножения и деления в бит переноса заносится 0. Если старший байт произведения не равен нулю, то в байт переполнения заносится «1». При делении на 0 в байт переполнения также заносится «1».