Easyelectronics.ru

Электроника для всех
Текущее время: 28 фев 2021, 02:46

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 18:07 
Только пришел
Аватара пользователя

Зарегистрирован: 31 июл 2011, 17:22
Сообщения: 20
Откуда: Астрахань
Доброго дня.
Есть некая переменная
Код:
      .DSEG
ICNT:   .byte    1

Допустим в ней число 0xA5 (165 в десятичной).
загоняю байты в регистры
Код:
      LDS   R16,ICNT

Вопрос.
как сделать так, что бы в регистры R17,R18,R19 поместились числа 0x01,0x06,0x05 соответственно ?
Понимаю что посредством деления с остатком, но как? Если не затруднит, приведите коротенький кусок кода на ASM...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 18:56 
Старожил

Зарегистрирован: 17 мар 2010, 01:41
Сообщения: 252
Код:
.include <m8def.inc>

.def   tmp = R16
.def   BCDH = R17               
.def   BCDL = R18               

            
      ldi r16, low(RAMEND)      
      ldi r17, high(RAMEND)
      out SPH, r17
      out SPL, r16


      ldi BCDL, 165
      rcall bin8toBCD            ; 165 / 10 = 16, 5 в остатке (едениц)
      mov r19, BCDL
      mov BCDL, BCDH            
      rcall bin8toBCD            ; 16 / 10 = 1 (сотни), 6 в остатке (десатков)

      rjmp PC

bin8toBCD:                     
      ldi tmp, 10               ; будем делить на 10
      ldi BCDH, -1            
BCD_loop:                     
      inc BCDH               ; считаем сколько раз отнимали 10
      sub BCDL, tmp
      brsh BCD_loop            ; переход если результат еще больше 0
      add BCDL, tmp            ; откат назад если результат <0

      ret




Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 19:05 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Поищите, я как то выкладывал различные деления без этих дурацких игр с вычитанием.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 19:15 
Только пришел
Аватара пользователя

Зарегистрирован: 31 июл 2011, 17:22
Сообщения: 20
Откуда: Астрахань
to notfreeuser спасибо большое!!! в копилку!
to THE BEAST поищу, полезно иметь несколько вариантов решений одной задачи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 20:45 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:55
Сообщения: 5601
Откуда: Уругвайская АССР
wofs писал(а):
Понимаю что посредством деления с остатком, но как? Если не затруднит, приведите коротенький кусок кода на ASM...

C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\avr204.asm

_________________
Без гнева и жестокости, сегодня Смерть взмахнёт косой, и ангел тайными дорогами мой милый Кубик унесёт с собой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 23:09 
Только пришел
Аватара пользователя

Зарегистрирован: 31 июл 2011, 17:22
Сообщения: 20
Откуда: Астрахань
to Горнист и вас благодарю.
p.s. еще нарыл такой способ:
Код:
;by singlskv (c)
;Input:  r16 - 8bit Binary
;Output: r18:r17:r16 unpacked BCD

    ldi     r17,164
    mul     r16,r17
    clr     r18
    lsl     r0
    rol     r1
    rol     r18
    lsl     r0
    rol     r1
    rol     r18
    inc     r1
    ldi     r16,10
    mul     r1,r16
    mov     r17,r1
    mul     r0,r16
    mov     r16,r1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно разбить число... ASM + AVR
СообщениеДобавлено: 08 мар 2012, 23:17 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:55
Сообщения: 5601
Откуда: Уругвайская АССР
Ещё есть нихонский дядька Элм Чен, к нему тоже иногда бывает полезно заглядывать в поисках алгоритмов. http://elm-chan.org/cc_e.html

_________________
Без гнева и жестокости, сегодня Смерть взмахнёт косой, и ангел тайными дорогами мой милый Кубик унесёт с собой.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: wyfinger


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB