深入理解计算机系统(第二版)----之三:程序的机器级表示

小豆角 小豆角     2022-08-26     327

关键词:

计算机执行机器代码,用字节编码低级的操作,包括处理数据、管理存储器、读写存储设备上的数据,利用网络通信,编译器基于变成语言的原则, 目标机器的指令集合操作系统遵循的原则,经过一系列阶段产生机器代码,gcc c语言编辑器以汇编代码的形式输出,汇编代码是机器代码的文本表示,给出程序的每一条指令。然后gcc调用汇编器和链接器,根据汇编代码生成可执行的机器代码。

本章,近距离观察机器代码和汇编代码。

机器级的实现,被高级语言屏蔽了,用高级语言编写的程序可以在很多不同的机器上编译和执行,而汇编代码则是与特定机器密切相关的。 

3.1 历史观点

3.2 程序编码 

3.2.1 机器级代码

计算机系统使用了多种不同形式的抽象,利用抽象模型隐藏实现的细节,对于机器级编码来说,两种抽象非常重要,

1)机器级程序的格式和行为,定义为指令集体系结构(ISA)

2)机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是非常大的字节数组,存储器系统的实际实现,是将多个硬件存储器和操作系统软件组合起来。

IA32机器代码和原始C代码差别很大,一些通常对C语言隐藏的处理器状态是可见的:

1)程序计数器 pc 用%eip表示,指示将要执行的下一条指令在存储器中的地址

2)整数寄存器文件 8个命名的位置,

3)条件码寄存器:最近执行的算术或者逻辑指令的状态信息,用来实现控制或数据流中的条件变化,比如用来实现if 和while语句

4)一组浮点寄存器存放浮点数据

机器代码吧存储器看成一个很大的按照字节寻址的数组。 

5)程序存储器 包含程序的可执行机器代码,操作系统需要的一些信息,过程调用和返回的栈,用户分配的存储器块。

程序存储器用虚拟地址来寻址,操作系统负责管理虚拟地址空间,把虚拟地址翻译成实际处理器存储器中的物理地址。

3.2.2 代码示例

3.2.3 关于格式的注解

3.3 数据格式

3.4 访问信息

3.5 算术和逻辑操作

3.6 控制

3.7 过程

一个过程调用包括吧数据(以过程参数和返回值的形式)和控制,从代码的一部分传递到另一部分。另外,他还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间,数据传递 局部变量的分配 释放,通过操纵程序栈来实现。

 

IA32程序用程序栈来支持过程调用,机器用栈传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的哪部分栈称为栈帧(satck frame)。寄存器%ebp为帧指针,寄存器%esp为栈指针。

许多编译后的函数并不需要栈帧,如果所有的局部变量都能保存在寄存器中,而且这个函数也不会调用其他函数,那么需要栈额唯一原因就是用来保存返回地址。

使函数需要栈的原因如下:

1)局部变量太多,不能都放在寄存器中

2)有些局部变量是数组或者结构

3)函数用取地址操作符(&)来计算以各局部变量的地址

4)函数必须必须把站上的某些参数传递到另一个函数

5)在修改一个被调用者保存寄存器之前,函数需要保存他的状态

栈是一个具有以上属性的动态内存区域。

计算设计系统中内存的堆和栈是在程序运行过程中计算机用于分配资源的两个区域

 计算机系统在程序运行时会将程序映射到内存中,其中运行时分为5个区:栈区、堆区、(bass区、数据区)、代码区

栈区用于存放局部变量,临时变量,传递到函数中的参数,是系统自动分配的。
堆区用于动态分批内存  

 

 

3.8 数组分配和访问

3.9 异质的数据结构

3.10 指针

3.11GDB调试器

3.12 存储器的越界引用和缓冲区溢出

3.13 扩展IA32到64位 3.14 浮点程序的机器级表示

3.14 小结

程序变量是在运行时栈中,还是在某个动态分配的数据结构中,还是在某个全局存储位置中。理解程序如何映射到机器上会理解这些存储器的差别。 

 

深入理解计算机系统(中文版第二版)

... · · · · · ·从程序员的视角,看计算机系统!本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是... 查看详情

深入理解计算机系统(第二版)----之二:信息的表示和处理

...无洞,导线上的高低电压,对二值信号进行存储和执行的计算机的电子电路非常简单和可靠。制造商能够在一个单独的硅片上集成数百万甚至数十亿个这样的电路。单独的位没有意义,用一个二进制数字系统,能够用位组来编码... 查看详情

深入理解计算机系统第二章

...tps://www.bilibili.com/video/BV1iW411d7hd?p=2学习书本:《深入理解计算机系统》第3版。信息存储:8位=1字节;内存所有可能地址集合称为“虚拟地址空间”;每个程序对象可以视为一个“字节快”,程序本身是一个字节序列... 查看详情

