2024-2025-1 20241420姚金济 《计算机基础与程序设计》第五周学习总结
作业信息
|作业所属课程|<班级链接>https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
|作业要求|<链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05
|这个作业的目标|
①Pep/9虚拟机
②机器语言与汇编语言
③算法与伪代码
④测试:黑盒,白盒
教材学习内容总结
第6章 低级程序语言与伪代码
1. Pep/9的基本特性:
内存单元:65536字节存储空间,从0到65535编号。
字节组成:每个字节由8位组成。
字长:16位。
中央处理器(CPU)组件:
程序计数器(PC):存储下一条指令地址。
指令寄存器(IR):存储正在执行的指令副本。
累加器(A):存储数据和运算结果。
存储器地址:从0000到FFFF,包括FFFE。
2. 二进制和十六进制数:
一个字节最大表示的十进制数是255(二进制11111111,十六进制FF)。
一个字(16位)最大表示的十进制数是65535(二进制1111111111111111,十六进制FFFF)。
有符号数范围:-32767到+32767。
3. 指令格式:
指令由8位的指令说明符和可选的16位操作数说明符组成。
指令长度:1字节(无操作数说明符)或3字节(有操作数说明符)。
指令说明符包含操作代码(opcode)和寻址模式说明符。
操作代码长度:4位。
寻址模式说明符:3位,决定如何解析操作数。
立即寻址(i):操作数直接在操作数说明符中。
直接寻址(d):操作数说明符中存储操作数的内存地址。
4. 示例指令:
一元指令:没有操作数说明符,长度为1字节。
0000 :停止执行。
1100 :将字(两字节)载入寄存器A中。
1101 :将字节载入寄存器A中。
1110 :存储寄存器A中的字。
1111 :存储寄存器A中的字节。
0110 :将操作数加到寄存器A中。
1000 :从寄存器A减去操作数。
5. 输入/输出 (I/O) 操作:
Pep/9系统模拟键盘输入和屏幕输出。
输入设备地址:FC15。
输出设备地址:FC16。
使用ASCII字符集表示字符。
通过累加器进行字符的输入和输出操作。
6. Pep/9模拟器:
模拟器允许模拟Pep/9程序的执行。
程序代码以十六进制格式输入,并以'zz'结束。
7. 程序实例:
显示了如何使用Pep/9机器语言指令在屏幕上显示字符。
使用了载入、存储和停止指令。
程序代码以二进制和十六进制表示。
第4章 键盘输入和屏幕输出
常用转义字符:
转义字符 含义 转义字符 含义
\n 换行(Newline) \a 响铃报警提示音(Alert or Bell)
\r 回车(不换行)(Carriage Return) " 双引号(Double Quotation Mark)
\0 空字符(Null),通常用作字符串结束标志 ' 单引号(Single Quotation Mark)
\t 水平制表(Horizontal Tabulation) \ 反斜线(Backslash)
\v 垂直制表(Vertical Tabulation) ? 问号(Question Mark)
\b 退格(Backspace) \f 走纸换页(Form Feed)
\ddd 1到3位八进制ASCII码值所代表的字符
\xhh 1到2位十六进制ASCII码值所代表的字符
C语言中使用 %c 格式符输入字符时可能遇到的问题:在C语言中, scanf 函数在读取输入时,会将换行符留在输入缓冲区中。如果后续使用 %c 读取字符,这个换行符可能会被错误地读取为字符,导致程序逻辑错误。
解决方法:
方法1:通过 getchar() 显式读取并丢弃换行符,确保后续的 %c 读取不会读取到错误的字符。
方法2:在 %c 格式符前加一个空格,这样 scanf 会自动忽略任何空白字符(包括空格、制表符和换行符),直到遇到非空白字符才停止读取,从而避免读取到换行符。
这两种方法都可以有效地解决由于缓冲区中的换行符导致的输入问题,确保程序能够正确地读取用户输入的字符。
基于AI的学习
代码调试中的问题和解决过程
-
问题1:设定数量变量为num,解决无限量输入整数求和问题(输入0终止)时循环结构进行后输出结果未计入第一个结果
-
问题1解决方案:将循环结构外的语句删掉,并且初始化num的值为1
-
问题2:解决正弦转换问题时出现变量精确紊乱,输出随机数结果
-
问题2解决方案:定义double常量PI
-
计划学习时间:10小时
-
实际学习时间:8小时