Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alex Astafiev                        2:5000/228.16  21 Jan 2002  11:43:28
 To : Pavel Fomin
 Subject : алгоpитмы пеpевода двоичного числа в двоично-десятичное
 -------------------------------------------------------------------------------- 
 
  PF> В свое время мне один человек присылал исходник для PIC16F84 с
  PF> просьбой разобраться. Здесь я приведу оригинальный исходник, а ниже
  PF> комментарии по алгоритму.
  DO>> замечания:
  DO>> очень мало места
  PF> Посмотри, может уложишься. Алгоритм быстрый и скорость практически не
  PF> зависит от значения числа.
  DO>> дополнительных. МК не умеет умножать и вычитать, тока складывает
  DO>> байты,
  PF> сдвиги он тоже наверняка понимает.
 
 []
 
  на весь этот программный сюр есть детальный ответ - читайте   ASM.TALKS
 ибо там на прошлой неделе был жаркий дебат о конверсии чисел.
 я давал универсальную функцию.
 все что нужно, заменить в ней AAA на DAA и длину буфера, не 20 а 10 байт.
 числа меньшей разрядности (не 64бита) поместятся в регистрах и никакого буфера
 для  BCD результата не нужно. Если на target - платформе нет DAA,
 то ее легко сэмулировать программно.
 
 Д TALKS.ASM (2:5000/228.16) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД TALKS.ASM Д
  Сооб : 53 из 171 -52                       Snt Loc Scn
  От   : Alex Astafiev                       2:5000/228.16   12 Янв 02  18:06:26
  Кому : Sashka Yackubtchick                                 12 Янв 02  19:55:30
  Тема : Умножение на 17 за 2а такта
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Hi Sashka..
 
  SY> есть чему у тебя поучится. Для затравки - вот простая идея, несколько
  SY> месяцев назад я искал универсальный и быстрый алгоритм для перевода
  SY> 64битного безнакового целого в символьную десятичную ASCIIZ
  SY> строку.
 
 Еще на ZX Spectrum я разработал следущий способ -
 
 необходимо два буфера, один в исходном формате, а второй - в формате в который
 необходимо конвертировать.
 
 Для того чтобы выполнить конверсию, необходимо исходный буфер,
 начиная со старшего бита побитно выдвигать, а во второй буфер - вдвигать,
 и при вдвигании каждого бита необходимо проводить коррекцию необходимого типа.
 
 вот работающая процедура   :
 ;    input: 64bit  edx:ebx
 ;    output char bufer 20 bytes
 ;    to form ascii-code add 0x30 to each byte
      mov ebx,$ffffffff        ; мл разряды
      mov edx,$7fffffff        ; ст разряды
      mov edi,offset buffer    ; очистка 20 байт
      mov ecx,20
      xor al,al
      rep stosb
 ------------сама функция---------------
 
      mov cl, 64               ; счетчик 64 бита
 @l1:
      shl ebx, 1               ; сдвиг edx:ebx
      rcl edx, 1
      mov edi,offset buffer
      mov ch,20                ; счетчик 20 байт
 @l2:
      mov al,[edi]             ; сдвиг кажд байта
      adc al,al                ; и ascii коррекция
      aaa
      mov [edi],al
      inc edi
      dec ch
      jnz @l2
      dec cl
      jnz @l1
      ret
 процедура носит иллюстративный характер и конечно, может быть соптимизирована
 для скорости.
 Из-за ее иллюстративности число возвращается наоборот, первый байт буфера
 младший разряд. Вместо aaa можно использовать команду daa, тогда число
 возвратится в упакованом BCD - виде. Для того чтобы получить ascii - строку,
 необходимо к каждому байту добавить 0x30 hex.
 Этим я, надеюсь, будет поставлена точка в вопросах конверсии между форматами.
 Искренне ваш,
 
 --- Alex Raider / Flash inc.
  * Origin: Alex Raider/ Flash inc. 1992-2002 (2:5000/228.16)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 алгоpитмы пеpевода двоичного числа в двоично-десятичное   Dmitry Oboukhov   17 Jan 2002 22:21:19 
 Re: алгоpитмы пеpевода двоичного числа в двоично-десятичное   Sergey Kovalev   18 Jan 2002 14:32:56 
 алгоpитмы пеpевода двоичного числа в двоично-десятичное   Dmitry Oboukhov   18 Jan 2002 19:14:14 
 Re: алгоpитмы пеpевода двоичного числа в двоично-десятичное   Pavel Fomin   18 Jan 2002 23:27:18 
 алгоpитмы пеpевода двоичного числа в двоично-десятичное   Alex Astafiev   21 Jan 2002 11:43:28 
Архивное /ru.algorithms/174643c4c1490.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional