深入理解计算机系统04:处理器体系结构

一、Y86-64指令集体系结构

对于跳转,我们定义了7 条跳转指令,它们的跳转条件和x86-64 中的跳转指令相
同,都是根据条件码的某种组合来判断是否进行跳转:

我们定义了6 条传送指令,它们与数据传送指令rrmovq 有相同的指令格式,只有
条件码满足条件时才会更新目的寄存器的值。

系统操作指令

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

Y86-64 异常

Y86-64 中的状态码:

二、Y86-64的顺序实现

Y86-64 中C 语言代码的汇编翻译:

这段C 语言代码的作用是计算一个数组的元素之和,其中指针start 指向数组的起始位置,count 用于表示数组的长度。
可以看到,除数据传送指令外,Y86-64 的指令与x86-64 的指令相差不大。

我们再看看上面的汇编代码是如何翻译成二进制指令的:

处理器在执行单条指令时,往往也包含着很多操作。我们将Y86-64 执行指令的过程组织成如下6 个阶段:

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

我们来看看上面这条subq 指令各阶段包含的内容:
在这里插入图片描述
如上图所示,

  • 1 取址阶段,根据指令代码来计算指令长度。
  • 2 译码阶段,根据寄存器指示符来读取寄存器的值。
  • 3 执行阶段,ALU 根据译码阶段读取到的操作数以及指令来执行具体的运算,并设置条件码寄存器。
  • 4 访存阶段,由于减法指令不需要读写内存,因此该阶段无操作。
  • 5 写回阶段,将ALU 的运算结果写回寄存器。
  • 6 更新阶段,更新程序计数器。
irmovq 指令的各个阶段


上图这条irmovq 指令将一个立即数传送给寄存器,它的各阶段内容如下:
在这里插入图片描述
如前图所示

  • 1 取址阶段,该指令既含有寄存器指示符字节,也含有常数字段。
  • 2 译码阶段,该指令不需要从寄存器中读取数据,译码阶段无操作。
  • 3 执行阶段,虽然该指令仅仅传送数据,看似不需要ALU,但由于ALU 的输出端与寄存器的写入端相连,数据的传送还是需要经过ALU,因此该指令将立即数加0.
  • 4 访存阶段,该指令不需要读写内存,因此该阶段无操作。
  • 5 写回阶段,将ALU 的运算结果写回寄存器。
  • 6 更新阶段,更新程序计数器。
rrmovq 指令的各个阶段

在这里插入图片描述
上图这条rmmovq 指令各个阶段的内容如下:

如前图所示

  • 1 取址阶段,该指令既含有寄存器指示符字节,也含有常数字段。
  • 2 译码阶段,从寄存器中读取数据。
  • 3 执行阶段,ALU 根据偏移量和基址寄存器来计算访存地址。
  • 4 访存阶段,将寄存器rsp 的数值写入内存中。
  • 5 写回阶段,由于内存地址由执行阶段得出并写入寄存器,因此写回阶段不需要进行操作。
  • 6 更新阶段,更新程序计数器。
pushq 指令的各个阶段

在这里插入图片描述
上图这条pushq 指令各阶段的内容如下:

  • 1 取址阶段,该指令含有寄存器指示符,不含常数,因此指令长度为2 字节。
  • 2 译码阶段,由于pushq 指令要将寄存器rdx 的值保存到栈上,因此该指令不仅需要读取寄存器rdx 的值,还需要读取寄存器rsp 的值。
  • 3 执行阶段,ALU 计算内存地址。
  • 4 访存阶段,将寄存器rdx 的值写到栈上。
  • 5 写回阶段,由于寄存器rsp 指向的内存地址发生了变化,因此更新寄存器rsp的值。
  • 6 更新阶段,更新程序计数器。
je 指令的各个阶段

在这里插入图片描述
上图这条je 指令各阶段的内容如下:
在这里插入图片描述

  • 1 取址阶段,该指令含有常数字段,不含寄存器指示符字节,因此指令长度为9字节。
  • 2 译码阶段,不需要读取寄存器,无操作。
  • 3 执行阶段,标号为Cond 的硬件单元根据条件码和指令功能来判断是否执行跳转,该模块产生一个信号Cnd,若Cnd = 1,则执行跳转;Cnd = 0 则不执行跳转。
  • 4 访存阶段,无操作。
  • 5 写回阶段,无操作。
  • 6 更新阶段,若Cnd = 1,将PC 的值设为0x040;若Cnd = 0,则将PC 的值设为当前值加9。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值