20145235 《信息安全系统设计基础》第06周学习总结 _01
4.1.4 Y86异常
关于可见状态码Stat的几个值:
1:AOK 程序执行正常
2:HLT 表示处理器执行了一条halt指令
3:ADR 表示处理器从一个非法的存储器地址读或者向一个非法的存储器地址写
4:INS 表示遇到非法指令
4.1.5 Y86程序
“.”开头的词是汇编器命令,告诉他们汇编器调整命令,以便在哪产生代码或者插入数据
P239 Y86程序结构:
- 声明代码产生的起始地址 (.pos 0 )
- 初始化栈指针和帧指针
- 为代码所声明的数据开辟地址
- 给栈分配空间
指令模拟器,成为YIS。
模拟器只打印出在模拟过程中被改变了的寄存器或存储器中的字。左边是原始值,右边是最终值。
4.1.6
对于“pushl %esp”在上学期的汇编中有详细指明:是现将数据push,然后对指针sp进行修改;而对于“popl %esp”,是先修改指针,然后再进行pop。然而4.1.6中说是不确定的。
4.2 逻辑设计和硬件控制语言HCL
要实现数字系统,需三个主要组成部分:
计算对位进行操作的逻辑结构、存储位的存储器元素,以及控制存储器元素更新的时钟信号。
4.2.1 逻辑门
逻辑运算:&&、||、!
位运算:&、|、~
4.2.2 组合电路和HCL布尔表达式
将很多逻辑门组合成一个网,就能构建计算快,称为组合电路。限制:输出不能连在一起、必须保证无环
4.2.3 字级组合电路和HCL整数表达式
大二学过HDL,这节已经掌握了。
4.2.5 存储器和时钟
存储设备都由同一个时钟控制。
时钟寄存器(简称寄存器)存储单个位或字。时钟信号加载输入值。
随机访问存储器(简称存储器)存储多个字,用地址来选择该读或该写哪个字。
在硬件中,寄存器直接将她的输入和输出线连接到电路的其他部分。在机器级编程中,寄存器时CPU中为数不多的可寻址的字,这里的地址是寄存器的ID。
寄存器:输入x、当前状态、输出。
寄存器文件:
读端口:地址输入(srcA和srcB)、数据输出(valA和valB)
写端口:dstW(地址输入)、valW(数据输入)
时钟信号
寄存器文件不是组合电路,因为它有内部存储,它是一个以地址为输入、数据位输出的组合逻辑块。
数据存储器:有一个地址输入、写的数据输出、读的数据输出。
4.3 Y86的顺序实现
4.3.1 将处理组织成阶段
①取指(地址为程序计数器PC的值)
寄存器读取指令字节(4位指令代码icode 4位功能代码ifun)
寄存器指示符字节(指明一个或者两个寄存器操作符ra和rb)
取出四字节常数(valC)
计算出下一条指令的地址valP=PC+已取出指令的字节数(未更新)
②译码
从寄存器文件中读入最多两个操作数,得到值valA或者valB
③执行
算数单元/逻辑单元(ALU)要么执行指令指明的操作,计算存储器引用的有效地址;要么增减栈指针。得到valE。
这里可以设置条件码
④访存
可以将数据写入存储器,或者从存储器读出数据。读出的值为valM。
⑤写回
写回阶段最多可以将两个结果到寄存器文件中。
⑥更新PC
PC=valP
执行这些阶段发声异常时,处理器会停止:它执行halt指令或者非法指令,或者读或写非法地址。然后进入异常处理模式,执行异常的类型所决定的代码。
OPl(四个整数操作)都由相同的icode。
感想:
这周总算是接触到了计算机内核的东西(可以说是内核吧),然后突然就把之前所学到的知识自上而下的串联起来了:从一个C程序代码,到汇编代码,再到机器码,最后到计算机处理器如何执行,虽然之前学汇编的时候很困惑,通过这周的学习就在脑海里构架了一个知识框架。这周内容包括了Y86指令集,HCL,以及Y86顺序实现。前面两个很好掌握,Y86和IA32差不多,比IA32简单;HCL和大二学的HDL很相似,比HDL简单多了。Y86的顺序实现很有意思,因为算是接触到了计算机的内核。
来源:https://www.cnblogs.com/20145235litao/p/5991412.html