2019-2020-1学期 20202409 《网络空间安全专业导论》第三周自学总结
第六章、低级程序设计语言与伪代码
6·1计算机操作:
计算机的定义:
能够存储,检索和处理数据的可编程电子设备。
可编程的(programmable)
存储(store)
检索(retrieve)
处理(process)
存储,检索和处理是计算机对数据能够执行的动作。
6·2机器语言:
机器语言(machine language):由计算机直接使用的二进制编码指令构成的语言。
虚拟机(virtual computer machine):为了模拟真实机器的重要特征而设计的假象机器。
*Pep/9的基本特性:
- 程序计数器(PC),包含下一条即将被执行的指令的地址。
- 指令寄存器(IR),包含正在被执行指令的一个副本。
- 累加器(A),用来存储数据和运算的结果。
Pep/9的CPU
Pep/9的存储器
Pep/9的指令格式:
指令说明符(instruction specifier)8位
操作数说明符(operand specifier)16位
操作代码(operation code)4位或8位操作码,寄存器,寻址模式说明符(addressing mode specifier)+指令的指令说明符部分
一些示例指令:
Pep/9的输入/输出:
遵循的设计原则是内存映射输入/输出(memory-mapped I/O)将输入设备与主存中特定的、固定的地址联系起来。在Pep/9中输入设备地址在FC15,输出设备在地址FC16。
模型:
将输入设备中的值载入累加器中,将字符载入累加器中,将累加器中的值存储到输出设备的地址中。使用ASCII字符集来表示字符,我们可以通过使用载入字节和存储字节的操作来实现Pep/9的输入和输出。
读取-执行周期:
1)从由程序计数器确定的存储器位置上获取指令;
2)解码指令,更新程序计数器;
3)获得操作数(when necessary)
4)执行指令。
6·4汇编语言
汇编语言(assembly language):一种低级语言,用助记码表示特定计算机的机器语言指令。
汇编器(assembler):把汇编语言程序翻译成机器代码的程序。
Pep/9汇编语言:
操作数用0x和十六进制表示,接下来是逗号,最后是寻址模式(由字母i(立即寻址)或d(直接寻址)说明)。
汇编器指令(assembler directive):有时也称为伪操作(pseudo-operation),翻译程序时用的指令。
Pep/9汇编器忽视在分号后面的任何字符,这就允许我们在指令旁边添加注释(comment):为读者提供解释性的文字。
数字数据、分支、标签:
分支(branch):指出执行下一条指令的指令。
标签(label):对内存位置起的名字,可以将这个名字当作操作数。标签和它对应的地址会在代码清单后以符号表(symbol table)的形式进行展示。
打印错误信息的标签:BRLT指令被用来在累加器包含附属的时候进行跳转。在打印错误信息后,一条无条件分支将会跳转到程序的最后,标签为finish。
汇编语言中的循环:程序首先从用户那里读取一个数字,用来说明将会有多少个数被加到sum中。每一次循环,计数器都加1并使用BREQ指令检查它是否到达极限,如果到了极限值,那么循环终止,程序停止。如果没有,那么回到循环顶部继续处理下一个值。
6·5表达算法
算法(algorithm):解决方案的计划或概要,或解决问题的逻辑步骤顺序。
伪代码(pseudocode):一种表达算法的语言。
伪代码的功能:
伪代码并非一种计算机语言,而更像一种人们用来说明操作的便捷语言。虽然没有特定的语法规则,但必须要表示出下面的概念:
1·变量:出现在伪代码算法中的名字,引用的是内存中储存值的位置。这些名字是有特定含义的。
2·赋值:set to 或→
右边是访问变量的值,左边就会向其中存入一个值
存入的变量可以是单个的值,也可以是由变量或者操作符号构成的表达式(expression)
3·输入输出:
我们可以使用write语句进行输出,等价于其他单词,使用read语句进行输入,等价于其他单词。
4·选择:可以执行或跳过某项操作,还可以在两项之间进行选择。
5·重复:
使用重复结构可以重复执行指令。
布尔表达式(boolean expression):评判镇货架的表达式。
执行伪代码算法:
把十进制转化为其他进制数字:
While(the quotient is not zero)
Divide the decimal number by the new base
Set the next digit to the left in the answer to the remainder
Set the decimal number to the quotient
写伪代码算法:
桌面检查(desk checking):在纸上走查整个设计。
翻译伪代码算法:
6·6测试
测试计划(test plan):说明如何测试整个程序的文档。
代码覆盖(明箱)测试法(code-coverage(clear-box testing):通过执行代码中所有语句的程序或子程序的测试法。
数据覆盖(暗箱)测试法(data-coverage(black-box)testing):把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的方法。
测试计划实现(test-plan implementation):用测试计划中规定的测试用例验证程序是否输出预期的结果。
第七章、问题求解与算法设计
7·1如何解决问题
提出问题:
寻找相似的情况
分治法
算法(解决方案):在有限的时间内,用有限的数据解决问题或子问题的明指令集合。
计算机问题求解过程:
分析和说明阶段
分析 理解(定义)问题
说明 说明程序要解决的问题
算法开发阶段
开发算法 开发用于解决问题的逻辑步骤序列
测试算法 执行列出的步骤,看他们是否能真正地解决问题
实现阶段
编码 用程序设计语言翻译算法(通用解决方案)
测试 让计算机执行指令序列。检查结果,修改程序,知道得出正确答案
维护阶段
使用 使用程序
维护 修改程序,使它满足改变了的要求,或者纠正其中的错误
方法总结
1·分析问题
2·列出主要任务
3·编写其余的模块
4·根据需要进行重组或改写
7·2有简单变量的算法
简单变量是指那些不能被分开的变量,是储存在一个地方的值。
带有选择的算法 Determine
带有循环的算法:
1·计数控制循环:使用一个特殊的变量叫做循环控制变量(loop control variable)
第一部分是初试化,第二部分是测试,第三部分是增量
while循环被称为前测试循环(pretest loop)
2`事件控制循环
事件必须初始化,事件必须被测试,事件必须更新
嵌套结构(nested structure): 控制结构嵌入另一个控制结构,又称为嵌套逻辑(nested logic)
3`平方根
抽象步骤(abstract step):细节仍未明确的算法步骤。
具体步骤(concrete step):细节完全明确的算法步骤。
7·3复杂变量
数组是同构项目中的有名集合,可以通过单个项目在集合中的位置访问它们。项目在集合中的位置叫做索引。
记录是异构项目中的有名集合,可以单独访问其中的项目。所谓异构,就是指集合中的元素不必相同。集合可以包括 整数或其他类型的数据。
第三个复合数据结构,是面向编程对象中的类。
7·4搜索算法
顺序搜索
有序数组中的顺序搜索
二分检索(binary search)
7`5排序
选择排序法,只有三个抽象步骤,即确定数组是否已经排好序了、找到最小元素索引、和互换两者位置
冒泡排序法:从数组的最后一个元素开始,比较相邻的元素对,如果下面的元素小于上面的元素,则交换两者位置。
在进入循环之前,我们把一个不二变量设为FALSE,发生交换操作,便把它设置为TURE,若布尔变量仍未=为FALSE,则数组有序。
插入排序 类似于冒泡过程。
7·6递归算法
递归(recursion):算法调用它本身的能力。
子程序语句
递归阶乘
递归二分检索
快速排序 有点难度
7·7几个重要思想
信息屏蔽(informaiton hiding):隐蔽模块中的细节以控制对这些细节的访问的做法。
抽象(abstraction):复杂系统的一种模型,只包括对观察者来说必须的细节。
数据抽象(data abstraction):把数据的逻辑视图和它的实现分离开。
过程抽象(procedural abstraction):把动作的逻辑数据区和它的实现分离开。
控制抽象(control abstraction):把控制结构的逻辑视图和它的实现分离开。
控制结构(control structure):用于改变正常的顺序控制流的语句。
事物命名:在编写算法时,我们使用速记短语表示要处理的任务和信息,也就是说给数据和过程一个名字,这些名字叫做标识符。每种语言都有自己构成标识符的规则。数据和动作的标识符都是一种抽象的形式。
测试:白盒测试,基于代码本身;黑盒测试,基于测试所有可能的输入值