2020—2021-1学期20202417《网络空间安全》第三周学习总结
学习内容:《计算机科学概论》第6、7章
经过上两周的学习,我现在对计算机的信息层以及硬件层都有了初步的认识,本周的学习内容将围绕程序设计层展开。
第6 章低级程序设计语言与伪代码,主要讲述了计算机中一些基本的低等级编程语言:机器语言与汇编语言。
知识点:
(一)计算机操作:
1.计算机:能够存储、检索和处理数据的可编程电子设备。
(二)机器语言:
1.机器语言:由计算机直接使用的二进制编码指令构成的语言。每一条机器语言指令只能执行一个非常低级的任务。
2.虚拟机:为了模拟真实机器的重要特征而设计的假想机器。
2.Pep/9:一种虚拟计算机,有40条机器语言指令。
(1)基本特性:
- 内存单元由65536字节的存储空间构成。
- 字长为2字节,或者16位。
- 有七个寄存器:(重点研究3个)程序计数器(PC),其中包含正在被执行的指令或地址。指令寄存器(IR),其中包含正在被执行的指令的一个副本。累加器(A),用来存储数据和运算结果。
(2)指令格式:一条指令由两部分构成,8位的指令说明符和(可选的)16位的操作数说明符。Pep/9的指令在长度上是1字节或3字节,取决于是否需要用操作数说明符。
- 指令说明符:说明了要执行什么操作和如何解释操作数的位置。
- 操作数说明符:存放操作数本身或者操作数的地址。有些指令没有操作数说明符。
3位的寻址模式说明符表示了怎样解析指令中的操作数部分。如果寻址模式是000,那么指令的操作数说明符中存储的就是操作数。这种寻址模式称为立即寻址(i)。如果寻址模式是001,那么操作数说明符中存储的是操作数所在的内存地址名称。这种寻址模式称为直接寻址(d)。
- 没有操作时的指令称为一元指令,这些指令没有操作数说明符,长度为1字节。
(3)一些示例指令:
- 0000停止执行:程序终止。是一元指令,指令说明符最右边三位被忽略,这三位将指示寻址模式。
- 1100将字载入寄存器A中:将一个字(两字节)载入寄存器A中。寻址模式决定了要载入的值要么是操作数说明符中的实际值,要么是在操作数说明符中找到的地址的内存位置。
- 1101将字节载入寄存器A中:只载入1字节而不是2字节。如果寻址模式是立即寻址,那么操作数说明符的第一个字节将被忽略,只有第二个字节会载入寄存器A中。如果寻址模式是直接寻址,则只会载入内存位置的1字节而不是2字节。
- 1110存储寄存器A中的字:把寄存器A中的内容存储到操作数中指定的位置。
- 1111存储寄存器A中的字节:只存储1字节而不是2字节(一个字)。不支持立即寻址模式。只有寄存器A的第二个字节会存储在操作数说明符给出的地址中。
- 0110将操作数加到寄存器A中:有立即寻址与直接寻址两种方式。
- 1000从寄存器A减操作数:与加法操作相似。
3.Pep/9的输入和输出:
遵循原则:内存映射输入/输出:将输入和输出设备与主存中特定的、固定的地址联系起来。输入设备在地址FC15,输出设备在地址FC16。
使用ASCII字符集表示字符。
(三)一个程序实例
1.Pep/9模拟器:
通过选中“构建”>“装入”菜单选项来装入程序。将程序装入内存之后,可以通过选中“构建”>“执行”菜单选项运行程序。
当模拟器执行程序时,它像真实机器一样每次只运行一条程序命令,并且遵循第5章所讲的读取-执行周期:
(1)从由程序计数器确定的存储器位置上获取指令;
(2)解码指令,更新程序计数器;
(3)获得操作数(如果需要);
(4)执行指令。
程序计数器、指令寄存器、累加器(寄存器)都将会显示在模拟器的CPU窗口中,同样还会展示一些其他的寄存器:
2.另一个机器语言实例:
(四)汇编语言
1.汇编语言:一种低级语言,用助记码表示特定计算机的机器语言指令。
2.汇编器:把汇编语言翻译成机器代码的程序。
3.Pep/9汇编语言:
(1)汇编器指令:翻译程序用的指令。
(2)注释:为程序读者提供的解释性文字。
4.数字数据、分支、标签
(1)分支:指出执行下一条指令的指令。
(2)标签:对内存位置起的名字,可以将这个名字当做操作数。
标签和它们对应的地址会在代码清单后以符号表的形式进行展示:
5.汇编语言中的循环
(五)表达算法
1.算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
2.伪代码:一种表达算法的语言。
3.伪代码功能
变量、赋值、输入/输出、选择、重复
- 布尔表达式:评价为真或假的表达式。
- 伪代码语句:
4.执行伪代码算法
5.写伪代码算法
- 桌面检查:在纸上走查整个设计。
6.翻译伪代码算法
(六)测试
1.测试计划:一个文档,说明了要全面测试程序需要运行的次数以及运行程序使用的数据。
2.代码覆盖(明箱)测试法:通过执行代码中的所有语句测试程序或子程序的测试方法。
3.数据覆盖(暗箱)测试法:把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
4.测试计划实现:用测试计划中规定的测试用例验证程序是否输出了预期的结果。
第7章 问题求解与算法设计
知识点:
(一)如何解决问题
1.提出问题
2.寻找熟悉的情况
3.分治法
4.算法:在有限的时间内用有限的数据解决问题或子问题的明确指令集合。
5.计算机问题求解过程
四个阶段:分析和说明阶段、算法开发阶段、实现阶段、维护阶段。
6.方法总结:
分析问题、列出主要任务、编写其余的模块、根据需要进行重组和改写。
7.测试算法
(二)有简单变量的算法
1.带有选择的算法
2.带有循环的算法
- 计数控制循环
- 事件控制循环:嵌套结构:控制结构嵌入另一个控制结构的结构,又称为嵌套逻辑。
- 平方根
抽象步骤:细节仍未明确的算法步骤。
具体步骤:细节完全明确的算法步骤。
(三)复杂变量
1.数组:同构项目的有名集合。
2.记录:异构项目的有名集合。
(四)搜索算法
1.顺序搜索
2.有序数组中的顺序搜索
3.二分检索:在有序列表中查找项目的操作,通过比较操作排除了大部分检索范围。
(五)排序
1,选择排序
2.冒泡排序
3.插入排序
(六)递归算法
递归:算法调用它本身的能力。
1.子程序语句
2.递归阶乘
3.递归二分检索
4.快速排序
- 分裂算法
(七)几个重要思想
1.信息隐蔽:隐蔽的模块的细节以控制对这些细节的访问的做法。
2.抽象:复杂系统的一种模型,只包括对观察者来说必需的细节。
- 数据抽象:把数据的逻辑视图和它的实现分离开。
- 过程抽象:把动作的逻辑视图和它的实现分离开。
- 控制抽象:把控制结构的逻辑视图和它的实现分离开。
- 控制结构:用于改变正常的顺序控制流的语句。
3.事物命名:在编写算法时,我们使用速记短语表示要处理的任务和信息,也就是说,给数据和过程一个名字,这些名字叫做标识符。
4.测试——白盒测试:基于代码本身。黑盒测试:基于测试所有可能的输入值。
最后用两张脑图总结一下: