Introduction to Computing Systems by Yale N. Patt & Sanjay J. Patel