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

Глава 8. Арифметические операции и операции в двоично-десятичном формате 21 1 ну а на уровне ассемблера десятичные преобразования приходится делать, что называется, ручками . ЗАМЕТКИ НА ПОЛЯХ Традиционная область применения команд двоично-десятичной коррекции , в том чис­ ле и в процессорах х86, - манипуляции со значением времени , полученным из мик­ росхем часов реального времени RTC , в которых часы , минуты и секунды традицион­ но хранятся в упакованном ВСD-формате. Как вы увидите далее, такой формат хра­ нения вполне удобен на практике. Однако область применения микроконтроллерных систем далеко не исчерпывается подсчетом и демонстрацией времени , потому нам придется выйти за рамки однобайтовых кодов , для которых, собственно, инструкция коррекции и создавалась. Уже для двухбайтовых чисел ее применение вызывает только лишние сложности . В области ВDС-преобразований есть четыре основные задачи : LJ упаковка распакованного и распаковка упакованного формата BCD; LJ преобразование двоичного/шестнадцатеричного числа ' в упакованный ВСD-фор­ мат; LJ распаковка упакованного ВСD-формата для непосредственного представления десятичных чисел, например, с целью их вывода на дисплей; LI обратное преобразование упакованного ВСD-формата в двоичный/шестнадцате- ричный с целью, например, произведения арифметических действий над ним . Некоторые процедуры для работы с BCD приведены в фирменной Appl ication notes AVR204 . Она также доступна в архиве по адресу, указанному во введении. Однако пользоваться процедурами упаковки и распаковки оттуда для самых простых слу­ чаев я не советую - они там чересчур усложнены и непредсказуемы по длительно­ сти. Упаковка двух отдельных десятичных чисел вообще делается в две команды (листинг 8 . 1 О) . ; Упаковка распакованного В-разрядного BCD ; BCD - в datal : data O , выход - dataO swap datal ; меняем тетрады местами в старшем or dataO , datal ; складываем Распаковку выполнить также несложно применением битовой маски поочередно к обоим тетрадам байта (листинг 8 . 1 1 ) . ; Распаковка упакованного В-разрядного BCD ; BCD - в data , выход - datal : dataO

RkJQdWJsaXNoZXIy MTExODQxMg==