第四周学习总结
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条码寄存器)
- 随机访问存储器(寄存器文件、指令存储器和数据存储器)