基本信息
- 原书名:Introduction to Computing Systems: From bits & gates to C & beyond,Second Edition
- 原出版社: McGraw-Hill
- 作者: (美)Yale N.Patt, Sanjay J.Patel
- 丛书名: 经典原版书库
- 出版社:机械工业出版社
- ISBN:9787111197669
- 上架时间:2006-9-14
- 出版日期:2006 年9月
- 开本:16开
- 页码:632
- 版次:2-1
- 所属分类:计算机 > 计算机组织与体系结构 > 综合
教材

内容简介
计算机书籍
本书的目的是让学生在一进入大学校门的时候,就对计算科学有一个深入理解,为以后的课程打下一个坚实的基础。本书包括两方面的内容:计算机底层结构;高级语言编程及编程方法学。
本书阐述了LC-3体系架构的设计,并配套开发了LC-3模拟器供学生使用。为加深学生对编程及其方法学的理解,我们选用了C语言。本书采用了“驱动式”的自底向上方法,即先给学生一个整体结构,然后自底向上地建立起相关的知识。同样,在每个子单元中,也采用相同的驱动式教学方法。在每个学习阶段,都将基于之前已学的知识介绍新的概念。经验告诉我们,这种学习方法更多地强调理解而不是记忆。通过本书的学习,学生的理解能力将获得很大的提高,因为他们了解了逐步构建计算机的全部过程。
本书特色
·自底向上的组织:从最底层的MOS晶体管开关器件开始,然后是逻辑门、锁存器、逻辑结构(开关MUX、译码器、全加器、门锁存器等),最后将这些单元组成实现内存。之后,转至有限状态机控制、顺序电路的实现、冯·诺伊曼体系结构、一个简单的计算机(LC-3),以及LC-3的机器和汇编语言、C高级语言、递归等,最后是基本数据结构。
·调试技术:从写第一个程序开始,学生就被要求采用LC-3的调试工具和相关的调试技术。正因为如此,他们对编程艺术的体会更加深刻。
·LC-3模拟器:本书学习中的一个重要过程是亲自操作LC-3模拟器,这是一个专门为学生掌握主要计算机概念而设计的工具。学生可以从本书网站免费下载LC-3模拟器。
·编程方法学:本书给出了很多例程,其意义在于教会学生怎样分析问题,并通过系统的问题分解转换为计算机可编程的子问题。不论是使用LC-3汇编或C高级语言,编程思路上都存在相似性。这方面的理解和方法对快速掌握其他语言都存在帮助。
·本书网站:http://www.mhhe.com/patt2上提供了丰富的辅助阅读材料和教学资料。
作译者
Sanjay J.Patel 拥有密歇根大学计算机科学与工程博士学位,是伊利诺伊大学厄巴-—尚佩恩分校电子与计算机工程系助理教授。他的研究领域包括处理器微体系结构、计算机体系结构、高性能和可靠计算机系统等。...
目录
Preface to the First Edition
1 Welcome Aboard
1.1 What We Will Try to Do
1.2 How We Will Get There
1.3 Two Recurring Themes
1.3.1 The Notion of Abstraction
1.3.2 Hardware versus Software
1.4 A Computer System
1.5 Two Very Important Ideas
1.6 Computers as Universal Computational Devices
1.7 How Do We Get the Electrons to Do the Work?
1.7.1 The Statement of the Problem
1.7.2 The Algorithm
1.7.3 The Program
1.7.4 The ISA
1.7.5 The Microarchitecture
1.7.6 The Logic Circuit
1.7.7 The Devices
1.7.8 Putting it Together
前言
However, as we said in the preface to the first edition, this book will always be a "work in progress." Along with the accolades, we have received some good advice on how to make it better. We thank you for that. We have also each taught the course two more times since the first edition came out, and that, too, has improved our insights into what we think we did fight and what needed improvement. The result has been a lot of changes in the second edition, while hopefully maintaining the essence of what we had before. How well we have succeeded we hope to soon learn from you.
Helot Changes to the First Edition
The LC-3
One of the more obvious changes in the second edition is the replacement of the LC-2 with the LC-3. We insisted on keeping the basic concept of the LC-2: a rich ISA that can be described in a few pages, and hopefully mastered in a short time. We kept the 16-bit instruction and 4-bit opcode. One of our students pointed out that the subroutine return instruction (RET) was just a special case of LC-2's JMPR instruction, so we eliminated RET as a separate opcode. The LC-3 specifies only 15 opcodes--and leaves one for future use (perhaps, the third edition!).
We received a lot of push-back on the PC-concatenate addressing mode, particularly for branches. The addressing mode had its roots in the old PDP-8 of the mid- 1960s. A major problem with it comes up when an instruction on one page wants to dereference the next (or previous) page. This has been a major hassle, particularly for forward branches close to a page boundary. A lot of people have asked us to use the more modern PC+offset, and we agreed. We have replaced all uses of PC'offset with PC+SEXT(offset).
We incorporated other changes in the LC-3. Stacks now grow toward 0, in keeping with current conventional practice. The offset in LDR/STR is now a signed value, so addresses can be computed plus or minus a base address. The opcode 1 t01 is not specified. The JSR/JMP opcodes have been reorganized slightly. Finally, we expanded the condition codes to a 16-bit processor status register (PSR) that includes a privilege mode and a priority level. As in the first edition, Appendix A specifies the LC-3 completely.
Additional Material
Although no chapter in the book has remained untouched, some chapters have been changed more than others. We added discussions to Chapter 1 on the nature and importance of abstraction and the interplay of hardware and software because it became clear that these points needed to be made explicit. We added a full section to Chapter 3 on finite state control and its implementation as a sequential switching circuit because we believe the concept of state and finite state control are among the most important concepts a computer science or engineering student encounters. We feel it is also useful to the understanding of the von Neumann model of execution discussed in Chapter 4. We added a section to Chapter 4 giving a glimpse of the underlying microarchitecture of the LC-3, which is spelled out in all its detail in the overhauled Appendix C. We were told by more than one reader that Chapter 5 was too terse. We added little new material, but lots of figures and explanations that hopefully make the concepts clearer. We also added major new sections on interrupt-driven FO to Chapters 8 and 10.
Just as in the first edition, Chapters 11 through 14 introduce the C programming language. Unlike the first edition, these chapters are more focused on the essential aspects of the language useful to a beginning programmer. Specializod features, for example the C switch construct, are relegated to the ends of the chapters (or to Appendix D), out of the main line of the text. All of these chapters include more examples than the first edition. The second edition also places a heavier emphasis on "how to program" via problem-solving examples that demonstrate how newly introduced C constructs can be used in C programming. In Chapter 14, students are exposed to a new LC-3 ca/ling convention that more closely reflects the calling convention used by real systems. Chapter 15 contains a deeper treatment of testing and debugging. Based on our experiences teaching the introductory course, we have decided to swap the order of the chapter on recursion with the chapter on pointers and arrays. Moving recursion later (now Chapter 17) in the order of treatment allows students to gain more experience with basic programming concepts before they start programming recursive functions. ..
The Simulator
Brian Hartman has updated the simulator that runs on Windows to incorporate the changes to the LC-3. Ashley Wise has written an LC-3 simulator that runs on UNIX. Both have incorporated interrupt-driven FO into the simulator's functionality. We believe strongly that there is no substitute for hands-on practice testing one's knowledge. With the addition of interrupt-driven I/O to the simulator, the student can now interrupt an executing program by typing a key on the keyboard and invoke an interrupt service routine.
Alternate Uses of the Book
We wrote the book as a textbook for a freshman introduction to computing. We strongly believe, as stated more completely in the preface to our first edition, that our motivated bottom-up approach is the best way for students to learn the fundamentals of computing. We have seen lots of evidence that suggests that in general, students who understand the fundamentals of how the computer works are better able to grasp the stuff that they encounter later, including the high-level programming languages that they must work in, and that they can learn the rules of these programming languages with far less memorizing because everything makes sense. For us, the best use of the book is a one-semester freshman course for particularly motivated students, or a two-semester sequence where the pace is tempered. If you choose to go the route of a one-semester course heavy on high-level language programming, you probably want to leave out the material on sequential machines and interrupt-driven I/O. If you choose to go the one-semester route heavy on the first half of the book, you probably want to leave out much of Chapters 15, 17, 18, and 19.
We have also seen the book used effectively in each of the following environments:
Two Quarters, Freshman Course
In some sense this is the best use of the book. In the first quarter, Chapters 1 through 10 are covered; in the second quarter, Chapters 11 through 19. The pace is brisk, but the entire book can be covered in two academic quarters.
One-Semester Second Course
The book has been used successfully as a second course in computing, after the student has spent the first course with a high-level programming language. The rationale is that after exposure to high-level language programming in the first course, the second course should treat at an introductory level digital logic, basic computer organization, and assembly language programming. Most of the semester is spent on Chapters 1 through 10, with the last few weeks spent on a few topics from Chapters 11 through 19, showing how some of the magic from the students' first course can actually be implemented. Functions, activation records, recursion, pointer variables, and some elementary data structures are typically the topics that get covered.
A Sophomore-Level Computer Organization Course