"РЛ" - НАЧИНАЮ Щ ИМ
1
-
исключительно положительные це-
лые). Если требуется реализовать
арифметику с учетом знака числа
-
это надо делать программнок
Ком анды
сл ож ен ия
ADD и
ADDC. Первый операнд - всегда
аккумулятор, второй - один из 4-х
вариантов, как сказано ранее. Вы-
полняет арифметическое сложение
значений операндов и пом ещ ает
результат в аккумулятор. Если ре-
зультат оказывается больше 255 -
устанавливается ф лаг СУ, а в а к-
кумулятор помещаю тся только 8
младших бит этого результата.
В аж н ое прим ечание. Так как в
результате сложения любых байтов
невозм ож но получить значен и е
большее, чем 512, то для хранения
полного результата сложения д ос-
таточно 9-и битов. Это позволяет
рассматривать флаг C Y как расш и-
рение аккумулятора - хранилище
дополнительного 9-го бита.
В отличие от команды ADD, ко-
манда ADDC производит сложение
с учетом значения ф лага СУ. Из
арифметики вы знаете принцип по-
разрядного сложения чисел: по-
мните, 3 пишем, 2 на ум пошло?
Так вот, флаг С У как раз и являет-
ся тем самым “умом” © , на который
идет бит переполнения разряда,
который надо учесть при сложении
со следующим разрядом. Система-
то двоичная, поэтому на “ум” у нас
может пойти только 1 © . Если мы
производим сложение многобайт-
ных чисел, это приходится делать
побайтно, т.е. сначала складываем
младшие байты командой ADD, а
затем - все более и более старшие,
но уж е командой ADDC, которая
учтет пошедшую “на ум” единицу,
если/она появилась при сложении
предыдущих байтов.
Команда вычитания всего одна -
SUBB, причем зта команда
всегда
учитывает значение флага С У (сно-
ва тот самый “ум”, на который идет
занимаемая из следующего разря-
да единица). Команда так и назы-
вается:
вычитание
с
учетом заем а
(или займа - как там по-русски? ©).
При использовании команды SUBB
следует пом нить, что значение
ф лага С У используется ею всегда,
а значит перед ее применением
надо быть точно уверенным, что СУ
содержит
корректное значение.
INC - команда увеличения опе-
ранда на 1, a DEC - команда умень-
шения операнда на 1. Их главное
отличие от команд, рассмотренных
выше, в том, что эти команды не
меняют содержимое регистра фла-
гов PSW . Кроме того, эти команды
занимаю т в памяти 1 байт. Особо
выделю команду увеличения указа-
теля INC DPTR - это единственная
команда, работающая сразу с 16-
битным числом! Напомню, что в на-
шем микроконтроллере регистров-
указателей два: DPTR0 и DPTR1,
но синтаксис этой команды всегда
одинаков (как показано в таблице 9),
а реально используемый указатель
определяется значением бита DPS
регистра W M CO N, уже упоминае-
мому мною ранее, но снова откла-
дываемому на потом © .
Команда MUL АВ осуществля-
ет
умножение
содержимого акку-
мулятора на содержимое вспомо-
гательного регистра В И помещает
результат (он может быть 16-бит-
ным!) обратно в эти ж е регистры: в
аккумулятор младший байт резуль-
тата, а в регистр В - старший. Ко-
манда DIV АВ выполняет
деление
содержимого аккумулятора на со-
держимое вспомогательного реги-
стра В и помещает результат в а к-
кумулятор, а
остаток
от деления
(не забывайте, все операции цело-
численные, т.е. никаких дробных
значений!) - в регистр В. Если про-
исходит попытка деления на 0 - ус-
танавливается ф лаг OV.
Команды умножения и деления
- самые “долгие” команды, они вы-
полняются целых 4 машинных так-
та, но ведь и делают немало, со-
гласитесь!
Н ебольш ое отступление. К о -
м анды ум но ж ени я и д ел е н и я
-
весьма большая редкость в 8-раз-
рядных микроконтроллерах. В се-
мействе M C S 51 они были и зн а-
чально, т.е. более чем 20 лет на-
зад, а в микроконтроллерах других
семейств подобные команды по-
явились лишь недавно.
Команда DA - это команда
д е-
сятичной коррекции результата.
Ис-
пользуется она при работе с числами
в так называемом
двоично-деся-
тичном
(BC D) формате, актуаль-
ность которого мне представляет-
ся сомнительной.
Д алее в таблице 9 следуют ко-
манды логических операций. Вы
видите, что логические операции
могут осуществляться как над
от-
дельными битами
(строки 43.
..46
таблицы ), так и
байтами
(строки
25.
..42 таблицы). В последнем слу-
чае можно считать, что одновремен-
но выполняется 8 одинаковых ко-
манд над каждым из битов байта.
ANL - команда логического И.
Для работы с байтами результат
работы команды может быть поме-
щ ен как в аккум улятор, так и
в
я ч е й ку памяти
(прямо ад ресуе-
мую). При работе с ячейкой памя-
ти в качестве операнда-приемника '
результата следует учесть два фак-
та: во-первых, вторым операндом
в этой команде может быть только
аккумулятор или константа, а во-
вторых, при обращении к порту вво-
да-вывода, как к'ячейке памяти,
операция выполняется в режиме
чтение-модификация-запись.
Кста-
ти, эти две особенности характер-
ны для всех байтовых логических
команд, рассматриваемых далее.
Если команда ANL использует-
ся для работы с отдельным битом,
то в качестве первого операнда ис-
пользуется битовый аккумулятор
СУ, а вторым может быть
прямое
или
инверсное
значение указанно-
го во втором операнде бита. То
есть при пом ощ и команды ANL
можно реализовать либо функцию
CY = СУ and Bit, либо СУ = СУ and
(not Bit). Для второго случая перед
указанием адреса (или метки) бита
указывается символ
Такой под-
ход реализован и во второй логичес-
кой команде, работающей с битом:
ORL. Это команда логического ИЛИ.
Результат работы этой функции оп-
ределяется формулами СУ = CY or
Bit или СУ = CY or (not Bit), анало-
гично ранее рассмотренной.
O RL для байта выполняет ана-
логичную функцию для всех битов
битов-операндов.
X R L - команда И С К Л Ю Ч А Ю -
Щ ЕЕ И Л И , сущ естбует только в
байтовом варианте. В результате
----------------------------------------------------------------
59
Радиолюбитель -
04/2007
О
предыдущая страница 59 Радиолюбитель 2007-05 читать онлайн следующая страница 61 Радиолюбитель 2007-05 читать онлайн Домой Выключить/включить текст