20155234第七周《信息安全系统设计基础》学习总结
第4章 处理器体系结构
一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA)。
不同的出路器有不同的ISA。
ISA模型看上去应该是顺序指令执行。
一个流水线化的处理器可在一个时钟周期内同时执行五条指令的不同阶段,并且保留了Y86 ISA的顺序的性质,就得要求处理很多冒险和冲突。
4.1 Y86 指令集体系结构
Y86,包括定义各种状态元素、指令集和他们的编码、一组编程规范和异常事件处理。
- 4.1.1 程序员可见的状态
Y86程序中每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见状态。
8个寄存器和IA32的一模一样,但是Y86每个寄存器是一个字,16位。
三个一位的条件码:ZF、SF、OF。
存储器相当于一个很大的字节数组,保存着程序的数据。用虚拟地址来引用存储器,硬件和操作系统联合起来把虚拟地址翻译成物理地址(实际地址)。
程序状态的最后一个部分是状态码start,它表明程序执行的总体状态。它会指示是正常运行,还是出现某种异常。 - 4.1.2 Y86指令
指令编码长度从一个字节到留个字节不等。
i:立即数
r:寄存器
m:存储器 与movl配合使用第一个字母指明源操作数,第二个字母指明目的操作数。
不允许一个存储器直接与另一个存储器进行数据操作。也不允许直接让立即数传送到存储器。
OPL:addl、subl、andl、xorl。他们只对寄存器数据进行操作。还会对设置条件码。
halt:停止指令
nop:这是一个占位指令,他不做任何事,后续为了实现流水线,它有一定的作用。
xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmov指令,则代表将一个寄存器的值,赋给另外一个寄存器。
jxx:条件跳转指令,根据后面的条件进行跳转。
cmovxx:条件传送指令,后面的xx代表的是条件.特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。
call与ret:方法的调用和返回指令.一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。
push和pop:入栈和出栈操作 - 4.1.3 指令编码
第一个字节表明指令的类型。高4位是代码部分,低4位是功能部分。
程序存储器在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。
当需要指明不应该访问任何寄存器时,就用ID值0xF来表示。
you些指令需要一个附加的四字节常数字
分支指令的调用指令的目的地址是一个绝对地址,而不是相对地址。 - 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的顺序实现很有意思,因为算是接触到了计算机的内核
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | |
---|---|---|
目标 | 5000行 | 30篇 |
第一周 | 6/6 | 1/1 |
第三周 | 150/156 | 2/3 |
第四周 | 77/233 | 1/4 |
第七周 | 1988/2221 | 2/6 |