第四周学习总结

1、程序员可见状态

  • 15个程序寄存器(RF)
  • 3个条件码(CC)
  • 程序状态(Stat)
  • 程序计数器(PC)
  • 内存(DMEM)

2、Y86指令

在Y86当中,寄存器也是有8个,每一个寄存器可以存储一个字,也就是一个32位二进制。条 件码是一个一位二进制的寄存器,保存着最近的算术或逻辑运算所造成的影响的信息。PC则是程序计数器,记录当前正在执行的指令的地址。存储器则是一个很大的字节数组,保存着程序和数据,Y86的程序可以使用虚拟地址(类似于数组的下标)来访问存储器,硬件和操作系统会将虚拟地址翻译为实际的地址。最后一个程序状态(stat),它则代表着程序的运行情况。
它会指示程序是否正常运行,或者发生了某个特殊事件。

指令编码长度从1个字节到10个字节不等。一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个8字节的常数字。

字段fn指明是某个整数操作(OPq)、数据传送条件(cmovXX)或是分支条件(jXX)。

所有的数值都用十六进制表示

  • halt :这个指令会停止指令的执行。
  • nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
  • xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
  • OPl:这包括4个整数操作指令,addl、subl、andl和xorl。他们只对寄存器数据进行操作。
  • jXX:包括7个跳转指令,jmp,jle,jl,je,jne,jge,jg。根据分支指令的类型和条件码的设置来选择分支。
  • cmovXX:包括6个条件传送指令,cmovle,cmovl,cmove,cmovne,cmovge和cmovg,只发生在两个寄存器之间,不会将数据传送到存储器。
  • call:指令将返回地址入栈,然后跳到目的地址。
  • ret:call是过程调用,ret是返回。将返回地址入PC,并跳到返回地址。
  • pushl和popl:指令实现了地址的入栈和出栈

3、HCL硬件控制语言

名称 表示
AND &&
OR ll
NOT !
  • 与或非三种逻辑门可以用一种与非门或者或非门实现
HCL表达式 和 C 语言逻辑表达式的区别
  • 逻辑门是持续输出的,如果电路的输入变化了,在一定的延迟之后,输出也会相应的变化,而C表达式是在执行到的时候才会求值。
  • 两者操作的值不同,逻辑门只对值 0 和值 1 进行操作,而C 逻辑表达式允许参数是任意整数,0表示false,其它任意值都表示true。
  • C 逻辑表达式存在短路,比如对于a && b这个符号来说,C语言中的规定是如果前者为假,则后者不会再计算。而HCL当中没有这种说法。
存储器和时钟
  • 时钟寄存器:简称寄存器,存储单个位或字。时钟信号控制寄存器加载输入值。
  • 随机访问存储器:简称存储器,存储多个字,用地址来选择该读或者该写哪个字.

4、SEQ

六个阶段:
取值→译码→执行→访存→写回→更新PC

实现包括组合逻辑和两种存储器设备:

  • 时钟存储器(程序计数器和l条码寄存器)
  • 随机访问存储器(寄存器文件、指令存储器和数据存储器)