ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
4 декабря
1428912 Топик полностью
Boвa (22.04.2024 16:36 - 16:39, просмотров: 181) ответил LightElf на Ну, то есть, интеля от шедрот потратили 64К ПЗУ на умножитель, но на память программ (масочную) выделили только 4К?
Если пользоваться формулой a*b = ((a+b)^2 - (a-b)^2)/4 , упорядочить а b, учесть случаи разной и одинаковой четности множителей, то необходимо - 256 слов по 16 бит = 512 байт. 

Упорядочим множители так чтобы a>=b.
Если a+b - четно, то и a-b тоже четно, поэтому сумма и разность оканчиваются на 0 (в двоичной записи) и есть только 8 значащих разряда в аргументе функции возведения в квадрат. В таком случае можно записать

a*b = (((a+b)/2)^2 - ((a-b)/2)^2)

Если a+b - нечетно, то a+b+1 и a-b+1- четно и оканчивается на 0 (в двоичной записи) и опять есть только 8 значащих цифр в аргументе функции возведения в квадрат. Тогда произведение легко считать по формуле

a*b = ((a+b+1)/2)^2 - ((a-b+1)/2)^2)-b

Так как необходимо только 8 значащих цифр в аргументе функции возведения в квадрат сама таблица квадратов должна иметь не больше 256 разных записей по 16 бит.

Еще можно отдельно отрабатывать умножение на 0 и степени двойки.

Иди перейти к умножениям тетрадами, что дает таблицы в 16 слов по 8 бит = 16 байт.