深入理解计算机系统
草丛蔡一零
这个作者很懒,什么都没留下…
展开
-
深入理解计算机系统-第三章-程序的机器级表示-3.4
上一篇博客我们讲了在汇编语言中,如下的几个处理器状态是可见的:一、程序计数器(在 IA32 中通常称为 PC,用 %eip 表示):指示将要执行的下一条指令在存储器中的地址。二、整数寄存器文件:包含8个命名的位置,可以存储一些地址或者整数的数据。有的用来记录某些重要的程序状态,有的则用来保存临时数据。三、条件码寄存器:保存最近执行的算数或逻辑指令的状态信息,它们用来实现控制或数据流中的条件变...转载 2019-01-17 17:10:45 · 669 阅读 · 0 评论 -
深入理解计算机系统-第三章-程序的机器级表示-3.5
原创 2019-01-21 23:45:30 · 1497 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.7
上一篇博客我们讲解了二进制小数如何表示以及IEEE浮点标准。而且我们也提到过因为这种表示方法限制了浮点数的范围和精度,浮点数只能近似的表示一个数。比如 数字1/5,我们能用十进制小数 0.2 准确的表示,但是我们却不能把它准确的表示为一个二进制小数,我们只能通过增加二进制表示的长度来提高表示的精度。如下: 那我们该怎么办呢?舍入对于不能精确的表示的数,我们采取一种系统的方法,找到“最接...转载 2019-01-16 10:49:52 · 143 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.6
整数的表示和运算我们已经讲完了,在实际应用中,整数能够解决我们大部分问题。但是某些需要精确表示的数,比如某件商品的价格,某两地之间的距离等等,我们如果用整数表示将会有很大的出入,这时候浮点数就产生了。在 20世纪80年代以前,每个计算机厂商都设计了自己表示浮点数的规则,以及对浮点数执行运算的细节,这对于应用程序在不同机器上的移植造成了巨大的困难。而在这之后,也就是 1985年左右,IEEE 标准...转载 2019-01-15 21:05:20 · 512 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.6
前面两篇博客我们详细讲解了计算机中整数的表示,包括有符号和无符号(补码编码)的详细介绍。那么这篇博客我们将对它们的运算有个详细的了解。在讲解之前首先看下面的一个程序,看看输出结果是啥?#include <stdio.h> int main(){ int i = 2147483647; printf("%d\n",i+1); printf("%d\n",...转载 2019-01-15 20:59:25 · 179 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.5
C语言中的有符号数和无符号数上一篇博客我们给出了C语言中在32位机器和64位机器中支持的整型类型数据,我们这里只给出32位机器上的: 尽管 C 语言标准没有指定有符号数要采用某种编码表示,但是几乎所有的机器都使用补码。通常大多数数字是默认有符号的,比如当声明一个像12345或者0xABC这样的常量的时候,这个值就被认为是有符号的。C 语言允许有符号数和无符号数之间的转换。在一台采用补码的机器...转载 2019-01-15 20:41:44 · 328 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.4
什么是整数整数包含正整数,0,负整数。我们从小的数学常识,整数是无穷无尽的,即整数的大小没有限制。但是在计算机中则不能这样理解,因为计算机是靠数字信号来表示数,计算机所能处理的整数的长度是由计算机的字长来决定的,所以,在计算机中,我们必须制定一个规则来表示整数。C语言中的整型数据类型C 语言是支持多种整型数据类型的,下面我们看一下在 32 位机器和 64 位机器中,C 语言整型数据类型的...转载 2019-01-15 20:28:57 · 395 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.3
布尔代数我们知道二进制值是计算机编码、存储和操作信息的核心,随着计算机的发展,围绕数值0和1的研究已经演化出了丰富的数学知识体系。而布尔代数便是乔治.布尔(George Boole)将逻辑值 True(真)和 False(假)编码为二进制0和1,用来研究逻辑推理的一门数学学科。对于布尔代数,我们需要知道以下几种常见的运算符: ①、布尔运算 ~ 对应逻辑运算非。也就是取反的意思,假设 p ...转载 2019-01-15 20:01:56 · 139 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.2
进制的介绍在讲进制之前,我们先看一下数制的定义:用一组固定的数字和一套统一的规则来表示数目的方法称为数制。而数制有进位计数制与非进位计数制之分。非进位计数制的数码表示的数值大小与它在数中的位置无关,这里我们不作过多的介绍。进位计数制的数码所表示的数值大小则与它在数中所处的位置有关,常见的有二进制、十进制、十六进制,我们这里也只介绍这三种进制的转换。进位计数制的要素:①、数码:用来表示...转载 2019-01-15 19:53:51 · 177 阅读 · 0 评论 -
深入理解计算机系统-第二章-信息的表示和处理-2.1
2.1.2每台计算机都有一个字长,指明证书和指针数据的标称大小。因为虚拟地址是以这的字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。对于一个字长为n位的机器来说,虚拟地址的大小为2^n-1.2.1.4寻址和字节顺序对于跨越多字节的程序对象,我们要建立两个规则:这个对象的地址是什和我们在存储器中如何面对这些字节排序。多字节的对象被存储为连续的字节序列,对象的地址为所使用的...原创 2019-01-13 14:49:32 · 276 阅读 · 0 评论 -
CMU-CSAPP-深入理解计算机系统-P1-courseoverview
首先让我们看一个实例原因是数据是如何在内存中布局。C不会进行边界检查,容易崩溃这两种程序功能是一样的但是他们的时间完全不一样原创 2019-01-18 13:03:50 · 724 阅读 · 0 评论 -
深入理解计算机系统-第一章-计算机系统漫游
#include &lt;stdio.h&gt;int main(){ printf(“hello,world\n”); }我们的hello程序的生命是从一个源程序开始的,该源程序由程序员通过编辑器创建并保存为本文文件,文件名就是hello.c。源程序就是一个由0和1组成的位序列。这些位被组织成8个一组,称为字节。...原创 2019-01-12 21:07:42 · 129 阅读 · 0 评论 -
深入理解计算机系统-第三章-程序的机器级表示-3.1-3.3
3.2 程序编码假设我们写一个C程序,有两个文件p1.c和p2.c,我们用unix命令行来编译这段代码gcc -o2 -o p p1.c p2.co2:告诉编译器会使用第二级优化,会使得最终程序运行得更快,但是编译时间会变长,对代码进行调试会变得更加困难这个命令实际上调用了一系列的程序,将源代码转化为可执行的代码C预处理器会扩展源代码,插入所有用#include命令指定的文件,并扩展所...原创 2019-01-16 16:59:51 · 831 阅读 · 0 评论