20145222《信息安全系统设计基础》第六周学习总结(2)
20145222《信息安全系统设计基础》第六周学习总结(2)
补充加强版
教材学习内容总结
4.1Y86指令集体系结构
-
Y86指令集是IA32指令集的一个子集,只包括四字节整数操作。寻址方式比较少,操作也比较少。
-
指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX),所有数值都用十六进制表示
-
8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,用ID值0xF表示。
-
Y86异常:Y86状态码(在我们的设计中,任何AOK以外的代码都会使处理器停止)
4.2逻辑设计和硬件控制语言HCL
- 存储设备都是由同一个时钟控制,两类存储器设备包括:
- 时钟寄存器(寄存器):储存单个位或字,用时钟信号控制寄存器加载输入值。
- 随机访问储存器(储存器):储存多个字,用地址选择该读/写哪个字。 - 存储器和时钟中,处理器有一个随机访问存储器来存储程序数据。
4.3 Y86的顺序实现
- SEQ阶段的实现:
- 取指阶段:
- a.以PC为第一个字节的地址,一次读6个字节。
- b.icode:控制逻辑块计算指令
- c.ifun:功能码
- d.三个一位的信号(根据icode值计算):instr_valid:发现不合法的指令;need_regids:包含寄存器指示符字节吗;need_valC:包括常数字
- e.后五个字节是寄存器指示符字节和常数字的组合编码。 - 译码和写回阶段:
- a.都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
- b.寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。 - 执行阶段:
- a.包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用
- b.包括条件码寄存器
- c.每次运行产生:零、符号、溢出、产生信号set_cc - 访存阶段:
- a.读或者写程序数据。
- b.两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。
- c.根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。 - 更新PC阶段:
- 产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。
- 取指阶段:
- 处理器设计的几个重要经验:
- 管理复杂性是首要问题,尽量保持硬件设计的简单。
- 不需要直接实现ISA。
- 一开始就保证设计正确是非常重要的。
本周代码托管截图
- 托管代码链接
- 代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 2/3 | 10/20 | 掌握了几个命令 |
第二周 | 0/0 | 1/4 | 8/28 | 熟练了vim编辑器的操作 |
第三周 | 40/40 | 1/5 | 12/40 | 开始敲代码了 |
第五周 | 36/76 | 2/7 | 15/55 | 慢慢熟悉了汇编语言 |
第六周 | 12/88 | 2/9 | 16/71 | 对机器语言指令有了更深一步的理解 |