Go to Course: https://www.coursera.org/learn/jisuanji-xitong
**Course Review: 计算机系统基础(一) :程序的表示、转换与链接 on Coursera** In the evolving landscape of computer science, an understanding of system fundamentals is critical for any programmer or aspiring software engineer. The Coursera course 计算机系统基础(一):程序的表示、转换与链接 (Fundamentals of Computer Systems: Representation, Conversion, and Linking) offers an in-depth examination of how high-level language programs are represented and executed within computer systems. This comprehensive review explores the course's content, structure, and its potential benefits for learners. ### Course Overview The course aims to bridge the gap between high-level programming languages and the underlying hardware implementations by exploring three core themes: 1. **Representation**: This module delves into how various data types like signed integers, unsigned integers, floating-point numbers, arrays, and structures are represented and stored in registers or memory. It also covers the formats and encodings of instructions, along with how pointers and addresses are represented. 2. **Conversion**: This segment highlights the translation between high-level programming constructs (such as function calls, loops, and statements) and machine-level code, illuminating the inner workings of code execution. 3. **Linking**: The final theme explores how multiple relocatable object files are linked to create executable files, understanding the loading process into the system. Upon completion, learners are equipped not only to understand how data is managed and manipulated at the machine level but also to appreciate the intricacies of debugging, optimizing performance, transferring programs, and ensuring robust software design. ### Syllabus Breakdown The course progresses through a well-structured twelve-week syllabus, each week focusing on specific concepts that build upon the last: - **Weeks 1-4** provide an introduction to programming languages and data representation, exploring fundamental topics such as number representation, basic Boolean algebra, and arithmetic operations. The course also distinguishes between different types of numeric data and their machine-level implementations. - **Weeks 5-7** transition into the relationship between high-level languages and machine code, particularly how C language constructs translate into machine-level representations. This section provides crucial insights into how various control structures, such as loops and function calls, are processed by the CPU. - **Weeks 8-12** further extend the discussion into memory management, specifically how data types like arrays and pointers are allocated and accessed. Additionally, this segment covers linking processes, symbol tables, and the differences between static and dynamic linking, culminating in a thorough understanding of executable file formats. ### Recommendations This course is highly recommended for: - **Aspiring Software Engineers**: For those looking to deepen their understanding of how their code interacts with hardware, this course lays a foundational knowledge crucial for further studies in areas such as "Computer Organization and Design", "Operating Systems", and "Compiler Theory". - **Programming Enthusiasts**: Individuals interested in enhancing their debugging skills, improving performance optimization techniques, and learning about program portability will benefit immensely from the insights gained throughout the course. - **Students of Computer Science**: This course is an excellent supplement to academic curricula focused on computer systems and programming, providing practical, hands-on perspectives that reinforce theoretical knowledge. ### Final Thoughts In a world where proficiency in programming is becoming increasingly essential, a clear understanding of computer systems remains a significant advantage. The course **计算机系统基础(一) : 程序的表示、转换与链接** on Coursera offers an invaluable opportunity to demystify the complexities of how our software operates behind the scenes. With its detailed syllabus, engaging content, and practical real-world relevance, this course deserves a spot on the learning path of anyone serious about their programming career.
WEEK1
首先,通过介绍C语言程序的具体实例,来说明高级语言程序的执行结果与编程语言之外的计算机系统其他方面有关,从而使学生明白为何要学习“计算机系统基础”课程;然后,介绍计算机系统基本组成与基本功能、程序开发和执行过程、计算机系统层次结构等概述性内容;最后,简要说明本课程的主要学习内容。
WEEK2首先,介绍进位计数制和编码的基本概念;然后,介绍定点数的编码表示,在此基础上介绍带符号整数和无符号整数的表示;接着,介绍浮点数的编码表示,主要包括IEEE 754单精度和双精度浮点格式标准;随后介绍逻辑值、西文字符和汉字等非数值数据的编码表示;最后,介绍数据的宽度和存储。
WEEK3首先,介绍布尔代数和数字逻辑电路的基础性内容;然后,介绍C语言中的按位运算以及逻辑运算;接着,介绍高级语言中的整数加减运算及其对应的底层实现电路。
WEEK4基于运算电路基础,介绍高级语言中的整数乘除运算与底层实现之间的关系;然后介绍浮点数的运算,特别是浮点运算中的精度问题。
WEEK5首先,介绍高级语言程序与机器级代码之间的关系,以及机器级代码与指令集体系结构(ISA)的关系;然后,介绍IA-32指令系统的概述性内容,包括寄存器组织、寻址方式和指令格式等。
WEEK6主要介绍IA-32指令系统中常用的几类指令,包括传送、定点算术运算、按位运算、控制转移、x87浮点运算指令,最后简要介绍了MMX及SSE指令集。
WEEK7主要介绍C语言程序中各类语句被转换为机器级代码后的机器级表示,包括过程(函数)调用的机器级表示、选择和循环语句的机器级表示。
WEEK8主要介绍C语言程序中数组和指针类型的分配和访问、结构和联合数据类型的分配和访问、数据的对齐存放。最后介绍越界访问和缓冲区溢出攻击。
WEEK9首先,介绍了x86-64指令系统的概述性内容;然后,介绍了与IA-32指令不同的几种x86-64基本指令;最后,介绍了x86-64中过程(函数)调用的具体的实现。
WEEK10首先,介绍了在生成可执行文件的过程中所涉及到的概述性内容;然后,介绍了目标文件格式的基本内容;最后,分别介绍ELF文件格式中的可重定位文件格式(链接视图)和可执行文件格式(执行视图)。
WEEK11主要内容包括符号的概念、符号表的结构、静态库和静态链接、符号解析。
WEEK12主要内容包括符号的重定位、可执行文件的加载、共享库和动态链接以及位置无关代码(PIC)。
本课程主要介绍高级语言程序中的数据类型及其运算、语句和过程调用等是如何在计算机系统中实现的。主要包含三个主题:(1)表示。不同数据类型(如带符号整数、无符号整数、浮点数、数组、结构等)数据在寄存器或存储器中的表示和存储;指令的格式、编码及其在存储器中的存储;存储地址(指针)的表示。(2)转换。高级语言程序中的过程(函数调用)、循环、选择等语句与机器级代码之间的对应关系。(3)链接。多个可重定位目标文件如何链接生成可执行目标文件并加载到系统中。 通过本课程的学习,使学习者能从程序员角度认识计算机系统,能够建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的“计算机组成与设计”、“操作系统”、“编译原理”、“计算机体系结构”等课程打下坚实基础。 学完本课程后,学习者将对以下问题有比较深刻的认识,并能解决相关实际问题。 ----程序中处理的数据在机器中如何表示和运算? ----程序中各类控制语句对应的机器级代码结构是怎样的? ----多个程序
非常好,不是计算机专业的,听起来还是很容易的,讲的很清晰。\n\n第三周第一节课,有一个段话口误,把“或”说成了“与”,就是下面这段。\n\n"所以这个输出完全是等于Ai,那么这个Ai 和刚才我们讲过的这个0,因为这样输入是0,所以这样输出是0。 和0相与输出来的结果当然就是0与上任何一个值 结果还是等于任何一个值,因为0在与门当中0就不起作用,完全取决于另外一个 是0输出就是0,"