Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизАлгоритм деления Найти похожие ветки
← →
Skywalker (2002-06-27 12:13) [0]Кто-нибудь знает алгоритм деления двоичных чисел??
← →
Виктор Щербаков (2002-06-27 12:15) [1]Столбиком.
← →
Digitman (2002-06-27 13:04) [2]а что ты под "двоичным числом" подразумеваешь ?
← →
alxx (2002-06-27 13:09) [3]101101 | 10
- ------
10 |10110
-----
011
-
10
-----
10
10
-----
01
-----------------------------
101101/10 = 10110 и остаток 1
← →
AFROLOV (2002-06-27 13:56) [4]Например тот, которому всех учили в школе. Ты его здесь и воспроизвел.
← →
Skywalker (2002-06-27 13:59) [5]2 alxx> это тож сгодится на будущее :)
но меня интересует как это реализовано машинно...
может кто лазил в дебри ассемблера?
← →
AFROLOV (2002-06-27 14:02) [6]Или если числа небольшие, то из битовой формы переводим числа a и b в стандартный тип (например Int64). Делим a/b=с - резултат имеет тип Int64= искомому результату деления. Остаток =a-b*c.
← →
Digitman (2002-06-27 14:03) [7]>Skywalker
Инструкции DIV, IDIV, FDIV и иже с ними.
И что это тебе дает ?
← →
Виктор Щербаков (2002-06-27 14:04) [8]
> может кто лазил в дебри ассемблера?
Дык это в камень надо лезть а не в ассемблер.
← →
Skywalker (2002-06-27 14:08) [9]2 Dijitman
это связано с моим предыдущем вопросом о функции ldiv в билдере, которая не смотря ни на какие аргументы выдает 32-битный результат...
вот я и хочу реализовать 64-битный аналог этой функции
IDIV надеюсь работает с расширенными регистрами?
← →
AFROLOV (2002-06-27 14:15) [10]В процерах, помоему, стандартная операция зашитая в железо имеется.
← →
Digitman (2002-06-27 14:46) [11]Причем здесь расширенные регистры ? Они тоже - 32-разрядные ...
Как и макс.размер операндов инструкций DIV, IDIV ...
А целочисленные 64-разр. мат.операции для CPU, не имеющих соотв.встроенную поддержку, всегда эмулируются программно - иного выхода просто нет.
Посему открываешь файл _ll.asm (станд.поставка Делфи) и изучаешь, как это делается, например, в след.процедурах :
__lldiv (signed longlong division)
__lldivo (signed longlong division with overflow control)
все ж под рукой ! готовое причем ! )
и локализуется - заметь, как и все прочие "непонятности" - пошаговой трассировкой (с использованием окна CPU) простейшего кода :
var
a, b, c: Int64;
...
a:= $20000000000;
b:= $2;
c:= a div b;
showmessage(inttohex(c, 16));
← →
Skywalker (2002-06-28 12:34) [12]поскольку у меня идет деление на 2 то я сделал все проще
Quat=Num>>1; //это целая часть
Rem=Num-Quat*2 //это остаток
← →
oleg_d (2002-06-29 11:33) [13]ну если ты о том делении что я думаю, так это существует множество машинных алгоритмов работы с двоичными числами, которые реализованы внутри самих железяк.
А это тебе надо посмотреть материалы по микропрограммированию.
Но сложноватая штука.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c