2018-2019-1 20165237 《信息安全系统设计基础》第四周学习总结
处理器体系结构
Y86指令集体系结构
- 内容:定义一个指令集体系结构,包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理
程序员可见状态:
- Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
- Y86具体包括:8个程序寄存器、3个条件码ZF\SF\OF、程序计数器(PC)。
- Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。
Y86指令
Y86指令
- 指令介绍:
- halt:这个指令将会终止指令的执行
- nop:这是一个占位指令,他不做任何事,后续为了实现流水线,它有一定的作用
- xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数.比如rrmov指令,则代表将一个寄存器的值,赋给另外一个寄存器
- opl:操作指令,比如加法,减法等等
- jxx:条件跳转指令,根据后面的条件进行跳转
- cmovxx:条件传送指令,后面的xx代表的是条件.特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器.
- call与ret:方法的调用和返回指令.一个将返回地址入栈,并跳到目标地址.一个将返回地址入PC,并跳到返回地址.
- push和pop:入栈和出栈操作
指令编码
- 在上图的右边,是指令所占的字节数或者说编码.一般两个寄存器占用一个字节,存储器则占用四个字街,指令的编码和功能占用一个字节.因此可以看到,比如rrmovl指令,它的字长长度是2,其中第一个字节代表了指令rrmovl,第二个字节代表了两个寄存器.
- 对于opl,jxx,cmovxx指令来说,都有一个fn标致,占用4个二进制位(半个字节).这个便是指令的功能部分,这个是由于他们的指令编码一样,但功能有所不同所造成的.比如对于opl,就有加,减,与,异或等操作,那么它们的指令编码第一个字节就分别为十六进制的60,61,62,63.
- 对于寄存器的表示,是使用4个二进制位表示的,这是一个ID标志.所有的寄存器可以看做是一个寄存器文件,其中的ID标志就类似于它们的地址.对于一些只需要一个寄存器的指令来说,另一个寄存器标志位使用0xF表示.
- 还有的指令需要一个字的常数,比如irmovl指令,call指令等等.这种指令,将会把常数放在最后的四个字节当中,顺序按照大端法或小端法表示(与机器和OS有关).对于call指令来说,这四个字节就是一个地址,这个地址就是绝对地址,指向了存储器当中的某一个位置,这个位置存储着代码.采用绝对地址是为了描述简单,真实当中,时采取的基于PC的相对地址.
Y86异常
- 对Y86来说,程序员可见的状态中就有stat状态码,它标志了程序执行的状态.Y86需要有能力根据stat去做一些处理.捕获为了简单起见,这里除了正常执行之外,都将停止指令的执行.真实当中,会有专门的异常处理程序.
- Y86有四种不同的状态码:AOK(正常),HTL(执行halt指令),ADR(非法地址)和INS(非法指令).
Y86程序
- Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。
- Y86没有伸缩寻址模式。
- 以“.”开头的词是汇编器命令,命令.pos0告诉汇编器应该从地址0处开始产生代码。
- 创建Y86代码的唯一工具是汇编器。
- YIS:指令集模拟器
- Y86和X86的区别在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的.
- 比如对于X86指令中的addl $4,%ecx这样的指令,由于Y86当中的addl指令不包含立即数,所以Y86需要先将立即数存如寄存器,即使用irmovl指令,然后再使用addl来处理加法运算.
- 总的来说,Y86就是X86的一个缩减版,他的目的就是以简单的结构来实现一个处理器,帮助我们了解处理器的设计和实现.
一些Y86指令的详情
- 大多数Y86指令是以一种直接的方式修改程序状态的。
- 执行pushl和popl指令时,处理器的行为是不确定的,因为要入栈的寄存器会被同一条指令修改。通常有两种约定:
- 压入/弹出%esp的原始值
- 压入/弹出%esp-/+4后的值
逻辑设计和硬件控制语言HCL
逻辑门
- 逻辑门是数字电路的基本计算元素,它们的输出,等于它们输入位值的某个布尔函数。
- 逻辑门总是活动的,一旦一个门的输入变化,在短时间内,输出就会跟着变化。。
组合电路和HCL布尔表达式
- 组合电路:将很多的逻辑门组合成一个网,能构建计算块。
- 多路复用:根据输入控制信号的值,从一组不同的数据信号中选出一个。
- 构建这些网有2条限制:
- (1)两个或多个逻辑门的输出不能连接在一起
- (2)这个网必须是无环的。
- HCL表达式和C语言中逻辑表达式的区别:
- (1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
- (2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。
- (3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。
学习进度条
|
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
目标 |
5000行 |
20篇 |
400小时 |
|
第一周 |
61/61 |
1/1 |
10/10 |
了解vim,gcc,gdb基本操作 |
第二周 |
0/61 |
1/2 |
10/20 |
了解信息的表示和处理 |
第三周 |
21/81 |
1/3 |
10/30 |
更深层次了解信息处理 |
第四周 |
29/100 |
2/5 |
10/40 |
Y86处理器 |
posted @
2018-10-21 21:42
好好学习JAVA
阅读(
137)
评论()
编辑
收藏
举报