Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Умножение двоичных чисел.


KEBZ ©   (2005-12-25 18:56:00) 

Уважаемые Мастера подскажите плиз: В чём заключается Особенности умножение двоичных чисел? зарание СПС


Набережных С.   (2005-12-26 21:06:00) [1]


> tesseract ©   (26.12.05 20:33) [17]


> Никто и не говорит об отсутсвии такого блока в АЛУ. Но в
> конечном итоге, это набор сумматоров, и если следить дальше
> дойдешь до набора компараторов :-).

Ну а если пойти еще дальше, то дойдем до И-НЕ, вентилей, транзисторов, p-n переходов и т.д.:)))
[16] написано по поводу вот этого: "ты сказал  что процессор умеет умножать, а я говорю что нет". Я и описал, как может быть устроен встроенный умножитель, выполняющий умножение без внешней помощи, за один такт. Если такое устройство в процессоре есть, то это и значит, что процессор "умеет умножать", а не заменяет умножение последовательностью сдвигов и элементарных суммирований. Хотя практически в процессорах реализуется комбинированная схема. Если правильно помню, в Pentium команда MUL R8 выполнялась за 4 такта, а в поздних еще меньше, но там уже по-другому считать надо. А перемножает она два 8-миразрядных числа.

> Да и неспроста операции умножения рекомендуется заменить
> сложением или сдвигом. Приходится ведь задействавать  сопроцессор
> что тормознее.

Самое быстрое умножение - через сопроцессор с использованием родного для него типа Double - при сравнимой точности, разумеется.

Но это все-таки оффтоп, давай закруглимся, ага?


tesseract   (2005-12-26 20:33:00) [2]


> При умножении происходит выравнивание мантис, потом все
> как с целыми числами.


Я неправильно выразился :-) Выполняется действие, потом отделяется дробная часть.


> Это сильная фраза...мне всегда казалось что данные передают
> регистры или триггеры(что в принципе одно и тоже)...


Триггеры данные не передают - они их хранят. А регистры это аппаратно триггеры с разрядностью равной разрядности процессора.  А данные надо подать на аппаратную часть, равную разрядности процессора. Если данные не сооветсвую разрядности АЛУ, то их надо преобразовать. Отсюда проблема 4-байтного выравнивания до разрядности (напр чтобы байт стал именно байтом, а не int32 его надо засунуть в packed record) дабы процессор не трудился разбивая последовательность байт+int16+int32+байт  по регистрам.


> Как-то примерно так, если не забыл чего. Засунуть нечто подобное в
> микропроцессор - дело несложное.


Никто и не говорит об отсутсвии такого блока в АЛУ. Но в конечном итоге, это набор сумматоров, и если следить дальше дойдешь до набора компараторов :-).

Да и неспроста операции умножения рекомендуется заменить сложением или сдвигом. Приходится ведь задействавать  сопроцессор что тормознее.


Набережных С.   (2005-12-26 20:06:00) [3]


> The_scorpion ©   (26.12.05 17:58) [13]


> Это проблемы программиста, но сказ был не о том, ты сказал
> что процессор умеет умножать, а я говорю что нет...устройство
> "умножеметр" мне не знакомо знаю только сумматор и регистры
> сдвига.

Первый воплощенный в железо "умножеметр" лично я увидел в году так 84м или 85м, но это не значит, что до того они не существовали, просто мне не попадались. Собран он был за 133-й серии из сумматоров и мультиплексоров. Перемножал 12-тиразрядное число на 4-хразрядное, двоичные, так от него требовалось. Сумматоры были включены каскадно, короткий сомножитель управлял мультиплексорами. Первый слой суммировал длинный сомножитель либо с собой, либо с нулем, в зависимости от младшего разряда короткого. Второй слой - результат первого слоя либо со сдвинутым и дополненным справа нулями длинным, либо опять с нулем. И так далее. Умножал за один такт, правда частота была 3 МГц, но это ограничение микросхем. Как-то примерно так, если не забыл чего. Засунуть нечто подобное в микропроцессор - дело несложное.

> The_scorpion ©   (26.12.05 18:14) [14]


> Это сильная фраза...мне всегда казалось что данные передают
> регистры или триггеры(что в принципе одно и тоже)...

Есть такие микросхемы - цифровые компараторы, на вход подаются два числа, имеют обычно три выхода - больше, меньше, равно. Давно уже есть...
На вскидку - 555СП1


Игорь Шевченко   (2005-12-26 18:21:00) [4]


>  такой вот вапрос в метадички. гарю ва вторник нада здать


Не сдашь.


The_scorpion   (2005-12-26 18:14:00) [5]


> компаратор (один или несколько) которым на вход подают данные.

Это сильная фраза...мне всегда казалось что данные передают регистры или триггеры(что в принципе одно и тоже)...


The_scorpion   (2005-12-26 17:58:00) [6]


