第六章 低级程序设计语言与伪代码计算机操作包括
可编程的(programmable)、存储(store)、检索(retrieve)和处理(process)机器语言(machine language) 即计算机直接使用的二进制编码指令构成的语言
虚拟机(virtual computer) 即为了模拟真实机器的重要特征而设计的假想机器。书中提到的Pep/9是Stanley Warford设计的虚拟计算机,它有四十条机器语言指令。
Pep/9有七个寄存器,书中重点研究三个:
程序计数器(PC):其中包含下一条即将被执行的指令的地址。
指令寄存器(IR):其中包含正在本质性的指令的一个副本。
累加器(A):用来存储数据和运算的结果。指令格式:一条指令由两部分构成,即8位的指令说明符(instruction specifier)(指令的第一个字节)和(可选的)16位的操作数说明符(oprand specifier),因此Pep/9的指令在长度上是1字节还是3字节,取决于是否需要用操作说明符。
一些事例指令:
0000 停止执行
1100 将字载入寄存器A中
1101 将字节载入寄存器A中
1110 存储寄存器A中的字
1111 存储寄存器A中的字
0110 将操作数加到寄存器A中
1000 从寄存器A减操作数Pep/9的输入/输出(I/O)遵循的设计原则是内存映射输入/输出(memory mapped I/O),且Pep/9使用ASCII字符集来表示字符。
Pep/9模拟器执行程序时,像真实机器一样每次只运行一条程序命令,并且遵守读取-执行周期:
1)从由程序计数器确定的存储器位置上获取指令;
2)解码指令,更新程序计算器;
3)获得操作数(如果需要);
4)执行指令。
汇编语言(assembly language):一种低级语言,用助记码表示特定计算机的机器语言指令。汇编器(assembler):把汇编语言程序翻译成机器代码的程序。
Pep/9汇编语言
数字数据、分支(branch)、标签(label),其中标签即对内存位置起的名字,可以将这个名字当作操作数。
汇编语言中的循环,通过重写AddNums程序来使用循环。
表达算法算法(algorithm):解决方案的计划或概要,或解决问题的逻辑步骤顺序。
伪代码(pseudocode):一种表达算法的语言。
伪代码的功能,伪代码没有特定的语法规则,但必须要表示出下面的概念:
1、变量
2、赋值
3、输入/输出
4、选择
5、重复
第七章 问题求解与算法设计如何解决问题
提出问题
寻找熟悉的情况分治法算法计算机问题求解过程
方法总结
1、分析问题
2、列出主要任务
3、编写其余的模块
4、根据需要进行重组和改写测试算法有简单变量的算法,简单(原子)变量是指那些不能被分开的变量,是存储在一个地方的一个值。
带有选择的算法带有循环的算法:
1、 计数控制循环‘使用一个特殊的变量叫做循环控制变量(loop control variable),第一部分是初始化,第二部分是测试,第三部分是增量。
2、事件控制循环也分为三部分:事件必须初始化,事件必须被测试,事件必须更新。
3、平方根,用一个更简单的使用适用于实数以及整数的近似算法。
抽象步骤(abstract step):细节仍未明确的算法步骤。
具体步骤(concrete step):细节完全明确的算法步骤。
数组是同构项目的有名集合,可以通过单个项目在集合中的位置访问它们。项目在集合中的位置叫做索引。与数组有关的算法分为三类:搜索、排序和处理。
搜索算法
顺序搜索遵循了搜索定义。有限数组中的顺序搜索,在算法中使用index而不是position。二分检索(binary search):在有序列表中查找项目的操作,通过比较操作拍吹大部分检索范围。
排序
选择排序冒泡排序,也是一种选择排序法,但在查找最小值的时候采用了不同的方法,而且是非常慢的算法,比较迭代算法的方法通常是看他们对数组排序的迭代次数。有时对他稍加修改,就能成为有些情况的最佳选择。
插入排序递归算法中,递归(recursion)即算法调用它本身的能力,每个递归算法至少有两种情况,基本情况和一般情况,所有递归解决方案的第一步是确定尺寸系数,在每次继续递归之前,先了解一个新的控制结构:子程序语句。
子程序语句有两种形式,一种是指执行特定任务的命名代码,一种是不止执行任务,还返回给调用单元一个值(值返回子程序)。子程序是抽象的一种强力工具。
递归阶乘递归二分检索快速排序的基础是递归几种重要思想
信息隐蔽(information hiding):隐蔽模块的细节以控制对这些细节的访问的做法。抽象(abstraction):复杂系统的一种模型,中包括对观察者来说必需的细节。抽象和信息隐蔽就像一个硬币的两面,信息隐蔽是隐藏细节的做法,抽象则是隐藏细节后的结果。
计算领域中的各种抽象模型:数据抽象(data abstraction):把数据的逻辑视图和他的视线分离开。
过程抽象(procedural abstraction):把动作的逻辑视图和他的视线分离开。
控制抽象(control abstraction):把控制结构的逻辑视图和他的视线分离开。
控制结构(control structure):用于改变正常的顺序控制流的语句。事物命名,给数据和过程一个名字,这些名字叫做标识符。
总结
进入第六、七章,我们也就来到了计算机的软件层。这一部分,是我们每天都在使用,但又知之甚少的,而在现在我们专业的重要学习基础,就是计算机软件层的学习,唯有知其底层逻辑,才可谈解密加密。因此,此部分的重要性十分巨大,这决定了我能在机要密码事业上走多远。