2019-2020-1学期20192423《网络空间安全专业导论》第三周学习总结
一、学习总结
第六章:
- 计算机操作:可编程的、存储、检索和处理
- 虚拟机Pep/8的重要特性
虚拟机:为了模拟真实机器的重要特征而设计的假想机器
虚拟机Pep/8:有七个寄存器,其中包括:
- 程序计数器(PC),其中包含下一条即将被执行的指令的地址。
- 指令寄存器(IR),其中包含正在被执行的指令的一个副本。
- 累加器(是一种特殊的存储寄存器),用来保存操作的数据和结果
- 指令格式 通常一条指令基本结构包括两方面的内容:操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。 在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。
1、程序计数器可以理解为指针,位数取决于内存指令存储器的地址位数.
2、位数取决于编码时规定的指令长度.
3、通用寄存器取决于机器位数.
- 立即寻址
指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的H特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。
- 直接寻址
直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。
4.机器语言与汇编语言
- 机器语言
计算机是不能直接识别我们所编写的C程序或者Java程序的。它只能识别机器语言,而机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集合。
早期计算机就是指可以执行机器指令,进行运算的机器。在我们常用的PC机中,有一个芯片,就是我们常说的CPU可以完成前面所说的计算机的功能,但是每一种这样的微处理器(CPU)由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍,直观性差,还容易出错。 那么该怎么办呢?这时候汇编语言便产生了。
- 汇编语言
汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式。汇编语言是直接面向处理器的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能。 - 运行汇编语言程序步骤:
汇编语言程序输入至汇编器,汇编器输出机器代码程序
5.分支程序与循环程序
- 分支程序
int i = 5;
if (i == 5) {
// TODO
} else {
// TODO
}
- 循环程序 循环结构是指在满足某一条件下进行循环操作,直到不满足条件,或者在循环体内break跳出循环,比如说:
for (int i = 0; i < 10; i ++) {
System.out.println(i);
if (i == 5) {
break;
}
} 上述就是一段循环结构,i在小于的前提下不断输出i的值,如果遇到i等于5,则退出循环。
6.伪代码:一种表示算法的语言
- 变量:出现在伪代码算法中的名字,引用的是内存中存储值的位置。
- 赋值:把值放入变量的方法.
- 输入/输出:从外部世界向计算机中输入数据,将结果输出到屏幕上。
- 选择:用选择结构可以选择执行或跳过某项操作。
- 重复:用重复结构可以重复执行指令
(代码覆盖测试法通过仔细检查程序的代码来决定程序的输入。
数据覆盖法则通过考虑所有可能的输入值来决定程序的输入。)
第七章:
1.计算机问题求解过程:
- -分析和说明阶段
- 算法开发阶段
- 实现阶段
- 维护阶段
2.方法总结:
- 分析问题
- 列出主要任务
- 编写其余的模块
- 根据需要进行重组和改写
3.有简单参数的算法:带有选择的算法、带有循坏的算法(技术控制循环、事件控制循环)
技术控制循环:可以指定过程重复的次数
事件控制循环:循环中重复的次数是由循环体自身内发生的事件控制的循环
数据有两种形式:不可分割的和复合的。数组是一种同构的结构,给出了一个有名称的元素的集合和允许用户访问个别元素在结构中的位置
4.有序数组中的顺序搜索
二分检索: 二分检索算法假设要检索的数组是有序的,其中每次比较操作可以找到要找的项目或把数组减少一半。二分检索不是从数组开头开始顺序前移,而是从数组中间开始。如果要检索的项目小于数组的中间项,那么可以知道这个项目一定不会出现在数组的后半部分,因此只需要搜索数组的前半部分即可。
然后再检测数组的“中间”项(即整个数组1/4处的项目)。如果要检索的项目大于中间项,搜索将在数组的后半部分继续。如果中间项等于正在搜索的项目,搜索将终止。每次比较操作都会将搜索范围缩小一半。当要找的项目找到了,或可能出现在这个项目的数组为空的情况,整个过程将终止。
5.排序
- 选择排序:工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
- 冒泡排序:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
- 插入排序:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
- 快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 6.递归算法:是指可以在子程序自身中出现子程序名的算法。阶乘和二分检索实际上就是递归算法。
二、心得体会
通过对第六章的自我学习,了解了机器语言和汇编语言的概念,用伪代码编写算法的功能,了解了循环与选择的概念,并在Pep/8中以伪代码的方式出现。而第七章则是介绍了人类和计算机问题求解的方法,该章也介绍了子算法语句。
三、思考问题
1、对分支程序的概念存有模糊
2、如何运行汇编语言程序,这和源代码有什么关系?