深入理解计算机系统 第三章 程序的机器级表示

Preview、计算机的结构体系:

(每条线怎么走的都能理解最好,笔者不多阐述)

“通俗一点,主存相当于图书馆的书架,GPRs相当于宿舍的书架,你要在宿舍学习这本书必然是要从书架上把书拿出来才用”

——————————————————————————————分界线

首先我们温习一下程序的生成过程,用hello.c来举个例子:

在整个编译的过程中,编译器会完成大部分工作,将把用C语言提供的相对比较抽象的执行模型标识的程序转化成处理器执行的基本的指令,汇编代码比较接近于机器代码,机器代码是二进制格式,而汇编代码有可读性更好的文本形式。一条机器语言只执行一个很基本的操作。

Main Frame:

一、程序计数器(program counter)

是用于存放下一条指令所在单元的地址的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。

二、程序内存包含:

程序的可执行机器代码,操作系统需要的一些信息,管理过程调用和返回的运行时栈,以及用户在程序中分配的内存块(malloc,for example)。

三、IA32:

ISA(操作指令集架构Instrucrion set architecture)它规定了如何使用硬件,是对硬件的抽象,而又建立在软件的层面之上,所以它是介于软件与硬件之间重要的抽象层。而IA32可以被目前通用的x86-32向后兼容。程序的设计是一个不断抽象化的过程,我们现在写的代码具有高度的抽象性,可是早期的代码并不是,它们密切的和机器有关。

ISA规定了一台机器的指令系统涉及到的所有方面,包括所有指令的指令格式、功能,通用寄存器GPRs的个数、位数、编号和功能,存储地址空间的大小,编制方式,大小端,指令的寻址方式,等等等等。

在IA32体系中,有八个GPR,一个标志寄存器EFLAGS,PC为EIP,可寻址空间为4GB,0~0xFFFFFFFF,小端。32位寄存器包括了EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI这八个寄存器组织。而x86-64还多了八个Gprs,%r8到%r15,寄存器里面存放的是主存中的地址。

IA32
X86-64

 

四、IA-32常用指令类型:(其中的重点是(1),(2))

(0)虽然后面你还能看得到下面这个图,数据类型:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值