Microprocessor Architecture and Microprogramming: A State Machine Approach