**BCST (Bilibili Computer Science Topics) Project**
*Copyright Declaration*
This repository is a part of BCST project. BCST project contains the source code and videos produced by yangminz. The videos are published publicly on the bilibili by [yaaangmin](https://space.bilibili.com/4564101). The source code is published on github [yangminz](https://github.com/yangminz). Any repository or video under BCST project is exclusively owned by yangminz and shall not be used for commercial and profiting purposes without yangminz's permission.
**Build**
```bash
[python3 | py3 | <nothing>] ./cmd.py build [project name]
```
**Run**
```bash
[python3 | py3 | <nothing>] ./cmd.py run [project name]
```
**计算机系统 - Computer System A Programmer's Perspective (CSAPP)**
Hello 观众朋友们大家好,这个Repo是我在做《深入理解计算机系统》(CSAPP)视频时所用到的代码,还包括一本设计手册,设计手册还在慢慢更新。代码、手册以及视频都是为了给大家介绍CSAPP这本书,帮助大家阅读和理解最基础的计算机系统知识。特别是本科低年级的同学(大一大二),准备转专业的同学,以及跨专业考研的同学,通常会掌握一些基本的编程语言,但是可能对计算机系统本身并不足够了解。我的视频、代码以及手册就是希望帮助大家学习,尽量通过代码实现CSAPP上的知识点,然后再通过视频讲解,将基础的计算机系统知识连贯起来。
下面是目录:
#### Chapter 02 - Representing and Manipulating Information
计算机可以看作对Bit串的翻译器,为了了解计算机系统,我们首先需要了解Bit在计算机中是如何被表达与解释的,简单了解这些位运算的操作,背后的代数结构。
**2020-09-29** 关于有符号与无符号整数,以及它们背后的代数结构。我设计了一张环形图,方便观众理解Bit串到有符号与无符号整数的映射。这张环形图在手册里更加精美: [bilibili-video](https://www.bilibili.com/video/BV1mp4y1a7X4/)
**2020-10-01** 我们第一次动手写C语言代码。一些简单的位操作运算,例如判断一个十六进制数中是否全部都是字母,使用卡诺图对布尔代数进行化简。一个基于位运算的数据结构:树状数组。[bilibili-video](https://www.bilibili.com/video/BV1Hi4y1E7Bn/)
**2020-10-16** 浮点数的四种类型:规格化、非规格化、无穷大、非数。`uint32_t`到`float`的数值转换,特别是关于约分的规定:[bilibili-video](https://www.bilibili.com/video/BV1vy4y1C75t/)
#### Chapter 03 - Machine-Level Representation of Program
拥有Bit构成的基本数据类型以后,我们开始考虑构造一台原始的冯诺依曼结构的计算机。其实,我们是在做一个计算机的模拟器。为此,我们需要模拟CPU中的寄存器与内存等硬件,在这些硬件的基础上编写指令集。我们的指令集是通过字符串写成的,就像我们通常所写的高级语言代码一样,其实都是文本。我们用一些编译的基础知识来解析字符串指令集,将它们翻译成指令的数据类型,然后按照操作符与操作数解释执行这些代码。
在这里,我们其实做了一层抽象:文本与字符串指令就像一台虚拟机,类似于JVM中的字节码,CLR中的IL,我们解释执行的是虚拟机指令。字符串指令集上,我们实现一些简单的指令,例如`add`,`sub`,`mov`,最重要的是关于过程控制,也就是函数调用的几个指令:`call`,`push`,`pop`,`ret`,我们对内存栈的控制蕴含在这几条指令之中。
**2020-10-22** CPU寄存器的模拟器,这是我们模拟器的第一行代码。我们利用结构体与联合等异构的数据类型来描述寄存器:[bilibili-video](https://www.bilibili.com/video/BV1vy4y1C75t/)
**2020-10-31** 指令的数据结构,用来描述一条汇编指令的操作符,源操作数以及目的操作数,包括操作数中的立即数、寄存器等:[bilibili-video](https://www.bilibili.com/video/BV1Na4y1s7m6/)
**2020-11-05** 一个CPU的指令周期,我们第一次执行了一条汇编指令:[bilibili-video](https://www.bilibili.com/video/BV1sZ4y1V7uu/)
**2020-11-06** 模拟器的运行若干条指令,形成一个程序。为了访问内存资源,我们需要设计内存访问接口。完成`call`指令:[bilibili-video](https://www.bilibili.com/video/BV1vK4y1E7sy/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/27311bd90c7fe7971aeb9cda41fa9e7fee96e787)
**2020-11-18** 递归与树与栈之间的关系,实现`push`指令:[bilibili-video](https://www.bilibili.com/video/BV1tz4y1y7JZ/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/31eeb74aa3489a3f9fac02b9c65b202f6a13ee55)
**2020-12-04** 完成`pop`与`ret`指令,至此,我们已经在内存栈上实现了函数的过程控制。我们开始第一次代码重构,将in-memory的结构体指令数组转换为字符串指令数组,并且开始解析字符串指令:[bilibili-video](https://www.bilibili.com/video/BV1WK41137JT/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/004c77a87c6e26ca7a232f72661e099f7bae8b75)
**2020-12-08** 为了解析字符串指令,特别是其中所要用到的立即数,我们开始写字符串到十进制与十六进制数的转换。我们使用确定有限自动状态机去扫描字符串,设计状态机的状态转移:[bilibili-video](https://www.bilibili.com/video/BV1ty4y1S7z1/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/997cf33cd40fbdfc81e71d9d029163e5df80ecc1)
**2020-12-18** 解析字符串操作数中的内存与寄存器格式:[bilibili-video](https://www.bilibili.com/video/BV1zT4y1M7GE), [git-commit](https://github.com/yangminz/bcst_csapp/tree/34beeb4bde0cf5b80757977acff63f8faed6b696)
**2020-12-27** 完成字符串指令的解析,并且在字符串指令上运行了程序。设计状态码,支持条件判断:[bilibili-video](https://www.bilibili.com/video/BV1Qf4y1e73j), [git-commit](https://github.com/yangminz/bcst_csapp/tree/7ec8dbed8ba8362d94508c507b4e535c24d7fa8a)
**2021-01-04** 实现`jmp`,`jne`,`leave`指令。到此为止,我们已经可以模拟函数的递归调用了:[bilibili-video](https://www.bilibili.com/video/BV1Ey4y1v7aG), [git-commit](https://github.com/yangminz/bcst_csapp/tree/17a1d75fdf410fd9456ab6316044ffc3c0331703)
**2021-01-15** 总结与回顾我们到此为止所做的一切工作,关于数据类型和冯诺依曼计算机,一个简化的计算模型——URM:[bilibili-video](https://www.bilibili.com/video/BV1LU4y14792/)
**2021-01-23** 除了冯诺依曼计算机,我们还有另一种计算模型:λ演算。冯诺依曼计算机中,函数是数据;λ演算中,数据是函数:[bilibili-video](https://www.bilibili.com/video/BV1Wv411s7yU/)
#### Chapter 07 - Linking
模拟了计算机的硬件基础以后,我们准备开始在模拟器上运行程序。因此,我们需要设计自己的程序。考虑到我们将指令集用字符串实现,因此我们的程序也是字符串的汇编指令。这一步工作可以由编译器为我们实现,我们需要做的是完成一个简陋的链接器,将可执行的文件链接起来。
正如我们在上一部分所说的,字符串指令可以看作一种在字符串与文本上实现的虚拟机,因此我们的链接也是在`.txt`文本上实现的,一个可执行可链接的文本格式,`.elf.txt`。为了设计这个文本格式,我们需要理解Linux中是如何处理ELF文件的。
**2021-02-06** ELF文件从它的Header开始,我们用`readelf`与`hexdump`去看ELF文件的二进制数据,按照Byte去理解ELF文件的Header:[bilibili-video](https://www.bilibili.com/video/BV1MX4y1576E/)
**2021-02-21** Se
Lei宝啊
- 粉丝: 2273
- 资源: 1329
最新资源
- 有刷电机闭环控制程序,采用强磁阻AB编码器 速度和位置闭环 可提供全套硬件资料(可直接打板生产的) 软件和教程资料
- MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度 关键词:碳捕集 电厂 需求响应 优化调度 电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧电厂优化调度》完全复现
- 自动驾驶控制-纯跟踪算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶纯跟踪控制器仿真验证,可以实现双移线,圆形,以及其他自定义的路径跟踪 跟踪效果如图,几乎没有误差,跟踪误差在0
- 红外遥控器 proteus仿真 51单片机 c语言 红外遥控器按下相应的键,对应的LED熄灭或点亮,LCD显示当前LED状态 主控 at89c52 1602模块 按键模块 含程序代码、仿真文件、演示
- SIEMENS 西门子西门子水处理程序 包含:1200Plc程序,通讯点表,CAD原理图,操作说明 触摸屏包含:组态画面,操作画面,参数设置画面,报警记录等 程序结构严谨,画面简洁,项目完整,有
- 基于动态规划的混合动力汽车能量管理策略 动态规划是一种全局优化算法,它基于贝尔曼原理,可以得到全局最优解 本代码将动态规划算法应用于混合动力汽车能量管理问题,从而得到发动机发电机组与电池之间最优的功
- PLECS光伏扰动观察法MPPT仿真,附带自搭光伏电池模型,可更改光照,温度和最大功率点参数 MPPT控制部分使用C语言编写(模块搭建也有),占空比扰动,电压扰动,电流扰动
- 松下FP-XH多工位装配机项目实际程序案例,程序分模块编程,一共11工位,轴控采用FB功能块 这个程序用来做在多工位直线,转盘类应用的项目模板非常合适,直接套用,增加或删减工位即可 套用非常灵活,有
- BLDC直流无刷电机FOC控制 在Matlab Simulink中实现了无刷直流电机的磁场定向控制FOC,整个FOC架构包括: 1、估计:根据霍尔传感器信号估计转子位置、角度和电机速度; 2、诊断:执
- 三层立体车库plc s7-1200 博图15.1 1、设置启动、停止按钮,且设置指示灯显示车库的开关状态; 2、7个车位的车俩可以自由存取,且车库可以实现自动存取(存取选择最优路径); 3、每个
- 基于麻雀搜索算法(SSA)的三维旅行商问题,三维TSP问题 如果觉得蚁群算法太老了,那么麻雀算法解决三维TSP问题就相对新颖一些了 标记出城市坐标的三维节点,起始点 如果您改进出麻雀算法
- 脑机接口,运动想象源码实验复现 数据集+python源码 基于tensorflow 的EEG-TCNet 源码lunwen 在本文中,提出了EEG-TCNET,一种新的时间卷积网络(TCN),它在
- 基于fpga实现的基于暗通道先验的实时去雾算法,数据可以从摄像头输入,并在rgb屏幕上输出 有完整的仿真文件 可接硬件实现 有课程lunwen,ppt文件可以供参考
- 无人机VESC7500,低压伺服keil源码,可以无感,霍尔单馈,正余弦,ABZ等多种反馈信号,是用非线性磁链观测器,高频注入等多种算法于一身,上位机源码,原理图 没有PCB 最大电流300A,是学
- 七自由度车辆动力学模型 dugoff轮胎模型 车身平民三自由度+四个车轮滚动自由度 simulink模型+示意图公式说明文档
- dsp28335串口升级程序,包通过,已经在实践中验证,代码注释详细 不需要更改boot模式,直接用串口升级,可修改任意波特率及串口
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