CSAPP浅学心得

系列文章目录

处理器的体系结构


学习内容:

1、初步认识了处理器的指令集体系结构

2、定义处理器指令集中的部分指令以及编码

3、认识处理器处理指令的过程(6大阶段)以及不同类别指令之间相同阶段的差异

4、六大阶段的硬件设计


更新时间:

2021年12月27日(未完待续)


学习产出:

首先,我们需要进行一些基础定义。

定义了 15 个64 位的程序寄存器,相比于 x86,省略了%r15 以简化指令的编码。和 x86 一样,寄存器%rsp 被定义为栈指针,其他 14 个寄存器无固定含义。此外,只保留了 x86 中的零标志(ZF)、符号标志(SF)和溢出标志(OF)。程序计数器 PC 用来存放当前正在执行的指令的地址,状态码Stat 用来表示程序的执行状态。

为了简化指令集,将movq 指令分成了 rrmovq、irmovq、rmmovq 和 mrmovq 四种。movq 前面的两个祖母分别表示了源和目的的格式,例如irmovq 的源操作数是立即数(Immediate),目的操作数是寄存器(Register)。

1、指令编码与数据编码

上图中每条指令的第一个字节表明指令的类型。这个字节分为两部分,每部分占 4 个比特位,高四位表示指令代码,低四位表示指令功能。

为了方便在指令编码中使用寄存器,我们需要给寄存器进行编号:

 接下来分别对整数的操作、跳转、传送和系统操作的指令进行定义。

(1)此处定义的整数操作指令只允许对寄存器中的数据进行操作;

(2)条跳转指令的跳转条件和 x86-64 中的跳转指令相同,都是根据条件码的某种组合来判断是否进行跳转;

(3)条传送指令与数据传送指令 rrmovq 有相同的指令格式,只有条件码满足条件时才会更新目的寄存器的值;

(4)系统操作指令主要有:halt、nop、call和ret、push和pop

halt 指令停止指令的执行,执行该指令会导致处理器停止,并将状态码设为HLT;
nop 指令表示一个空操作;
call 和 ret 指令分别实现函数的调用和返回;
push 和 pop 指令分别实现入栈和出栈的操作。

有了如上的指令编码,可以将 Y86-64 的汇编代码翻译成二进制表示。

例如:rmmovq %rsp, 0x123456789abcd(%rdx)-->40 42 cd ab 89 67 45 23 01 00

2、处理器执行指令的过程(组织为6大阶段)

(1)取址:处理器执行所有的指令都需要取址。在 Y86-64 指令系统中,指令的长度不是固定的,因此取址阶段需要根据指令代码判断指令是否含有寄存器指示符、是否含有常数来计算当前的指令长度。
(2)译码:在译码阶段中,处理器从寄存器文件中读取数据。寄存器文件有两个读端口,可以支持同时进行两个读操作。
(3)执行:指令被正式执行的阶段。在该阶段中,算术逻辑单元(ALU)主要执行三类操作:执行算术逻辑运算、计算内存引用的有效地址、针对 push和 pop指令的运算。
(4)访存:顾名思义,对内存进行读写操作的阶段。
(5)写回:将执行结果写回到寄存器文件中。
(6)更新:将 PC 更新为下一条指令的地址。

3、subq指令、irmovq指令、rmmovq指令、pushq指令和je指令的各个阶段

4、六大阶段的硬件设计

(1)取址阶段的硬件设计

1)在取址阶段中,取址操作以程序计数器(PC)的值为起始地址。为了保证每次取址操作至少能够获得一条完整的指令,取址操作每次从指令内存中读取 10 各字节。
2)接下来将这 10 字节分为两部分,第一部分占 1 字节,第二部分占 9 字节。
3)随后名为 Split 的硬件单元处理第一部分。它将这个字节又分成两部分,每部分占 4 个比特位,使这个字节分为两个字段,分别为指令代码和指令功能,用 icode 和ifun 表示。对于剩下的 9 个字节,我们通过名为Align 的硬件单元来产生寄存器字段和常数字段。
4)根据 icode 可以确定当前指令的状态信息,例如指令的合法性。如果 icode 在 0x0 到 0xB 之间,那么它就是一条合法指令。此外,通过 icode 还可以判断当前指令是否包含寄存器指示符字节和常数字节。通过前面说的判断结果,就可以计算出当前指令的长度。
5)与此同时,还可以通过将 PC 值加上当前的指令长度来计算内存中下一条指令的地址,用于后续的更新阶段。

(2)译码阶段的硬件设计

1)译码阶段的操作是从寄存器文件中读取数据,在 Y86-64 处理器中寄存器文件有两个读端口,它支持同时进行两个读操作,两个读端口的地址输入为 srcA 和 srcB,从寄存器文件中读出的数值通过 valA 和 valB 输出。
2)读端口的 srcA 和 srcB 用于产生寄存器的 ID,这需要寄存器指示符 rA 及 rB。

(3)执行阶段的硬件设计

执行阶段的核心部件 ALU 根据指令功能 ifun 来判断要对输入的操作数进行何种运算。每次运行时,ALU 都会产生三个与条件码相关的信号——零、符号、溢出。

(4)访存阶段的硬件设计

该阶段的硬件设计主要包含以下四个控制块:
1)读控制块,用于进行读操作。
2)写控制块,用于进行写操作。
3)内存地址控制块,用于产生内存地址。
4)数据输入控制块,用于输入数据。

(5)写回阶段的硬件设计

(6)更新阶段的硬件设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值