Читайте также:
|
|
В ранее рассмотренных командах обработки информации кодирование содержимого отдельных битов байта не имело значения. В арифметических операциях нужно придерживаться строго определенных правил записи данных в соответствии с порядковыми номерами разрядов двоичного кода. В связи с ограниченными ресурсами микроконтроллера в нем используются только четыре арифметических операции с целыми числами. Отступления от правил кодирования приводят к неправильному выполнению арифметических операций.
В одном байте может быть закодировано 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».
Дата добавления: 2015-07-20; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Группа логических команд | | | Группа команд управления |