Introduction to microprocessors: software, hardware, programming