Description Introduction to Computing Systems: From Bits & Gates to C/C++ & Beyond is built on the premise that students learn best by building on what they already know, rather than memorizing and accepting what they do not know. The result: a bottom-up approach to understanding computing, giving students a strong foundation in important aspects of computing early in their coursework.
The book is structured in two parts: (a) understanding how a computer works (Chapters 1-10), and (b) programming in a high-level language (Chapters 11-20).
Starting with the switch-level behavior of a MOS transistor (not unlike the switch-level behavior of a light switch in one's kitchen), the student constructs logic gates, then MUXes, Decoders, ALUs, latches, flipflops, culminating in memory and finite state control. Each step of the way, the level of abstraction is raised, with the student understanding how he/she put the current step together. From there, it is a simple matter to define the LC-3, a computer that the student programs in both machine language and assembly language, and then tests and debugs his/her programs with little or no help from the TA! Input and output (VO) are done under both program control and via interrupts, through keyboard and monitor, requiring the student to communicate through device data and status registers. Finally, the student invokes system calls, which are implemented in the LC-3 instruction set architecture.
The second half of the book focuses on high-level language programming in C and C++ and programming methodology. The essential core of C and C++ is taught, including pointers, arrays, recursion, data structures, objects, and object inheritance. All constructs are explained using the context of the LC-3, developed in the first half of the book. By reducing high-level constructs into low-level implementation in the LC-3, students are able to grasp advanced programing concepts such as function calls, dynamic memory allocation, and objects much more quickly and proficiently.
The LC-3 Simulator-Central to student learning is hands-on access to the LC-3 Simulator, which has been overhauled for use in the third edition. The new version can be used on Linux, Windows, and MacOS platforms, while providing a common graphical interface to the user. New tools have been provided for ease of use by both students and instructors.
Debugging-This critical feature has been improved, giving students an easier hands-on experience testing and re-testing their programs as needed until the program runs correctly. We strongly believe that students learn best by "doing" and the Simulator enables exactly that.
Programming Methodology-Students are provided with numerous reworked and revised examples on how to take a problem and transform it into a computer program via systematic decomposition. Students gain exposure to the fundamental similarities in programming, whether it be in the LC-3, C or C++, which provides the student with the useful ability to quickly understand other programming languages.
Addition of C+--The common core concepts of C and C++ are introduced in Chapters 11 through 19, with Chapter 20 transitioning into important concepts in C++.
Table of Contents
1 Welcome Aboard
2 Bits, Data Types, and Operations
3 Digital Logic Structures
4 The von Neumann Model
5 The LC-3
6 Programming
7 Assembly Language
8 Data Structures
9 I/O
10 A Calculator
11 Introduction to C/C++ Programming
12 Variables and Operators
13 Control Structures
14 Functions
15 Testing and Debugging
16 Pointers and Arrays
17 Recursion
18 I/O in C
19 Dynamic Data Structures in C
20 Introduction to C++
Appendix A The LC-3 ISA
Appendix B From LC-3 to x86
Appendix C The Microarchitecture of the LC-3
Appendix D The C Programming Language
Appendix E Useful Tables
Appendix F Solutions to Selected Exercises