> команды MUL, IMUL ассемблера

Ты меня хочешь удивить?...:))) Думаешь я с ассемблером не знаком?...:)))


> там проц делает внутри, это его проблемы

Это проблемы программиста, но сказ был не о том, ты сказал что процессор умеет умножать, а я говорю что нет...устройство "умножеметр" мне не знакомо знаю только сумматор и регистры сдвига.


> ПТ сначала делятся на целую/дробную части

Это что-то новое в теории эвм.
При умножении происходит выравнивание мантис, потом все как с целыми числами.


evvcom   (2005-12-26 16:42:00) [7]


> Ты тему читал?

Читал. Только причем здесь тема? Эта ответвление спора пошло после фразы
> Аппаратно в процессоре реализован толькосумматор
А к теме естественно это не относится.


tesseract   (2005-12-26 16:11:00) [8]

>>to evvcom

> Что там проц делает внутри, это его проблемы, наверняка
> выполняет сдвиги и сложения, но в итоге умножает-то он сам,
>  а не алгоритм пользователя.


Ты тему читал?


> Особенности умножение двоичных чисел в ЭВМ - такой вот вапрос
> в метадички.


>>to  The_scorpion

Давно было не помню. Помню только что существует исключительно компаратор (один или несколько) которым на вход подают данные.


> , принцип умножения чисел с ПТ и целочисленных идентичен.


Не совсем. ПТ сначала делятся на целую/дробную части и обрабатываются в два прохода (в методичке 94г. про наш КР).

Вот эти операции сопроцессор и выполняет.


evvcom   (2005-12-26 13:17:00) [9]


> этого более чем достаточно

никто и не спорит, что этого не достаточно.

> ЦП не умеет умножать

А команды MUL, IMUL ассемблера (например, http://z80.msk.ru/nasmdoc/nasmdoca.html#section-A.107) это что по-твоему? Что там проц делает внутри, это его проблемы, наверняка выполняет сдвиги и сложения, но в итоге умножает-то он сам, а не алгоритм пользователя.


The_scorpion   (2005-12-26 12:33:00) [10]


> Судя по тому, что умножение у тебя выполняется набором сложений,
>  деление должно быть набором вычитаний.

И деление и умножение выполняется сложением + операции сдвига


The_scorpion   (2005-12-26 12:31:00) [11]


> ну а с ПТ сначала сопроцессор работал

Сопроцессор нужен только для перераспределения операций, принцип умножения чисел с ПТ и целочисленных идентичен.

> Ты про какой процессор говоришь? Интел давно умеет целочисленно
> умножать/делить, ну а с ПТ сначала сопроцессор работал,
> а потом и его встроили в МП.

ЦП не умеет умножать, он умеет только складывать и сдвигать, этого более чем достаточно для реализации умножения в качестве микро программы.


evvcom   (2005-12-26 10:41:00) [12]


> Умножение в машине выполняется н-м количеством сложения
> чисел. Т.К. Аппаратно в процессоре реализован только сумматор.

Ты про какой процессор говоришь? Интел давно умеет целочисленно умножать/делить, ну а с ПТ сначала сопроцессор работал, а потом и его встроили в МП.


wal   (2005-12-26 10:23:00) [13]


> Т.К. Аппаратно в процессоре реализован только сумматор.
Не уверен. Наверное помощней что-то.

> Для перевода чисел из двоично-десятичного кода в двоичный
> также присутствует Dec-корректор.
Не думаю, что кого-то сейчас интересует BCD на таком уровне.

> Про деление что-то забыл (ОЦС было 5 лет назад).
Судя по тому, что умножение у тебя выполняется набором сложений, деление должно быть набором вычитаний.

С уважением.


tesseract   (2005-12-26 10:18:00) [14]

ДА и  побитого умножить=И (and), побитого сложить=ИЛИ(Or).

Умножение в машине выполняется н-м количеством сложения чисел. Т.К. Аппаратно в процессоре реализован только сумматор.

Для перевода чисел из двоично-десятичного кода в двоичный также присутствует Dec-корректор.

Вычитание сложнее - вычитаемое следует предварительно перевести в обратный код. (см про сумматор).

Про деление что-то забыл (ОЦС было 5 лет назад).


evvcom   (2005-12-26 09:16:00) [15]

Ему еще потребуется сложение:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
Не правда ли, удивительно?


Джо   (2005-12-25 22:39:00) [16]

Таблица умножения для двоичных чисел выглядит след. образом:
0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1


KEBZ   (2005-12-25 19:10:00) [17]

Особенности умножение двоичных чисел в ЭВМ - такой вот вапрос в метадички. гарю ва вторник нада здать иначе не попаду на сваю 1рвую сесию :(


Fay   (2005-12-25 19:08:00) [18]

2 KEBZ   (25.12.05 18:56)
Не бывает двоичных чисел. Бывает только их двоичная запись.
В остальном - как в школе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо