On the optimization of control memory and data paths in the design of microprogrammed computers and microprocessors