2017-2018-120179215《深入理解计算机系统》第二章

《深入理解计算机系统》第二章学习笔记?这章主要通过四个部分进行介绍:信息存储、整数表示、整数运算以及浮点数。重点描述了无符号数和数的补码的表示特性。我们要知道对计算机的算术运算有深刻的理解是写出可靠程... 查看详情

《深入理解计算机系统(第三版)》第二章

...为地址,所有可能地址的集合称为虚拟地址空间。2.每台计算机都有一个字长,指明指针数据的标称大小。32位程序和64位程序区别在于该程序如何编译,而不是其运行的机器类型。C语言各种数据类型分配的字节数如下:int32_t和i... 查看详情

《深入理解计算机系统(第三版)》第二章信息的表示和处理

《深入理解计算机系统(第三版)》第二章信息的表示和处理??计算机本身是由处理器和存储器子通过系统组成。在核心部分,我们需要方法来表示基本数据类型,比如整数和实数运算的近似值。然后,我们考虑机器级指令如何... 查看详情

深入理解计算机系统第二章信息的表示和处理

 欣哥划重点:@所有人,第二章比较难,我建议至少掌握下面几个知识点:1.字节顺序:大端和小端2.运行图2-24,图2-25程序show-bytes.c观察结果,看看有什么问题3.理解布尔运算,位运算4.理解无符号数和有符号数,给一个数,... 查看详情

深入理解java虚拟机第二版类文件结构

一.class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有... 查看详情

深入理解计算机系统第二章

...tps://www.bilibili.com/video/BV1iW411d7hd?p=2学习书本:《深入理解计算机系统》第3版。信息存储:8位=1字节;内存所有可能地址集合称为“虚拟地址空间”;每个程序对象可以视为一个“字节快”,程序本身是一个字节序列... 查看详情

深入理解计算机系统-第二章

疑惑:***."十进制数字x的ASCII码正好是0x3x"(p31)```.照上面这么说,十进制1的ASCII码该是0131,很明显错误的,找到一个ASCII码来看下"1"的ASCII码是"49",再仔细参考下书中上下文,发现上面说了十进制1的ASCII码是31,那原句这么说"十进... 查看详情

深入理解计算机系统第二章要点

1.每台机器都有一个字长,指明了整数和指针的标称大小(normalsize),长整数(longint)和指针的大小都是字长(32位机器是32位,64位机器是64位),字长代表了机器的寻址时地址大小,进而限定了寻址空间的大小,字长w的寻址... 查看详情

《深入理解计算机系统》第二章学习笔记

...为负浮点数是表示实数的科学计数法的以2为基数的版本计算机的表示法是用有限的数量的位表示的数字编码,所以,结果太大的时候,某些运算就会溢出。浮点运算溢出会产生特殊的值+∞,但是一组正数的乘积总是正的,这点... 查看详情

《深入理解计算机系统》(第三版)读书疑问

问题:第一章helloworld是怎样工作的?预处理器、编译器、汇编器、链接器是怎样把.c的源程序分别修改为.i、.s.、.o的程序的?第二章反码和补码在作用上有什么区别?第三章直到型循环和当行循环有什么异同?第四章Y86指令集... 查看详情

深入理解计算机系统

                   图1图1中左侧是proc.c程序。右侧是proc.s汇编程序。 proc.s中,5--15行是proc()的汇编代码                                  图2图2中... 查看详情

《深入理解计算机系统》第一章计算机系统漫游

《深入理解计算机系统》第一章计算机系统漫游1、本章从一个程序的生命周期讲起,分别对程序的创建、编译、执行、输出、终止进行了详细的解读,从中引出了关于信息上下文、编译系统、高速缓存、操作系统等重要概念。... 查看详情

深入理解计算机系统第二章信息的表示和处理part2

...码是一致的进一步,由于有符号数是以补码的形式存储在计算机中的,而无符号数三种编码都是一致的,所以我们可以说,整型数在计算机中是以补码的形式存在的。参考文章:https://www.jianshu.com/p/ffc97c4d2306   查看详情

深入理解计算机系统(代码片段)

深入理解计算机系统卡内基·梅隆一门棵。原书第3版资料.第三版源码.原书第2版资料.计算机系统漫游源文件到目标文件的翻译过程可分为四个阶段,这四个阶段的程序被称为预处理器,编译器,汇编器和链接器,它们一起构成... 查看详情

《深入理解计算机系统》pdf下载

《深入理解计算机系统》【PDF】下载链接:https://u253469.pipipan.com/fs/253469-230062566   内容提要本书主要介绍了计算机系统的基本概念,包括最底层的内存中的数据表示、流水线指令的构成、虚拟存储器、编译系统、动态加... 查看详情