2019-2020-1学期 20192415 《网络空间安全专业导论》第三周学习总结 第六章
2019-2020-1学期 20192415
《网络空间安全专业导论》第三周学习总结
第六章 低级程序设计语言与伪代码
6.1 计算机操作
计算机:能够储存、检索、处理数据的可编程电子设备。
(数据的操作数据的指令是相同的,储存在内存中。————冯·诺依曼体系)
可编程的:指令和数据一起储存在计算机中。要改变计算机对数据的处理,只需要改变指令即可。
控制单元→把数据储存到机器的内存中,在机器内存中检索数据。
算术逻辑单元→以某种方式处理数据(处理:在数据值上执行算数和逻辑操作)
6.2 机器语言
-
机器语言(machine language):由计算机直接使用的二进制编码指令构成的语言
计算机真正执行的指令是由机器语言编写的,固定在硬件中。
指令数量是有限的(Pep/8只有39个机器语言指令)
每条机器指令只能执行一个非常低级的任务,每一个微小的步骤都必须被明确地编码。
这样编写程序太费时间。
-
Pep/8:一台虚拟器(具有寄存器A和两部分指令:说明要执行的动作;说明要使用的数据的位置)
-
虚拟机(virtual computer):为了模拟真实机器的重要特性而设计的假想机器。
机器代码因机器的不同而不同,每一种机器也同样有一个特定的能够被执行的操作集合。
-
重要特性
七个寄存器,重点研究:
可以表示的十六进制数的范围:-7FFF到+777
-
指令格式
指令说明符:要执行什么操作、如何解释操作数的位置
操作数说明符(有些指令没有):操作数本身、操作数地址
寻址模式(assressing mode):
000——操作数——立即寻址:指令当中自带数据,直接读取,最快
001——操作数所在地址——直接寻址:指令中存放的是地址,直接解析这个地址
一元指令:没有操作数说明符,长度为1个字节
-
示例指令
操作码
①0000停止执行
停止指令是一元指令,只占用一个字节,最右三位被忽略。
②1100将操作数载入寄存器A中
载入指令→立即寻址——要被载入寄存器A的值在操作数说明符中,寄存器A中原来的内容会丢失。 →直接寻址——储存单元中储存的内容被载入到寄存器A中
③1110将寄存器A的内容存储到操作数中
将寄存器A的内容储存到操作数本身/操作数中的指定位置 在存储操作码中使用立即寻址是非法的,我们不能尝试将寄存器的内容存储到操作数说明符中。
④&⑤0111将操作数加到寄存器中 与 1000减去操作数
相加/减去:数据或操作数的位置的内容被加/减到寄存器中
⑥01001把字符输入操作数
####** 只能使用直接寻址** #### 从输入设备中读取ASCII码形式的字符,储存在操作数单元符中显示的地址中。
⑦01010从操作数输出字符
可能是立即寻址也可能是直接寻址
-
6.3 一个程序实例
使用双引号来指一组字符,使用单引号指单个字符
6.3.1 手工模拟
一旦指令已被访问,程序计数器就会递增(每次指令有几个字节,PC就加几)
6.3.2 Pep/8模拟程序
逐字节地输入十六进制的代码,每个字节之间用空格隔开,以zz结束程序。
装入程序(loader):软件用于读取机器语言并把它载入内存的部分
6.4 汇编语言
汇编语言给每条机器语言指令分配了一个助记指令码,可用这些指令码代替二进制数字。
汇编语言(assenbly language):一种低级语言,用助记码表示特定计算机的机器语言指令
汇编器(assembler):把汇编语言程序翻译成机器代码的程序
6.4.1 汇编语言
每个寄存器有一个操作码,操作数是十六进制,由Ox说明,寻址模式为i立即寻址、d直接寻址。
6.4.2 汇编器指令
汇编器指令(assenbler directive):翻译程序使用的指令,又叫伪操作。
6.4.3 汇编语言版本
注释(comment):为程序读者提供的解释性文字
汇编过程:
6.4.4 一个新的程序
6.4.5 具有分支的程序
助记忆码:
自己的执行过程:
6.4.6 具有循环的程序
创建计数循环代码,可以重复指定次数。
6.5 表达算法
-
算法(algorithm):解决方案的计划或概要,或解决问题的逻辑步骤顺序
-
伪代码(psedocode):一种表达算法的语言
伪代码语句:
伪代码最终必须被翻译成可在计算机上运行的程序。
一个伪代码语句可以被翻译成多种汇编语言语句,但是只能被翻译成一种高级语言语句。
-
桌面检查(desk checking):在纸上走查整个设计
6.6 测试
测试程序→执行程序
问题
-
如何判断存储单元?如何看出相邻位置?(001F 0030 000A)
-
Pep/8中没有Trace Progam? 如何以相反的顺序输出两个数据?
-
执行后的Assembler Listing与课本相同,为什么说“无效的DECI输入”?既然是负数,不是应该输出E吗?
(已解决)
-
机器语言、汇编语言、高级语言
汇编语言和高级语言是一一对应的关系。
而高级语言可能好几句对应一句汇编语言,所以这说明高级语言更利于编写。
深入了解:https://blog.csdn.net/wangxiaoguaai123/article/details/84322386
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构