第六章 低级程序设计语言和伪代码
6.1 计算机操作
计算机是能够对数据进行储存、检索和处理数据的可编程电子设备,用指令实现输入设别和CPU及CPU和输出设备的交互
6.2 机器语言
机器语言 由计算机直接使用的二进制编码指令构成的语言,每条机器语言只能执行一个低级任务
虚拟机
- 基本特性 Pep/9的内存单元是65536字节的储存空间组成,其字长是2字节,向ALU流如/出的数据在长度上是16位
寄存器
使用虚拟机时,可使用进制的位数决定了我们使用内存的大小 - 指令格式
一条指令由两部分组成,即8位的指令说明符(说明指令)和16位的操作数说明符(存放操作数或其地址),因此Pep/9的指令长度为1或3字节
- 示例指令
| 操作码 | 指令的意义 |
| --- | --- |
| 0000 | 停止执行 |
| 1100 | 将字载入寄存器A中 |
| 1101 | 将字节载入寄存器A中 |
| 1110 | 存储寄存器A中的字 |
| 1111 | 存储寄存器A的字节 |
- 0110将操作数加到寄存器A中
Pep/9的输入/输出
(I/O)遵循内存映射I/O原则,与主存中特定、固定的地址相联系。使用ASCII码表示字符
6.3.1 虚拟机模拟器
- 载入机器语言 构建>装入菜单选项
- 将16进制的程序代码输入到由目标代码标签的窗口
- 遵循读取-执行周期
另一种机器语言 读入两个字符作为输入
行为 | 二进制指令 | 十六进制指令 |
---|---|---|
读第一个字符到累加器 | 1101 0001 1111 1100 0001 0101 | D1 FC 15 |
存储字符到储存器 | 1111 0001 0000 0000 0001 0011 | F1 00 13 |
读第二个字符 | 1101 0001 1111 1100 0001 0101 | D1 FC 15 |
打印第二个字符 | 1111 0001 1111 1100 0001 0110 | F1 FC 16 |
储存器载入第一个字符 | 1101 0001 0000 0000 0001 0011 | D1 00 13 |
打印第一个字符 | 1111 0001 1111 1100 0001 0110 | F1 FC 16 |
停止 | 0000 0000 | 00 |
6.4 汇编语言
汇编语言(一种低级语言,用助记码表示特定计算机的机器语言指令)——汇编器(把汇编语言程序翻译成机器代码的程序)——机器码程序
汇编器指令 翻译程序使用的指令,也被称伪操作
注释 为程序读者提供的解释性文字
6.4.2 数字数据、分支、标签
Pep/9机器语言的输出值被定义为单个字符,使用Pep/9汇编语言,可以使用额外的用来展示I/O和整个字符串的指令
分支 支出执行下一条指令的指令
标签 对内存位置起的名字,该名字可当做操作数
6.4.3 汇编语言中的循环
使用AddNums程序 读取数字,每次循环都会读入一个数字加到sum里,每次循环计数器都加1并使用BREQ指令检查它是否到达极限,如是,则循环终止
6.5 表达算法
算法解决方案的计划或概要,或解决问题的逻辑步骤顺序
伪代码 一种表达算法的语言
- 变量
- 赋值
- 输入/输出
- 选择
- 重复
写完代码进行桌面检查
翻译伪代码算法 将算法写成交互式程序,使用ASCII伪操作设置消息,创建代码将消息写出来。通过伪操作将读取的数字设置为0,将数字读入寄存器,建立循环并比较该数字和要读取的数字。进入循环。
6.6 测试
测试计划 说明如何测试程序的文档
代码覆盖(明箱)测试法 通过执行代码中的所有语句测试程序或子程序的测试方法
数据覆盖(暗箱)测试法 把代码作为一个暗箱,基于所有可能的输入测试程序或子程序的测试方法。
测试计划实现 用测试计划中规定的测试用例验证程序是否输出了预期的结果。
第七章 问题求解与程序设计
7.1 解决问题
- 提出问题
- 寻找熟悉的情况
- 分治法 (子任务)
- 算法 (有限的时间内用有限的数据解决问题或子问题的明确指令集合)
- 计算机问题求解过程(分析和说明阶段、算法开发阶段、实现阶段和维护阶段)
- 方法总结(分析问题,列出主要任务,编写其余的模块,根据需要进行重组和改写)
- 测试算法(在编码算法的各种条件下运算程序,然后分析结果)
7.2 有简单变量的算法
选择
循环(计数控制循环,事件控制循环,平方根)
嵌套结构 控制结构嵌入另一个控制结构的结构
抽象步骤 细节仍未明确的算法步骤。
具体步骤 细节完全明确的算法步骤。
7.3 复杂变量
数组(搜索 排序 处理)
记录(异构项目的有名集合)
7.4 搜索算法
顺序,有序,二分检索
7.5 排序
选择排序
冒泡排序(一种选择排序法,但在查找最小值时采用不同方法)
插入排序(将某个元素插入数组)
7.6 递归算法
递归算法 一个算法使用它自己
递归 算法调用他本身的能力,至少有两种情况:基本情况和一般情况
衡量问题大小,确定尺寸系数
子程序出现的地方被称为调用单元。
7.7 几个重要思想
抽象 复杂系统的一种模型,只包括对观察者有用的细节
数据抽象 把数据的逻辑视图和它的现实分离开。
过程抽象 把动作的逻辑视图和它的现实分离开。
控制抽象 把控制结构的逻辑视图和它的现实分离开。
控制结构 用于改变正常的顺序控制流的语句。