首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
深入理解计算机系统
IT可乐
创建于2022-08-22
订阅专栏
《深入理解计算机系统》解读。主要介绍了计算机系统的基本概念,包括最底层的内存中的数据表示、流水线指令的构成、虚拟存储器、编译系统、动态加载库,以及用户应用等,大家感兴趣的可以看看原书
等 29 人订阅
共22篇文章
创建于2022-08-22
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
深入理解计算机系统(5.1)------优化程序性能
你能获得的对程序最大的加速比就是当你第一次让它工作起来的时候。 在讲解如何优化程序性能之前,我们首先要明确写程序最主要的目标就是使它在所有可能的情况下都能正常工作,一个运行的很快的程序但是却是错误
深入理解计算机系统(4.2)------逻辑设计和硬件控制语言HCL
上一篇博客我们简单介绍了Y86指令集体系,而这篇博客我们将介绍指令集体系的逻辑设计和硬件控制语言HCL,为后面去实现Y86打下基础。 在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存
深入理解计算机系统(4.1)------Y86指令集体系结构
本章我们将进入处理器体系结构介绍的神秘海洋中,我们熟悉的手机,电脑等设备的核心硬件都离不开处理器。处理器可以称的上是人类创造的最复杂的系统之一,一块手指大小的硅片,可以容纳一个完整的高性能处理器、大的
深入理解计算机系统(3.8)------数组分配和访问
上一篇博客我们讲解了汇编语言中过程(函数)的调用实现。理解数据如何在调用者和被调用者之间传递,以及在被调用者当中局部变量内存的分配以及释放是最重要的。那么这篇博客我们将讲解数组的分配和访问。 1、数组
深入理解计算机系统(3.7)------过程(函数的调用原理)
上篇博客我们讲解了计算机汇编语言是如何实现循环结构的。本篇博客我们将介绍汇编语言中过程的实现方式。 过程在高级语言中也称为函数,方法。一个过程的调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。此外,它还必须在进入时为过程的局部变量分配空间,并在退出…
深入理解计算机系统(3.6)------汇编的流程控制
前面我们所讲的所有指令,代码执行顺序都是一条接着一条顺序的执行。但是实际上在编码过程中,会有某些结构,比如条件语句(if-else),循环语句(for,do-while)和分支语句(switch)等等,都要求有条件的执行,根据数据测试的结果来决定操作执行的顺序。 在机器代码中,…
深入理解计算机系统(3.5)------特殊的算术操作指令
如上图,上面的几个指令支持有符号和无符号的全64位乘积以及整数除法,但是需要注意的是,存储结果的寄存器固定死了,是一对寄存器%edx(高32位)和%eax(低32位)组成的 64 位的四字。 对于 imull 指令,上一章我们在讲算术和逻辑操作指令的时候,讲过这个指令,这是一个…
深入理解计算机系统(3.4)------算术和逻辑操作
上一篇博客 我们介绍了几种数据传送指令,包括MOV,MOVS,MOVZ,PUSH和POP等,理解起来也不算难。本篇博客我们来接着看汇编语言的算术与逻辑运算指令,算术无非就是加减乘除,而逻辑运算也就是与或非,移位等操作。下面这张图是汇编里面的算术和逻辑操作: 上面除了 leal(…
深入理解计算机系统(3.3)------操作数指示符和数据传送指令
在上一篇博客 程序编码以及数据格式 中我们给出了一个简单的C程序,然后编译成了汇编代码。大家看不懂没关系,后面的博客我们将逐渐揭开一些汇编指令的神秘面纱。本篇博客我们将对操作数指示符和数据传送指令进行详细的介绍。 一、程序计数器(在 IA32 中通常称为 PC,用 %eip 表…
深入理解计算机系统(3.2)------程序编码以及数据格式
在进行本章的讲解之前,我们先说明讲解的机器语言型号。上一篇汇编语言和机器语言我们讲过,机器语言是直接面向处理器(Processor:CPU)的程序设计语言,但是每一种这样的微处理器(CPU)由于硬件设计和内部结构的不同,所以每一种微处理器都有自己的机器指令集,也就是机器语言。而…
深入理解计算机系统(3.1)------汇编语言和机器语言
《深入理解计算机系统》第三章——程序的机器级表示。作者首先讲解了汇编代码和机器代码的关系,阐述了汇编承上启下的作用;接着从机器语言IA32着手,分别讲述了如何存储数据、如何访问数据、如何完成运算以及如何进行跳转。通过这些步骤,又告诉了我们分支语句、循环语句是怎么完成的,函数调用…
深入理解计算机系统(2.8)------浮点数舍入以及运算
上一篇博客我们讲解了二进制小数如何表示以及IEEE浮点标准。而且我们也提到过因为这种表示方法限制了浮点数的范围和精度,浮点数只能近似的表示一个数。 比如 数字1/5,我们能用十进制小数 0.2 准确的表示,但是我们却不能把它准确的表示为一个二进制小数,我们只能通过增加二进制表示…
深入理解计算机系统(2.7)------二进制小数和IEEE浮点标准
整数的表示和运算我们已经讲完了,在实际应用中,整数能够解决我们大部分问题。但是某些需要精确表示的数,比如某件商品的价格,某两地之间的距离等等,我们如果用整数表示将会有很大的出入,这时候浮点数就产生了。 在 20世纪80年代以前,每个计算机厂商都设计了自己表示浮点数的规则,以及对…
深入理解计算机系统(2.6)------整数的运算
前面两篇博客我们详细讲解了计算机中整数的表示,包括有符号和无符号(补码编码)的详细介绍。那么这篇博客我们将对它们的运算有个详细的了解。 为什么程序中的结果和我们数学中的常识会有这么大的区别?两个正数相加得到负数。这就需要我们理解计算机中整数的运算原理。 我们知道计算机是用二进制…
深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字
上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点。这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字。 尽管 C 语言标准没有指定有符号数要采用某种编码表示,但是几乎所有的机器都使用补码。通常…
深入理解计算机系统(2.4)------整数的表示(无符号编码和补码编码)
上一篇博客我们主要介绍了布尔代数和C语言当中的几个运算符。那么这一篇博客我们主要介绍在计算机中整数是如何表示的,诸如我们在编码过程中遇到的对数据类型进行强制转换可能会得到意想不到的结果在这篇博客里你会得到解答。 整数包含正整数,0,负整数。我们从小的数学常识,整数是无穷无尽的,…
深入理解计算机系统(2.3)------布尔代数以及C语言运算符
本篇博客我们主要讲解计算机中的布尔代数以及C语言的几个运算符。 我们知道二进制值是计算机编码、存储和操作信息的核心,随着计算机的发展,围绕数值0和1的研究已经演化出了丰富的数学知识体系。而布尔代数便是乔治.布尔(George Boole)将逻辑值 True(真)和 False(…
深入理解计算机系统(2.2)------进制间的转换原理
上一篇博客我们讲解了信息的在计算机中是如何存储以及如何表示的。但是对于各个进制的转换 LZ 只是一笔带过了,后来LZ仔细研究了进制转换的原理,发现还是挺有感悟的。那么这篇博客就讲讲进制转换。 在讲进制之前,我们先看一下数制的定义:用一组固定的数字和一套统一的规则来表示数目的方法…
深入理解计算机系统(2.1)------信息的存储和表示
前面我们介绍了《深入理解计算机系统》第一章的内容----计算机系统漫游。包括简单介绍了 Hello World 程序在计算机中是如何运行的,存储设备的层次结构以及操作系统的抽象概念。第一章的内容只是对很多概念有个简单了解,所以还是不懂的话也不要紧,后面都会对这些概念进行深入的探…
深入理解计算机系统(1.3)------操作系统的抽象概念
上一篇博客我们讲解了存储设备的层次结构,并详细讲解了高速缓存的原理,以及可以利用高速缓存来提高程序性能。如果对Java Web 熟悉的,我们可以理解高速缓存类似Web 端的缓存机制。那么这一篇博客我们来引出并谈谈操作系统的抽象概念。 首先接着来讨论 hello world 程序…
下一页