2020—2021—1学期 20202422《网络空间安全导论》第三周学习总结
第六章:低级程序设计语言与伪代码
一,计算机操作。
计算机的定义:计算机是能够存储、检索、处理数据的可编程电子设备。
二,机器语言。
由计算机直接使用的二进制编码指令构成的语言。计算机真正执行的程序设计指令是用机器语言编写的指令。每种处理器都有自己专用的机器指令集合,每个指令有自己的二进制代码表示。
注意:几乎没有程序是用机器语言编写的,因为太费时间。
三,Pep/9虚拟机。
1,定义。为了模拟真实机器的重要特性而设计的假想机器。每种CPU有它能理解的自己的机器语言,所以通过使用虚拟机来解决此问题。
2,基本特性。
(1)Pep/9有四十条机器语言指令。
(2)内存单元由65536字节的存储空间构成,从0到65535进行编号。Pep/9字长是2字节。
(3)寄存器。如图所示。重点研究其中三个寄存器:
a,程序计数器:下一条即将被执行的指令的一个副本。
b,指令寄存器:正在被执行的指令的一个副本。
c,累加器:用来存储数据和运算的结果。
(4)指令格式。如图所示。指令格式分为指令说明符和操作数说明符。
a,指令说明符:操作代码长度4位到8位不等,后面跟寄存器和寻址模式。寻址模式说明符表示了怎样解析指令中的操作数说明符。000为立即寻址,即操作数说明符中的数就是操作数;001为直接寻址,即说明符中存储的是操作数所在的内存地址名称。
b,操作数说明符:存放操作数本身或者操作数的地址。可有可无。
(5)实例。
不同操作码代表不同的指令意义。如图所示。
如1101:将字节载入寄存器A中。若是立即寻址,则操作数说明符第一字节将被忽略,第二个字节将被载入寄存器A中;若是直接寻址,则只会载入内存位置的1字节而不是2字节。
四,一个程序实例。
编写第一个机器语言程序:在屏幕上显示Hi。如图所示。
注意:本实例中,我们采用立即寻址,寻址模式是000。
五,Pep/9模拟器。
1,我们可以使用Pep/9模拟器来模拟程序。我们逐字节输入十六进制的程序代码到一个有”目标代码“标签的窗口中。程序代码每个字节之间用空格隔开,以zz结束程序。如图所示。
2,在机器语言程序执行之前,它必须被载入存贮器,这一任务通过一个叫做"装入程序"的软件工具实现。
3,当模拟器执行程序时,它像真是机器一样每次指运行一条程序指令,并遵守读取--执行周期,具体不再赘述。
六,汇编语言。
1,汇编语言是第一种帮助程序员的工具,其给每条机器语言指令分配了一个助记指令码。因为在计算机上每个程序最总要被翻译成机器语言的形式,所以一个名为编码器的程序将读取每条指令的助记码,然后把它翻译成等价的机器语言。如图所示。
2,汇编语言相对于机器语言的优势显著。助记码表示含义,0x和十六进制表示操作数,i表示立即寻址,d表示直接寻址,具体如图所示。
3,汇编器指令:汇编器本身使用的指令。如图所示。
4,实例:汇编语言版本的在屏幕上显示Hi的程序如图
六,表达算法。
1,基本概念:
a,算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
b,伪代码:一种表达算法的语言。
2,伪代码的功能。
a,变量:sum,表示值。
b,赋值:把值放入变量的方法。如:set sum to 0,或sum”箭头“0。
c,输入/输出:我们使用write语句进行输出,用read语句进行输入。
d,选择:用选择结构可以选择跳过或执行某项操作。选择结构使用括号中的条件决定执行哪项操作。
e,重复:使用重复结构可以重复执行指令。
3,伪代码语句如图所示。
4,写伪代码算法。注意:要求用户 告诉输入多少数对,方能停止;必须增加numberRead的值。
5,翻译伪代码算法。具体不再赘述。
第七章:问题求解与算法设计
一,如何解决问题。
1945年George Polya写了一本书,提出关于求解问题的方法。
1,提出问题。
2,寻找熟悉的环境。人类是擅长识别相似的情况的,这样会使问题得到简化。
3,分治法。把大的问题分割成能够单独解决的小问题。
4,算法。在计算领域,这种解决方案被称为算法。算法是在有限的时间内用有限的数据解决问题或子问题的明确指令集和。
5,计算机问题求解过程。如图所示。
二,方法总结。
1,分析问题。明确采用什么样的解决方案。
2,列出主要任务
3,编写其余的模块。不断细化每个模块。
4,根据需要进行重组和改写。
三,有简单变量的算法。
1,带有选择的算法。如根据温度选择穿什么衣服,使用IF,ELSE IF等等。
2,带有循环的算法。分为计数控制和事件控制。前者指定过程重复的次数,循环控制变量以一递增。后者重复的次数是由循环体自身内发生的事件控制的。如下图为一个例子。当使用while语句来实现循环时仍分为三部分:事件必须初始化,事件必须被测试,事件必须更新。
3,平方根。我们用一个适用于实数以及整数的近似算法,即先猜测一个可能的答案,然后将答案乘方,与原始值比较,直到两者相等或足够接近。这是一个事件控制的循环。我们说猜测的平方与原始值相差小于0.001则是足够好的。注意:细节仍未明确的算法步骤为抽象步骤,细节完全明确的算法步骤为具体步骤。
四,复杂变量。
1,数组。数组是同构项目的有名集合,可以通过单个项目的位置来访问它们。项目在集合中的位置叫做索引。如图所示。
2,记录。记录是异构项目的有名集合,所谓异构,就是集合中的元素不必相同。
五,搜索算法。
本节我们讨论两种搜索算法。
1,有序数组中的顺序搜索。如果知道数组中的项目是有序的,那么在查找时,到了这个数可能在的位置时就可以停止查找了。如图是无序和有序数组。
2,二分检索。二分检索查找方法类似于查字典的方法,即采用分治法。从中间开始,然后决定要查的项目位于左边还是右边,以此类推,重复此方法。当项目找到了,整个过程将停止。二分检索的例子如图所示。
六,排序。
2,冒泡排序。此方法从数组最后一个元素开始,比较相邻的元素对,如果上面的元素大于下面的元素,就交换两元素的位置。注意:冒泡排序时非常慢的排序算法。
3,插入排序。每次‘’插入“一个元素,将其插入合适的位置,使整体有序,类似于冒泡排序。
七,递归算法。
关于递归算法的概念及后面的子程序语言、快速排序等内容自学较难以理解,我打算老师上完课后再进行补充。
八,重要思想。
1,信息隐蔽。在设计过程中,把细节 延后具有明显的优势,即在进行高层设计时不能见到底层的细节。定义:隐蔽模块的细节以控制对这些细节的访问的做法。
2,抽象。复杂系统的一种模型,只包括对观察者来说必须的细节。
3,事物命名。在编写算法时,我们使用速记短语来表示要处理的任务和信息,也就是给数据和过程一个名字,这些名字叫作标识符。