2017-2018-1 20155313 《信息安全系统设计基础》第七周学习总结

2017-2018-1 20155313 《信息安全系统设计基础》第七周学习总结

本周学习内容

1.ISA

1.1 定义

一个处理器支持的指令和指令的字节级编码就是这个处理器的ISA,包括很多个部分:

  • 指令集
  • 指令集编码
  • 基本数据类型
  • 一组编程规范
  • 寄存器
  • 寻址模式
  • 存储体系
  • 异常事件处理
  • 中断
  • 外部I/O

不同的处理器家族,例如Intel IA32、IBM/Freescale PowerPC和ARM,都有不同的ISA。


1.2 作用

ISA在编译器编写者(CPU软件)和处理器设计人员(CPU硬件)之间提供了一个抽象层:

处理器设计者:依据ISA来设计处理器

处理器使用者:依据ISA就知道CPU选用的指令集,就知道自己可以使用哪些指令以及遵循哪些规范

定义处理器上的软件如何构建,这是ISA的最重要内涵,现代处理器都是支持高级语言编程、操作系统等等特性,ISA要定义出指令集内的指令是如何支撑起C语言里堆栈、过程调用,操作系统里异常、中断,多媒体平台里数字图像处理、3D加速等等。


2.指令集(Instruction set)

2.1 定义

通常会把CPU的扩展指令集称为”CPU的指令集”(因为基本的,类似加减的指令似乎是必须被CPU所支持的指令)。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令集。

指令集可分为复杂指令集(CISC:sisk)和精简指令集(RISC:risk)两部分,这部分暂不继续讨论了。

Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)、SEE3和AMD的3DNow!等都是CPU的扩展指令集,分别增强了CPU的多媒体、图形图象和Internet等的处理能力。

2.2 指令

一条二进制机器指令由:指令码(操作码)+操作数组成。

操作码用来说明:指令的功能和执行的操作;

操作数说明:操作所涉及的源和目的数据的位置;

源:立即数(即指令中包含的常亮)、寄存器、存储器、I/O端口等;


3.HCL(硬件控制语言)

HCL(hardware control language,硬件控制语言),编程语言,用来模拟计算机逻辑。

HCL具有一些硬件硬件描述语言的特性,允许用户描述布尔函数和字级选择操作。另一方面,它缺乏很多在真正的HDL(Hardware Description Language,硬件描述语言)中能找到的特性。例如,声明寄存器和其他存储元素的方法,循环和条件构造,模块定义和实例化的能力,以及位提取和插入操作。

3.1 基本逻辑设计——逻辑门

逻辑门是数字电路的基本计算元素,它们产生的输出,等于它们输入位值的某个布尔函数。如下图:

  

①、这三个逻辑门和我们前面讲C语言运算符是对应的。但是要注意区别:

逻辑门只对单个位进行操作,而不是整个字。这很好理解,因为硬件识别的是高低电平。

②、逻辑门总是活动的,一旦一个门的输入变化了,在很短的时间内,输出就会相应的变化。

3.2 高级逻辑设计——组合电路

上面说的都是单个逻辑门,只能执行很简单的计算,如果遇到稍微复杂点的,就不能计算了,这时候组合电路就出现了。

将很多逻辑门组合成一个网所构建的计算块称为组合电路。构建这个网有两个限制:

①、两个或多个逻辑门的输出不能连在一起。否则它们可能会导致线上的信号矛盾,可能会导致一个不合法的电压或电路故障。

②、这个网必须是无环的,也就是在网中不能有路径经过一系列的门而形成一个回路,这样的回路会导致该网络计算的函数有歧义。

我在网上给了几个非常有用的简单组合电路例子:

1、== 表达式(单个位)

上图用HCL来写就是:eq = (a && b) || (!a && !b)。这个表达式的结果分析,只有a 和 b 都为 0 或者都为 1 的时候,输出才为1。而这个对应于我们高级编程语言中的 a == b 表达式。

2、HCL表达式:(a && s) || (b && !s)

对于上面电路的结果,我们分析如果s为1,则结果为a,否则结果为b。


本周学习问题总结

问题1:HCL表达式和 C语言逻辑表达式的区别

问题1解决:

区别有以下三点:

①、逻辑门是持续输出的,如果电路的输入变化了,在一定的延迟之后,输出也会相应的变化,而C表达式是在执行到的时候才会求值。

②、两者操作的值不同,逻辑门只对值 0 和值 1 进行操作,而C 逻辑表达式允许参数是任意整数,0表示false,其它任意值都表示true。

③、C 逻辑表达式存在短路,比如对于a && b这个符号来说,C语言中的规定是如果前者为假,则后者不会再计算。而HCL当中没有这种说法。


学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 100/100 1/1 5/5
第二周 100/200 2/3 5/10
第三周 100/300 2/5 5/15
第四周 100/400 1/6 5/20
第六周 100/500 1/7 5/25
第七周 100/600 1/8 5/30

代码托管


参考资料

深入理解计算机系统(4.2)------逻辑设计和硬件控制语言HCL

代码驱动的程序设计学习

体系结构-指令集结构

原文地址:https://www.cnblogs.com/bonsai/p/7788798.html