Y86-64指令体系结构

Y86-64可以看作是cisc和risc二者的合集,它既是可变长度指令集,又是load/store体系指令2

这里总的来说就是教学如何将汇编指令转化为机器码以及将机器码转化为汇编指令

Y86-64指令集

关于硬件编程和机器编程

这里只是简单的介绍下二者的关系与区别以及我的理解

大二学了关于数字电路(虽然没怎么学懂)和计算机组成原理(根本没有学)的知识,了解了计算机中的CPU组成原理:从微观来说就是几个基础的门组成,这些东西统称为电路,电路信号输入在输出成想要的值,这种电路没有存储能力。在计算机中信息都是保存在寄存器中的,记录下书中写的,大概有两种寄存器

  • 时钟寄存器
  • 随机访问寄存器(简称内存)

Y86-64顺序实现

简单来说,处理器处理机器码需要一个成熟,通用的框架,无论是复杂指令集还是简单指令集,一条指令的机器码都要能够快速准确的识别,Y86-64处理器的实现首先需要SEQ处理器

SEQ处理器的框架为

  • 取指

    解析指令操作码,如果有寄存器等一并解析并且保存,而后pc+n保存在临时变量中

  • 译码

    如果指令会改变寄存器值或者需要用到寄存器值,通过取指操作获取的寄存器文件编号来获取寄存器值

  • 执行

    需要使用AUL的步骤或者处理跳转指令在进行判断时(这里的判断估计也会用到AUL进行计算)叫做执行,比如加减等操作,常用的push和pop指令改变rsp寄存器的值时会有%rsp+8或者%rsp-8等操作,这一类的指令在SEQ处理器处理时会有执行这一步操作。这里与平时在代码中所说的执行有不一样的理解

  • 访存

    如果需要从内存中获取值或者将计算值保存在内存中会有访存操作

  • 写回

    这一步操作简单来说就是跟新寄存器值,如果指令操作过后寄存器的值需要变化会有写回一步

  • 更新PC

    跟新PC指针,使之控制程序下一步的执行流程

在处理器发生异常或者执行htal指令或者执行非法指令,访问非法内存时,处理器停止执行,这张SEQ处理器流程图可以更加直观的展示各个流程的含义与细节

下面贴出书中计算指令,irmovq和rrmovq指令的实例图

SEQ指令处理实例图