Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Деление двухбайтовых чисел в ASM51  (Прочитано 13977 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
S_EY
Гость
« : 31-05-2005 09:11 » new

Ни  у кого нет исходника и алгоритма для обеспечения наибольшей скорости при делении двухбайтовых чисел!???

Заранее спасибо
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 31-05-2005 12:56 » 

Вычитание со сдвигом: число итераций равно разрядности делимого.
Возможно обрабатывать операнды любойдлины, если хранить их в пямяти.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
S_EY
Гость
« Ответ #2 : 31-05-2005 13:26 » 

Видимо из меня программер никакой:)Поскольку мне нужен исходник:)Примерный то алгоритм я знаю,а как реализовать в АсМ51 не знаю!Мне Пакаль и Си ближе:(
Записан
LP
Помогающий

ru
Offline Offline

« Ответ #3 : 31-05-2005 13:29 » 

Ни у кого нет исходника и алгоритма для обеспечения наибольшей скорости при делении двухбайтовых чисел!???
Еще существует такой алгоритм (вроде-как считается быстрым):
Допустим мы имеем два числа: делимое 0010111001101010 и делитель 0000000000101000
(1)заведем переменную index равную 0000000000000001 и result=0
(2)сдвигаем делитель и index влево пока старший бит делителя не поравняется со
старшим битом делимого, т.е. получаем
делитель=0010100000000000, index=0000000100000000
(3)вычитаем из делимого полученный делитель:
_  0010111001101010
   0010100000000000
----------------------
    0000011001101010
(4)если поученное число <0, то сдвигаем делитель и index вправо на 1 разряд и переходим
к 3-му пункту. А если >0 (как у нас), сразу идем дальше.
(5)Число полученное при вычитании используем в качестве делимого.
(6)result=result+index(0000000100000000)
(7)сдвигаем делитель и index на 1 разряд вправо
(8)goto (3) пока не получим отрицательный результат вычитания,
тогда в переменной result будет частное от целочисленного деления.
« Последнее редактирование: 31-05-2005 14:27 от LP » Записан

Если эта надпись уменьшается, значит ваш монитор уносят
S_EY
Гость
« Ответ #4 : 31-05-2005 13:34 » 

Так алгоритм я понял:)Спасибо!Наглядно все объяснил:)С меня бутылка
сейчас программы помучаю!Но если вдруг у кого есть программный код....буду очень признательным:)
Записан
S_EY
Гость
« Ответ #5 : 01-06-2005 12:17 » 

А не подскажите еще как мне осуществить проверку попадает у меня число из ячеек,скажем R4,R5. в диапазон.....например от 0,01 до 1?:)Соответсвенно диапазон в 10ой форме:)
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 01-06-2005 14:27 » 

S_EY, где ты видел в 8051 действительные числа?
Конечно можно условится, что содержимое регистра представляет диапазон 0..2.55, а не 0..255.
Тогда и сравнее соотв.: 100 <= R4 + 255 * R5 <= 1
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines