2024-2025-1 学号20241315《计算机基础与程序设计》第五周学习总结

作业信息

这个作业属于哪个课程 [2024-2025-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)
这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05
这个作业的目标 Pep/9虚拟机 机器语言与汇编语言 算法与伪代码 测试:黑盒,白盒
作业正文 https://www.cnblogs.com/tanzitian11/p/18504444

教材学习内容总结

计算机操作

  1. 存储
    概念:存储指的是在计算机中保存数据和信息的过程。
    作用:确保信息的持久性。
  2. 检索
    概念:检索是指从存储的海量数据中查找特定信息的过程。通过检索,可以快速找到特定文件或数据,提高数据访问的效率。
    作用:使用户能够高效地找到和访问已存储的信息。应用场景包括文件查找、数据库查询等。
  3. 处理
    概念:处理是对数据进行计算、分析、转换的过程。计算机通过CPU(中央处理器)执行各种指令,对数据进行处理。
    作用:实现数据的计算、逻辑判断和操作,生成新的结果或输出内容。数据处理广泛应用于日常操作(如计算、统计分析、图像编辑等)。

机器语言

概念:由计算机直接使用的二进制编码指令构成的语言。

Pep9

概念:是一种模拟计算机,用于学习汇编语言和计算机体系结构的基本原理。以下是Pep9的主要特性:

  1. 简单体系结构
    字长和指令:Pep9使用16位的字长,并且具有有限的指令集,适合初学者学习计算机操作的基础知识。
    内存地址空间:Pep9模拟的内存空间为0x0000到0xFFFF,共64KB
  2. 寄存器
    累加器(A):用于存储运算结果或临时数据,许多指令都涉及对A寄存器的操作。
    程序计数器(PC):存储当前指令的地址,执行后自动指向下一条指令的位置。
    指令寄存器(IR):用于存储当前正在执行的指令。
  3. 指令集
    基本指令:Pep9提供多种基本指令,如数据传输、算术运算(加减乘除)、逻辑运算(与、或、非)、条件跳转等。
    寻址模式:支持多种寻址模式,包括直接寻址、间接寻址、立即寻址和基址寻址等,使得学习者能够理解不同的内存访问方式。
    I/O指令:提供输入输出指令,使用户可以模拟控制台输入和输出,便于学习基本的I/O操作。
  4. Pep9模拟器
    Pep9模拟器:提供图形化界面,方便用户编写、调试和运行Pep9汇编程序,观察寄存器、内存和条件码的变化。
    调试功能:包含单步执行、断点设置、内存和寄存器监视等功能,有助于用户分析程序的执行过程和理解计算机的工作原理。
    通过Pep9,学习者可以掌握汇编语言、寄存器操作、指令执行流程等基本概念,是计算机体系结构入门的理想工具。

5.关于Pep9的一些指令:

1.数据传送指令
LDA addr:将内存地址addr中的值加载到累加器A。
STA addr:将累加器A中的值存储到内存地址addr中。
2.算术和逻辑指令
ADDA addr:将内存地址addr中的值加到累加器A。
SUBA addr:从累加器A中减去内存地址addr中的值。
ANDA addr:将累加器A与地址addr中的值执行按位与操作。
ORA addr:将累加器A与地址addr中的值执行按位或操作。
3.输入/输出指令
CHARI:从输入设备读取一个字符,并将其存储到累加器A。
CHARO:将累加器A中的字符输出到输出设备。
指令格式示例:
每条指令的格式通常由操作码和操作数组成,操作码标识指令类型,操作数为内存地址或数据。例如:
LDA 0x0040:表示将地址0x0040中的值加载到累加器A。
BRLE 0x0020:表示当CC为负或零时,跳转到地址0x0020。

汇编语言

汇编语言:一种低级语言,用助记码表示特定计算机的机器语言指令。
汇编器:把汇编语言程序翻译成机器代码的程序。

  1. 数字数据
    概念:数字数据是计算机中存储和处理的基本信息类型,通常表示为二进制形式(0和1)。它可以代表各种类型的数值(整数、浮点数)、字符编码、颜色值、音频信号等。
    作用:计算机通过对二进制数据的操作来执行数学运算、逻辑运算和其他计算任务。
  2. 分支
    概念:分支是控制程序执行流程的一种机制,使程序可以根据条件选择不同的执行路径。
    作用:分支控制允许程序在不同条件下执行不同的代码块,提高程序的灵活性和适应性。
  3. 标签
    概念:标签是程序代码中的一个标记,用于标识某个特定位置,以便程序可以跳转到该位置执行。标签通常用于循环、分支和子程序调用等。
    作用:标签可以作为程序控制流的锚点,使得代码可以在不同位置跳转到标签处执行。例如,在汇编程序中,可以通过标签实现循环和条件跳转。

Pep9的表达算法

在Pep9汇编语言中,表达算法的核心在于使用基本指令进行数据的加载、存储和算术运算。通过指令的组合,Pep9可以表达各种算法逻辑,包括算术运算、逻辑判断、循环结构等。以下是Pep9中表达算法的几个关键点:

  1. 算术运算
    实现两个数相加的算法:
    LDA 0x0010 ; 加载内存地址0x0010的值到A寄存器
    ADDA 0x0012 ; 将地址0x0012的值加到累加器A
    STA 0x0014 ; 将结果存储到地址0x0014
    在这个例子中,我们将地址0x0010和0x0012的值相加,并将结果存储在0x0014中。

  2. 条件判断与分支
    条件判断与分支控制是算法表达的重要部分。Pep9使用条件跳转指令根据条件码状态实现分支选择,例如:

LDA 0x0010 ; 加载地址0x0010的值到A寄存器
SUBA 0x0020 ; 从A寄存器减去地址0x0020的值
BRLT LESS ; 若结果为负,跳转到LESS标签
BRGT GREATER ; 若结果为正,跳转到GREATER标签
在这个例子中,程序会根据A的值与0x0020的值的比较结果,跳转到不同标签执行不同操作。

  1. 循环结构
    循环结构常用于执行重复操作。Pep9可以通过标签和条件跳转指令实现循环。以下是一个简单的递减循环示例:

LDA 0x0010 ; 将起始值加载到A
LOOP: ; 循环开始
SUBA 0x0001 ; 每次循环减去1
BRZ END ; 若A为0,跳转到END结束循环
BR LOOP ; 否则跳转到LOOP继续循环
END: ; 循环结束
该示例中,当累加器A中的值变为零时,循环结束。

c语言键盘输出和屏幕输入

  1. 屏幕输出
  • C语言中用于将数据输出到屏幕上的常用函数是printf。它可以将格式化的文本和变量的值输出到屏幕上。
    语法:printf("格式化字符串", 变量1, 变量2, ...);

  • 格式化字符串:%d(整数)、%f(浮点数)、%c(字符)、%s(字符串)等,格式化符号用于指定输出变量的类型。
    示例:int a = 10;
    float b = 3.14;
    printf("a的值为: %d, b的值为: %f\n", a, b);
    输出结果:
    a的值为: 10, b的值为: 3.140000

  1. 键盘输入
  • 键盘输入常用的函数是scanf,它从标准输入(通常是键盘)中获取数据并存储到指定的变量中。
    语法:scanf("格式化字符串", &变量1, &变量2, ...);
  • &符号:scanf的参数要求是变量的地址,所以在变量前要加&。
    示例:int a;
    float b;
    printf("请输入一个整数和一个浮点数: ");
    scanf("%d %f", &a, &b);
    printf("你输入的整数是: %d, 浮点数是: %f\n", a, b);
    输入与输出过程:
    输入:10 3.14
    输出:你输入的整数是: 10, 浮点数是: 3.140000
  1. 单个字符的输入与输出
  • 如果只需要输入或输出一个字符,可以使用getchar和putchar函数。
  • 字符输入(getchar):从标准输入获取一个字符。
    char ch;
    printf("请输入一个字符: ");
    ch = getchar();
    printf("你输入的字符是: %c\n", ch);
  • 字符输出(putchar):输出一个字符到标准输出。
    char ch = 'A';
    putchar(ch);
    printf("\n");

黑盒和白盒

特性 黑盒测试 白盒测试
测试依据 功能需求、用户视角 程序代码、开发人员视角
关注点 输入输出关系 内部逻辑、路径覆盖
测试用例编写 基于需求,不关注实现细节 基于代码逻辑,覆盖各个代码分支
优点 找出需求偏差、用户体验角度的问题 发现代码逻辑错误、覆盖率高
缺点 可能遗漏一些内部逻辑问题 依赖代码,可能未考虑用户需求偏差

基于AI的学习







代码调试中的问题和解决过程

  • 问题1:在青蛙蹦极有一题编写求和程序,就是输入一系列数字,遇到0就结束程序。一开始我写了一个循环,在codeblock上调试也没有问题,提交后显示我是错误的。
  • 问题1解决方案:我重新写了一个whlie循环,循环体换成
    scanf("%d", &num);
    if (num == 0) {
    break;
    }
    sum += num;
    结果提交后对了。之前程序的break我把它放在了程序的后面,而且我用的是do-while型循环,但是调试的时候也没有问题。很神奇。
posted @ 2024-10-26 23:09  779315  阅读(20)  评论(0编辑  收藏  举报