Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
ГЛ А В А 8 Арифметические операции и операции в двоич но-десятич ном формате Как мы уже говорили, выполнение арифметических операций в 8-разрядном МК связано с некоторыми трудностями, т. к. размер операндов простого сложения или вычитания ограничен целым значением 255 (или, для чисел со знаком, значением от - 1 28 до + 1 27) . А если учитывать, что результат этих операций (не говоря уж об умножении или делении) может легко выйти за пределы восьми разрядов, то огра ничения становятся еще сильнее. Поэтому для работы с мн о горазрядными и веще ственными числами приходится изобретать разные приемы, а для этого необходи мо, как минимум, вспомнить школьную арифметику, и не только ее. ЗАМЕТКИ НА ПОЛЯХ Арифметические операции с многоразрядными числами наряду с их преобразованием в ВСD-формат для индикации (см . далее) - самое узкое место в практическом при менении АVR-ассемблера . Именно такие процедуры служат основанием для утвер ждений , что ассемблерные программы разрабатывать очень долго и муторно. Если каждый раз составлять такие процедуры «с нуля» , то это мнение будет совершенно оправданным: то, что в языке Aгdui пo спрятано в функциях, выполняющихся в один оператор, здесь иногда приходится «размазывать» на несколько десятков команд. Обратите внимание: самая долгая операция в Aгduino - деление чисел типа long - выполняется примерно за 670-680 тактов, и вы поймете, сколько всего упаковано в такие на вид простые операторы . Но не так страшен черт, как его малюют, - по скольку мы здесь вольны делать с кодом все , что угодно, то совершенно необязатель но применять все такие процедуры в общем виде. Если постараться и заранее рас смотреть наиболее часто встречающиеся частные случаи , то можно соорудить некую «библиотеку» операций , которые будут значительно ускорять разработку ассемблер ных программ. Конечно, это не настоящая программная библиотека - просто образцы проведения типовых операций , которые можно переносить в свою программу. Эта глава и посвящена рассмотрению примеров для подобной «библиотеки» , которые мы будем не раз использовать в дальнейшем . Подумаем сначала: а с какими числами приходится работать на практике? Если го ворить о целых числах, то большинство реальных нужд вполне укладывается в трехбайтовое значение (2 2 4 или 1 6 777 2 1 6) . Этот же диапазон дает достаточное для практики значение точности (семь десятичных разрядов), большие числа обыч но округляют и записывают в виде «мантисса-порядок» . При этом следует учесть,
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==