Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава В. Арифмети ч еские операции и операции в двои чно-десятичном формате 215 сятичного числа. Примеры его использования для отображения чисел на дисплеях можно найти в главах 14 и 1 6. В архиве с примерами по адресу, указанному во введении, имеется файл (ari phmetic.asm) с текстами всех описанных здесь процедур, включая и Ьin2bcdl O . В конце файла также размещен весьма объемный пример процедуры Ьin2BCD2 4 , осуществляющей конвертацию чисел, выходящих за рамки 1 6-разрядного диапазо­ на, - такая, например, задача может возникнуть при конструировании многораз­ рядного счетчика или частотомера. Пример ограничивается диапазоном в 7 деся­ тичных знаков (9 999 999), т. е. исходное число будет укладываться в три байта (24 разряда). В целях универсальности на выходе получаются отдельно: неупако­ ванный (сразу для индикации) и упакованный десятичный формат. В примере упа­ кованное число сразу складывается в SRAM, но экономией регистров там не зани­ мались, и их требуется аж 1 4 штук. Сократить количество необходимых регистров (но при этом увеличить число команд) можно, если и исходное число, и все резуль­ таты сразу записывать в SRAM. Обратите внимание, что для экономии часть данных в этих процедурах размещает­ ся в регистрах из первой половины регистрового файла, которые обычно мы не ис­ пользуем из-за невозможности проведения операций с константами, также надо учитывать некоторые адреса в SRAМ, чтобы случайно что-то не испортить . Обе процедуры: Ьin2bcdl 0 и Ьin2BCD2 4 - сделаны на основе «фирменной» Ьin2BCD16 . Как и в других случаях, в текстах процедур сохранена часть оригинальных коммен­ тариев из исходной процедуры. Отрицательные и вещественные числа в МК Мы уже упоминали в начале главы о том, что отрицательными и действительными числами пользоваться по возможности не будем . Но ради общего образования надо представлять, что именно Arduino делает, когда мы задаем отрицательное число или тип данных float. Все сложности с этим вопросом возникают от того, что сам микропроцессор знает только целые двоичные числа размером, соответствующим его разрядности, и про все остальное приходится договариваться людям, которые его эксплуатируют. Они очень стараются, чтобы эти договоренности были едины­ ми и для внутреннего представления чисел в инструкциях процессора, и для ком­ пиляторов всех языков программирования, но по объективным причинам их нико­ гда не получается соблюсти до конца. П редставление отрицательных чисел Отрицательное число - это чистая абстракция человеческого разума, в природе никаких знаков минуса не существует. Потому их представление в понятном чело­ веку виде - предмет договора, не более. Правила, которым подчиняются отрица­ тельные числа в математике, - и есть такой договор, который позволяет непроти­ воречиво распространить на отрицательные числа почти все операции, которые

RkJQdWJsaXNoZXIy MTExODQxMg==