2021-2022-1学期 20212323《网络空间安全专业导论》第三周学习总结
收获
第六章 低级程序设计语言与伪代码
6.1 计算机操作
可编程的;存储;检索;处理
6.2 机器语言
概念:由计算机直接使用的二进制编码指令构成的语言。
编写机器语言太费时间,一般用高级语言编写大多数程序。
6.2.1 Pep/9:一台虚拟机
虚拟机:为模拟真实机器的重要特征而设计的假想机器。
1.Pep/9的基本特性
其中三个寄存器:程序计数器(PC)、指令寄存器(IR)、累加器(A)
2.指令格式
指令说明符(8位):前四位操作代码,第五位寄存器说明符,最后三位寻址模式
操作数说明符(16位):存放操作数本身或者操作数的位置
寻址模式:立即寻址(i)、直接寻址(d)
一元指令:没有操作数
3.一些示例指令
0000 | 停止执行 | \ |
1100 | 将字载入寄存器A中 | 立即寻址/直接寻址 |
1101 | 将字节载入寄存器A中 | 立即寻址/直接寻址 |
1110 | 存储寄存器A中的字 | 不支持立即寻址 |
1111 | 存储寄存器A中的字节 | 不支持立即寻址 |
0110 | 将操作数加到寄存器A中 | 立即寻址/直接寻址 |
0111 | 从寄存器A减操作数 | 立即寻址/直接寻址 |
6.2.2 Pep/9的输入/输出
设计原则:内存映射输入/输出
输入(I)设备地址:FC15
输出(O)设备地址:FC16
6.3 一个程序实例
6.3.1 Pep/9模拟器
6.3.2 另一个机器语言实例
6.4 汇编语言
汇编语言:一种低级语言,用助记码表示特定计算机的机器语言指令。
汇编器:把汇编语言程序翻译成机器代码的程序。
6.4.1 Pep/9汇编语言
助记码 | 操作数,模式 | 含义 |
---|---|---|
STOP | 停止执行 | |
LDWA | 0×008B,i | 将字008B载入累加器 |
LDWA | 0×008B,d | 将位于008B中的字载入累加器 |
LDBA | 0×008B,i | 将字节008B载入累加器 |
LDBA | 0×008B,d | 将位于008B中的字节载入累加器 |
STWA | 0×008B,i | 将累加器中的字存入位置008B |
STBA | 0×008B,d | 将累加器中的字节存入位置008B |
ADDA | 0×008B,i | 将008B加到累加器 |
ADDA | 0×008B,d | 将位于008B中的字加到累加器 |
SUBA | 0×008B,i | 从累加器减去008B |
SUBA | 0×008B,d | 从累加器减去位于008B中的字 |
汇编器指令:翻译程序使用的指令。
注释:为程序读者提供的解释性文字。
一些汇编器指令(伪操作)
伪操作 | 操作数 | 含义 |
---|---|---|
.END | 表示汇编语言程序的终点 | |
.ASCII | "banana\x00" | 表示一个ASCII字节的字符串 |
.WORD | 0x008B | 在内存中保留一个字,并存值进去 |
.BLOCK | 字节数 | 在内存中保留一些特定的字节 |
6.4.2 数字数据、分支、标签
助记码 | 操作数,模式 | 含义 | |
---|---|---|---|
DECI | 0×008B,d | 读入十进制数字,并存入008B位置 | 不支持立即寻址 |
DECO | 0×008B,i | 写十进制数字139(十六进制8B) | 支持两种寻址模式 |
DECO | 0×008B,d | 写内存单元008B上的十进制数字 | 支持两种寻址模式 |
STRO | 0×008B,d | 写内存单元008B上的字符串 | |
BR | 0×001A | 转到位置001A | |
BRLT | 0×001A | 如果累加器小于零,转到位置001A | |
BREQ | 0×001A | 如果累加器为零,转到位置001A | |
CPWA | 0×008B | 比较内存单元008B和累加器中存储的字 |
分支:指出执行下一条指令的指令。
标签:对内存位置起的名字,可将其作为操作数。
6.4.3 汇编语言中的循环
6.5 表达算法
算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
伪代码:一种表达算法的语言。
6.5.1 伪代码的功能
1.变量
2.赋值
3.输入/输出
字符串:双引号之间的字符。
4.选择
符号//用于加注释
5.重复
布尔表达式:评价为真或假的表达式。
6.5.2 执行伪代码算法
6.5.3 写伪代码算法
桌面检查:在纸上走查整个设计。
6.5.4 翻译伪代码算法
6.6测试
1.测试计划:说明如何测试程序的文档。
2.代码覆盖(明箱)测试法:通过执行代码中的所有语句测试程序或子程序的测试方法。
3.数据覆盖(暗箱)测试法:把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
4.测试计划实现:用测试计划中规定的测试用例验证程序是否输出了预期的结果。
第七章 问题求解与算法设计
7.1 如何解决问题
7.1.1 提出问题
7.1.2 寻找熟悉的情况
7.1.3 分治法
7.1.4 算法
算法:在有限时间内用有限的数据解决问题或子问题的明确指令集合。
7.1.5 计算机问题求解过程
1.分析和说明阶段
2.算法开发阶段
3.实现阶段
4.维护阶段
7.1.6 方法总结
1.分析问题
2.列出主要任务
3.编写其余的模块
4.根据需要进行重组和改写
7.1.7 测试算法
7.2 有简单变量的算法
7.2.1 带有选择的算法
7.2.2 带有循环的算法
1.计数控制循环
循环控制变量
初始化、测试、增量
2.事件控制循环
初始化、测试、更新
嵌套结构:控制结构嵌入另一个控制结构的结构,又称为嵌套逻辑。
3.平方根
抽象步骤:细节仍未明确的算法步骤。
具体步骤:细节完全明确的算法步骤。
7.3 复杂变量
7.3.1 数组
数组:同构项目的有名集合
与数组有关的算法:搜索、排序、处理
7.3.2 记录
记录:异构项目的有名集合
7.4 搜索算法
7.4.1 顺序搜索
7.4.2 有序数组中的顺序搜索
7.4.3 二分检索
二分检索:在有序列表中查找项目的操作,通过比较操作排除大部分检索范围。
7.5 排序
7.5.1 选择排序
7.5.2 冒泡排序
(像冒泡一样)
7.5.3 插入排序
7.6 递归算法
递归:算法调用它本身的能力。
基本情况:答案已知
一般情况:调用自身来解决问题的更小版本的解决方案
7.6.1 子程序语句
调用单元:命名代码出现的地方。
子程序:1.只执行特定任务的命名代码,在调用单元中作为语句;2.不仅执行任务,还返回给调用单元一个值(值返回子程序),用作表达式,返回的值用来评估表达式。
7.6.2 递归阶乘
7.6.3 递归二分检索
7.6.4 快速排序
基本策略是分治法
7.7 几个重要思想
7.7.1 信息隐蔽
信息隐蔽:隐蔽模块的细节以控制对这些细节的访问的做法。
7.7.2 抽象
抽象:复杂系统的一种模型,只包括对观察者来说必需的细节。
数据抽象:把数据的逻辑视图和它的实现分离开。
过程抽象:把动作的逻辑视图和它的实现分离开。
控制抽象:把控制结构的逻辑视图和它的实现分离开。
控制结构:用于改变正常的顺序控制流的语句。
7.7.3 事物命名
标识符
7.7.4 测试
白盒测试、黑盒测试
遇到的问题及解决过程
内容太多记不住
多看几遍
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)