预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共94页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Part1ProgramStructureandExecution 信息的表示和处理 程序的机器级表示 处理器体系结构 存储器层次结构 2010_Spring_csapp@pe.cqnu CH02信息的表示和处理 概述 信息存储★ 整数表示★ 整数运算☆ 浮点数表示★ 2010_Spring_csapp@pe.cqnu 信息的表示和处理.概述 数据表示 数据的机器表示:指能被机器硬件直接识别和引用的数据类型。 线性表、队列、栈、向量、链表、树、图等软件系统所要处理 的各种数据结构,是面向应用的信息的表示,最终被转换成机 器中所具有的各种数据表示来实现。可见,数据表示是构建数 据结构的基础。 不同的数据表示可以为数据结构的实现提供不同的支持,表现 在实现的效率和方便性上不同。因此,数据结构和数据表示是 软、硬件的interface。系统结构设计者在确定软硬件的功能分 配时,应考虑到机器中设置哪些数据表示,以便对应用中所遇 到的数据结构能有高的实现效率。本节主要讨论I386处理器上 的数据表示。 3 信息的表示和处理.概述 数据表示、数据结构和C C语言的基本数据类型直接与底层硬件相对应。 例如,C不存在内置的复数类型。某种语言要素如果底层硬件没 有提供直接的支持,那么编译器设计者就不会在它上面浪费任何 精力。C一开始并不支持浮点类型,直到硬件系统能够直接支持 浮点数之后才增加了对它的支持。 在本书中,C被直接映射到I386的数据表示之上,所以可通过 讨论C的数据类型来学习I386的数据表示。 对于I386数据表示之上的数据结构,是最终如何被表示为I386 数据表示的,也是学习的重点。理解这种从数据结构到数据表 示的映射关系有助于学会编写更有效率的程序。 4 信息的表示和处理.概述 信息都被编码表示 数据表示、数据结构都是对信息的描述,这些描述是通过编 码来实现的。 信息编码:建立信息对象和bits的一一对应关系。 ➢信息都用若干二进制位bits表示(字节倍数编码、解释器) ➢不同的信息类型有不同的编码方案:数字编码、字符编码等 ➢三种最基本的数字编码 无符号编码:表示非负整数 二进制补码编码:表示整数 浮点数编码:表示实数 I386支持这三种数字编码的数据表示。其余类型的信息可以通过 这三种数字编码和字符编码组成的数据结构来表示。 5 信息的表示和处理.概述 信息都被编码表示 计算机只能使用有限的位数来对数字编码,导致: 整数的溢出和可结合、可交换 浮点运算的溢出和不可结合、不可交换 通过学习数字的编码表示,能够了解数字类型的取值范围及其不 同算术运算的属性。对于编写在全部数值范围内都能正常工作, 而且可以跨越不同机器、操作系统和编译器组合的可移植的程序 来说,这种了解是非常重要的 6 信息的表示和处理.概述 基于编码的信息处理 在对信息编码的基础上,计算机才能对信息进行处理。 字符常采用单字节编码,比较简单;数字采用多字节编码, 比较复杂。本书详细讨论了I386数字编码的数据表示。 计算机存储的是信息的编码,由ALU对编码进行运算操作。 通过直接操作数字的位级表示,可以得到几种执行算术运算 的方式,这对于理解编译算术表达式时产生的机器级代码是 很重要的。 本章从各种编码的基本定义开始,然后得出一些属性,例如可表 示数字的范围、它们的位级表示以及算术运算的属性。 7 CH02信息的表示和处理 概述 信息存储★ ✗存储器的抽象 ✗信息的表示 ✗位操作和逻辑运算 整数表示★ 整数运算☆ 浮点数表示★ 2010_Spring_csapp@pe.cqnu 信息存储.存储器的抽象 面向字节的存储器组织 程序的信息是存储在存储系统中的。在32位系统中,机器级程序所 看到的存储器是一个抽象的4G字节数组,即虚拟存储器。 所有的地址集合称为虚拟地址空间;整个字节数组称为虚拟 存储空间。 虚拟存储器的通过不同类型的存储层次实 SRAM,DRAM,disk Onlyallocateforregionsactuallyusedbyprogram 9 信息存储.存储器的抽象 程序的运行时存储器映像 Memory invisibleto Kernelvirtualmemoryusercode 0xc0000000 Userstack (createdatruntime)%ebp(framepointer) %esp(stackpointer) Memory-mappedregionforprintf() sharedlibrarie