Se parece a un multiplicador de tipo clásico de cambio y adición. Una explicación adecuada requeriría una gran cantidad de diagramas, que lamentablemente no puedo proporcionar en este momento. En pocas palabras, si está multiplicando A por B, comienza con un registro de 'acumulador' puesto a cero. Luego, coloca A en un registro de desplazamiento y realiza iterativamente lo siguiente: desplaza A a la izquierda un lugar y observa el bit que cae; si es un '1', entonces agregue B al acumulador, de lo contrario, no agregue B. Si quedan más bits en A, desplace el acumulador a la izquierda un lugar y repita. Si A y B son valores de 32 bits, habrá 32 iteraciones de este desplazamiento y acumulación. Tenga en cuenta también que, como se incluirán 32 turnos, el acumulador debe ser de 64 bits, para adaptarse al resultado.
Una optimización que a veces se ve es usar los 32 bits altos del acumulador para mantener el valor de A; para cuando se necesite un bit dado en el producto acumulado, la parte restante del valor de A se habrá eliminado. Esto solo reduce el almacenamiento necesario en la implementación, pero conceptualmente se llevan a cabo los mismos cálculos.
Es posible que haya derribado un detalle en esa apresurada explicación, pero su idea básica debería estar allí.