草稿箱
2018-2019-1 20165210 《信息安全系统设计基础》第4周学习总结
教材学习内容总结
ISA
- 概念:
一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA。
虽然每个厂商制造的处理器性能和复杂性不断提高,但是不同型号在ISA级别上都保持着兼容。因此,ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层。
这个概念抽象层即ISA模型:CPU允许的指令集编码,且顺序地执行指令,也就是先取出一条指令,等到她执行完毕,再开始下一条。然而,现代处理器的实际工作方式可能跟ISA隐含的计算模型大相径庭。通过同时处理多条指令的不同部分,处理器可以获得较高的性能。但其必须对外表现出符合ISA模型的执行结果。
在计算机科学中,用巧妙的方法在提高性能的同时,又保持一个更简单、更抽象模型的功能,这种思想是众所周知的(抽象)。
- 指令集:
一个ISA可能包含多个指令集
通常会把CPU的扩展指令集称为”CPU的指令集”(因为基本的,类似加减的指令似乎是必须被CPU所支持的指令)。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令集。
80x86指令系统,指令按功能可分为以下七个部分。
(1) 数据传送指令。
(2) 算术运算指令。
(3) 逻辑运算指令。
(4) 串操作指令。
(5) 控制转移指令。
(6) 处理器控制指令。
(7) 保护方式指令。
x86 指令编码的核心是:Opcode、ModRM 以及 SIB。Opcode 提供指令的操作码,ModRM 及 SIB 提供操作数的寻址模式。
RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。
RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
Y86:
-
halt
这个指令将会终止指令的执行。 -
nop
这是一个占位指令,他不做任何事,后续为了实现流水线,它有一定的作用。 -
xxmovl
这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmov指令,则代表将一个寄存器的值,赋给另外一个寄存器。 -
opl
操作指令,比如加法,减法等等。 -
jxx
条件跳转指令,根据后面的条件进行跳转。 -
cmovxx
条件传送指令,后面的xx代表的是条件.特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。 -
call与ret
方法的调用和返回指令.一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。 -
push和pop
入栈和出栈操作
- Y86异常
对Y86来说,程序员可见的状态中就有stat状态码,它标志了程序执行的状态。Y86需要有能力根据stat去做一些处理。捕获为了简单起见,这里除了正常执行之外,都将停止指令的执行。真实当中,会有专门的异常处理程序。
Y86有四种不同的状态码:AOK(正常),HTL(执行halt指令),ADR(非法地址)和INS(非法指令)。
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:Y86和X86的区别
- 问题1解决方案:
有时候Y86需要两条指令来达到X86一条指令就可以达成的目的。比如对于X86指令中的addl$4,%ecx这样的指令,由于Y86当中的addl指令不包含立即数,所以Y86需要先将立即数存如寄存器,即使用irmovl指令,然后再使用addl来处理加法运算
其他(感悟、思考等,可选)
86就是X86的一个缩减版,他的目的就是以简单的结构来实现一个处理器,帮助我们了解处理器的设计和实现。