1
МИКРОКОНТРОЛЛЕРЫ
і
adc
%a2
; Распространить перенос на следующий байт суммы
adc
%a3
; Распространить перенос на следующий байт суммы
add
%a2,%a6
Сложить следующие байты чисел.
adc
%a3
; Распространить перенос на следующий байт суммы
add
%a3,%a7
; Сложить следующие байты чисел.
В некоторых микроконтроллерах в системе команд существует специальная команда “сложить два числа и флаг
переноса”. С применением такой команды сложение четырехбайтных чисел выглядело бы так:
add
%а0,%а4
Ссложить два числа и флаг>
%а1,%а5
<сложить два числа и флаг>
%а2,%а6
<сложить два числа и флаг>
%аЗ,%а7
Как видите, с такой командой сло-
жение многобайтных чисел намного
упрощается, но, к сожалению, в сис-
теме команд микроконтроллера
КР1878ВЕ1 подобная команда отсут-
ствует.
И, наконец, для того, чтобы вычесть
два многобайтных числа, необходимо
во всех вышеприведенных примерах
заменить команду
add
на команду
sub,
команду
adc
- на
sbc.
Если подобные
операции встречаются в программе
А
not
%al
not
%а0
addl
%а0,1
adc
%al
достаточно часто, целесообразно
оформить их в виде подпрограмм (для
экономии программного кода).
Изменение знака
многобайтного числа
Иногда при программировании воз-
никает необходимость изменить знак
числа. Для изменения знака одно-
байтного числа в микроконтроллере
КР1878ВЕ1 существует специаль-
ная команда
пед.
Если же требуется
изменить знак многобайтного числа,
поступают в соответствии с формулой,
которая уже приводилась в одной из
предыдущих статей цикла, а именно:
-х = (not х) +
1
т.е. для изменения знака числа необ-
ходимо .вначале инвертировать все
биты числа, а затем к полученному ре-
зультату прибавить единицу. Для двух-
байтных чисел это делается следую-
щим образом (предполагается, что чис-
ло находится в ячейках
%а0, %а1):
; Инвертировать биты старшего байта.
; Инвертировать биты младшего байта.
; Сложить младший байт с единицей.
; Распространить перенос на старший байт.
Обратите внимание - в этом примере команды
not %aO/addl %а0,1
заменить командой
пед нельзя,
потому что в
случае ненулевого результата она
всегда устанавливает
флаг переноса, что для данного примера является совер-
шенно недопустимым.
Аналогичным образом, для четырехбайтного числа знак изменяют следующим образом:
not
%a0
; Инвертировать биты младшего байта.
not
%al
; Инвертировать биты следующего байта
not
%a2
; Инвертировать биты следующего байта
not
%a3
; Инвертировать биты старшего байта.
addl
%a0,1
; Сложить младший байт с единицей.
adc
%al
; Распространить перенос на следующий байт
adc
%a2
; Распространить перенос на следующий байт
adc
%a3
; Распространить перенос на старший байт.
Если подобные операции встречаются в программе достаточно часто, целесообразно оформить их в виде под-
программ (для экономии программного кода).
Сравнение
многобайтных чисел
Наиболее простой способ реализации
сравнений- вычесть одно число из дру-
гого, и затем проанализировать резуль-
тат. Старший бит последнего байта
даст нам знак (т.е. эквивалент флага
Э), а для проверки на равенство проще
всего выполнить команду
от
над всеми
байтами результата
(см. скачанный при-
мер) -
если числа одинаковы, разность
их даст ноль, что легко обнаруживает-
ся с помощью команды
от.
Умножение
многобайтных чисел
Команд умножения чисел в системе
команд большинства микроконтрол-
леров нет, а там, где эта команды ре-
ализованы, они работают, как прави-
ло, с однобайтными числами. Из
школьного курса арифметики боль-
шинство читателей, думается, помнит,
что команду умножения можно заме-
нить командами сложения: например,
для умножения какого-либо числа на
5 достаточно пять раз сложить его с
----------------------------------------------1 39
Радиолюбитель - 03/20061
предыдущая страница 38 Радиолюбитель 2006-03 читать онлайн следующая страница 40 Радиолюбитель 2006-03 читать онлайн Домой Выключить/включить текст