2021-2022-1学期 20212324 《网络空间安全导论》 第三周学习总结
晋博 2021/10/12
一 我所学习到的
第6章 低级程序设计语言与伪代码
计算机能够存储、检索和处理数据,可以输入数据并输出处理后的数据。本章是程序设计层的第一章,主要介绍了在程序设计初期使用的两种初级的语言:机器语言和汇编语言以及伪代码。
一、 机器语言、Pep/9汇编语言和伪代码
- 机器语言:是一套机器硬件能够直接识别并执行的指令,由二进制编写。
- Pep/9汇编语言:使用助记码而不使用二进制数表示的指令。通过汇编器,汇编语言被翻译为等价的机器语言,然后由机器执行。
- 伪代码:为表示算法而使用的便捷形式的语言,无特定的语法规则,但拥有以下概念:变量、赋值、输入、输出、选择和重复。
二、 Pep/9 虚拟机及其特性
Pep/9虚拟机的内存单由65536个字节的储存空间构成,地址由两字节16位构成;字长为2字节(16)位;拥有7个寄存器,重点研究以下三个:
- 程序记数器(PC),其中包含下一条即将被执行的指令的地址。
- 指令寄存器(IR),其中包含正在被执行的指令的副本。
- 累加器(A),用来储存数据和运算的结果。
程序在执行之前必须被载入存储器。
执行程序时遵守读取-执行周期
- 从由程序计数器确定大概的存储器位置上获取指令
- 解码指令,更新程序计数器
- 获得操作数
- 执行指令
三、 Pep/9机器语言的程序格式
- 指令说明符(1字节)
- 操作代码(4位)
- 寄存器说明符(1位)
- 寻址模式(3位)
- 立即寻址(000):操作数说明符包含将要处理的数据
- 直接寻址(001):操作数说明符包含将要处理的数据的地址
- 操作数(要处理的数据)说明符(3字节,可选)
四、Pep/9汇编语言分类
1、常规指令,即机器语言中计算机执行的常规指令的助记指令码,格式为助记码+操作数+模式
2、汇编器指令,即汇编器本身使用的翻译程序使用的指令,也被称作伪操作
- .END--程序的终点;
- .ASCII--将一个ASCII字节的字符串对应的码值存储到内存.
五、 创建和运行汇编语言程序的步骤
选择汇编器,使用助记码编写程序,适当添加注释和标签增加可读性,选择“运行源代码”
六、 伪代码的功能
1.变量 出现在伪代码的名字,引用的是内存中存储值的位置。
2.赋值 把值放入变量
3.输入和输出
4.选择
5.重复
七、 算法执行步骤
编写代码-存储代码-翻译算法-测试
算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
八、 测试方法
代码覆盖(明箱)测试法(code-coverage(clear-box)testing):通过执行代码中的所有语句测试程序或子程序的测试方法。
数据覆盖(暗箱)测试法(data-coverage(black-box)testing):把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
第7章 问题求解与算法设计
本章介绍了解决问题(设计算法)的一般步骤,之后介绍了循环的两种,之后是数据的两种形式,然后是排序算法与检索算法
一、 如何解决问题
类似于George Polya描述的解决数学问题的思路,如和解决计算机问题(设计算法),同样可以通过这一过程。
- 提出问题
- 寻找熟悉的情况(带入模型)
- 分治法(将一个大问题划分为几个能解决的小单元)
- 得到解决方案-算法
- 测试算法
总结来说,即分析说明阶段,算法开发阶段,实现阶段和维护阶段
二、 自顶向下的方法
- 分析问题
- 列出主要任务
- 编写其余的模块
- 根据需要进行重组和改写
三、 简单类型与复合类型
- 简单类型:包括语言的基本类型和抽象数据类型。
- 复合类型:由简单类型构成。
四、 循环的分类
计数控制循环:执行预定次数的循环(程序计数器)
事件控制循环:执行到循环中某事件改变
五、 数组和有序数组
前者是杂乱无序排列的数组,后者是以一定的顺序排列的数组
六、 书中介绍的检索算法
- 顺序搜索
按搜索定义,依次查找 - 二分检索
算法假设要检索的数组是有序的,其中每次比较操作可以找到要找的项目或把数组减少一半。二分检索不是从数组开头开始顺序前移,而是从数组中间开始。如果要搜索的项目小于数组的中间项,那么可以知道这个项目一定不会出现再数组的后半部分,因此只需要搜索数组的前半部分即可。
是快速排序的基础。
七、 书中介绍的排序算法
- 选择排序
依次查找符合顺序的个体,每找到一个便将之以所需顺序排列,之后再重新经行查找,反复操作直至排序成功。需要两个完整列表的空间。 - 插入排序
每次迭代后,一个元素将被放在相对于其他元素来说适当的位置上。 - 冒泡排序
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列)。 - 快速排序算法
其为对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序数列。
八、 递归
- 递归(recursion):算法调用它本身的能力。
每个递归算法至少由两种情况:基本情况和一般情况
基本情况是答案已知的情况;一般情况则是调用自身来解决问题的更小版本的解决方案。
因为一般情况下解决的是原始问题越来越小的版本,所以程序最终达到基本情况,即答案是已知的,所以递归停止
可以实现阶乘和二分检索。
二、遇到的困难及解决
对于汇编语言中的.ASCII指令理解不了,等老师上课后通过一个程序实现了对此条指令的运用后理解了其功能和涵义。