BUAA-OO-unit1
OO Unit1 Summary
基于度量的代码分析与迭代过程
注:
CogC是认知复杂度,衡量代码的难以理解的程度,CogC说明代码比较难以理解。
ev(G)是基本复杂度,衡量非结构化程度,ev(G)高意味着难以模块化和维护。
iv(G)是模块设计复杂度,衡量模块的调用关系,iv(G)高意味着模块之间的耦合性高,难以隔离和复用。
v(G)是圈复杂度,衡量结构的复杂程度,v(G)是说明代码难以测试和维护。
hw1
重点思路及迭代过程:
修改项的定义,实现将表达式分为不剩下符号的一个个项
term ---->[+-]{0,2} factor 修改定义实现多余符号匹配
项符号去多余判断符号,累加
因子,累乘,最后结果符号设置为项
原子组和慵懒防止递归爆炸
递归处理表达式因子,正则每次匹配内层,但是有特殊情况如下
((x-1))*((x-1)),判断匹配结果表达式后有*取消计算,防止错误匹配的表达式因子
类图:
PatternString类存储所有需要使用的正则表达式,防止重复声明,Simplify为顶层化简函数,内含有化简表达式、化简项、化简因子 ...
BUAA-OS-LAB0
BUAA OS LAB0 实验报告
Thinking
Thinking 0.1
Q:
• 在前述已初始化的~/learnGit 目录下,创建一个名为 README.txt 的文件。执 行命令git status > Untracked.txt(其中的 > 为输出重定向,我们将在 0.6.3 中 详细介绍)。
• 在README.txt 文件中添加任意文件内容,然后使用 add 命令,再执行命令 git status > Stage.txt。 • 提交README.txt,并在提交说明里写入自己的学号。
• 执行命令cat Untracked.txt 和 cat Stage.txt,对比两次运行的结果,体会 README.txt 两次所处位置的不同。
• 修改README.txt 文件,再执行命令git status > Modified.txt。
• 执行命令cat Modified.txt,观察其结果和第一次执行 add 命令之前的 status 是 否一样,并思考原因。
A:
分别处于未追踪,待提交
commit后处于已提交的状态,status里不可见
...
仓颉语言+vscode配置
1.仓颉简介
仓颉编程语言是一种面向全场景应用开发的通用编程语言,可以兼顾开发效率和运行性能,并提供良好的编程体验,主要具有如下特点:
语法简明高效:仓颉编程语言提供了一系列简明高效的语法,旨在减少冗余书写、提升开发效率,例如插值字符串、主构造函数、Flow 表达式、match、if-let、while-let 和重导出等语法,让开发者可以用较少编码表达相关逻辑。
多范式编程:仓颉编程语言支持函数式、命令式和面向对象等多范式编程,融合了高阶函数、代数数据类型、模式匹配、泛型等函数式语言的先进特性,还有封装、接口、继承、子类型多态等支持模块化开发的面向对象语言特性,以及值类型、全局函数等简洁高效的命令式语言特性。开发者可以根据开发偏好或应用场景,选用不同的编程范式。
类型安全:仓颉编程语言是静态强类型语言,通过编译时类型检查尽早识别程序错误,降低运行时风险,也便于代码维护。同时,仓颉编译器提供了强大的类型推断能力,可以减少类型标注工作,提高开发效率。
内存安全:仓颉编程语言支持自动内存管理,并在运行时进行数组下标越界检查、溢出检查等,确保运行时内存安全。
高效并发:仓颉编程语言提供了用 ...
P7-verilog五层流水线CPU(全指令)
verilog五层流水线CPU-P7(全指令+异常中断处理+外设连接)
模块设计
整体视图:
cpu:
1. GRF(寄存器堆)
端口名
输入\输出
位宽
功能
clk
Input
1
时钟信号
reset
Input
1
复位信号
WE
Input
1
使能信号
PC
Input
31:0
pc
A1
Input
4:0
输入寄存器地址端口1
A2
Input
4:0
输入寄存器地址端口2
A3
Input
4:0
输入寄存器地址端口3,写寄存器地址
EXTRA
Input
4:0
输入寄存器地址端口EX,读寄存器地址
WD
Input
31:0
数据输入端口,输入一个32位数据,存入编码为A3的寄存器中
RD1
Output
31:0
输出编码为A1中输入的寄存器中的值
RD2
Output
31:0
输出编码为A2中输入的寄存器中的值
RDEXTRA
Output
31:0
输出编码为EXTRA中输入的寄存器中的值
初始化!!
1234567891011121314151617181920212223242526 ...
P6-verilog五层流水线CPU(全指令)
P6-verilog五层流水线CPU(全指令)
模块设计
整体视图:
1. GRF(寄存器堆)
端口名
输入\输出
位宽
功能
clk
Input
1
时钟信号
reset
Input
1
复位信号
WE
Input
1
使能信号
PC
Input
31:0
pc
A1
Input
4:0
输入寄存器地址端口1
A2
Input
4:0
输入寄存器地址端口2
A3
Input
4:0
输入寄存器地址端口3,写寄存器地址
EXTRA
Input
4:0
输入寄存器地址端口EX,读寄存器地址
WD
Input
31:0
数据输入端口,输入一个32位数据,存入编码为A3的寄存器中
RD1
Output
31:0
输出编码为A1中输入的寄存器中的值
RD2
Output
31:0
输出编码为A2中输入的寄存器中的值
RDEXTRA
Output
31:0
输出编码为EXTRA中输入的寄存器中的值
初始化!!
1234567891011121314151617181920212223242526272829303132333435 ...
P5-verilog五层流水线CPU(简化指令)
verilog五层流水线CPU(简化指令)
模块设计
整体视图:
1. GRF(寄存器堆)
端口名
输入\输出
位宽
功能
clk
Input
1
时钟信号
reset
Input
1
复位信号
WE
Input
1
使能信号
PC
Input
31:0
pc
A1
Input
4:0
输入寄存器地址端口1
A2
Input
4:0
输入寄存器地址端口2
A3
Input
4:0
输入寄存器地址端口3,写寄存器地址
EXTRA
Input
4:0
输入寄存器地址端口EX,读寄存器地址
WD
Input
31:0
数据输入端口,输入一个32位数据,存入编码为A3的寄存器中
RD1
Output
31:0
输出编码为A1中输入的寄存器中的值
RD2
Output
31:0
输出编码为A2中输入的寄存器中的值
RDEXTRA
Output
31:0
输出编码为EXTRA中输入的寄存器中的值
初始化!!
123456789101112131415161718192021222324252627282930313233343536 ...
P4-verilog单周期CPU(简化指令)
verilog单周期CPU(简化指令)
模块设计
整体视图:
1. GRF(寄存器堆)
端口名
输入\输出
位宽
功能
clk
Input
1
时钟信号
reset
Input
1
复位信号
WE
Input
1
使能信号
PC
Input
31:0
pc
A1
Input
4:0
输入寄存器地址端口1
A2
Input
4:0
输入寄存器地址端口2
A3
Input
4:0
输入寄存器地址端口3,写寄存器地址
WD
Input
31:0
数据输入端口,输入一个32位数据,存入编码为A3的寄存器中
RD1
Output
31:0
输出编码为A1中输入的寄存器中的值
RD2
Output
31:0
输出编码为A2中输入的寄存器中的值
初始化!!
123456789101112131415161718192021222324252627282930313233343536373839module GRF( input clk, input reset, input WE, input [31:0] PC, input [ ...
P3-logisim单周期CPU(简化指令)
logisim单周期CPU(简化指令)
模块设计
整体视图:
1. GRF(寄存器堆)
端口名
输入\输出
位宽
功能
clk
Input
1
时钟信号
reset
Input
1
复位信号
WE
Input
1
使能信号
A1
Input
4:0
输入寄存器地址端口1,对应指令码25:21
A2
Input
4:0
输入寄存器地址端口2,对应指令码20:16
A3
Input
4:0
输入寄存器地址端口3,根据R型或I型指令分别对应指令码15:11和20:16
WD
Input
31:0
数据输入端口,输入一个32位数据,存入编码为A3的寄存器中
RD1
Output
31:0
输出编码为A1中输入的寄存器中的值
RD2
Output
31:0
输出编码为A2中输入的寄存器中的值
2. DM
使用一个RAM实现,str口连接MemWrite信号,ld口连接Mem2Reg信号,clr口连接reset异步复位信号,输入数据为GRF模块的RD2口。
DM中一个字是一个地址,按字节为14位(16K),按字为12位地址端口应该连接ALU ...
mips知识点
CO初识mips知识点
寄存器地址:
伪指令
**.data:**用于预先存储数据的伪指令的开始标志。
**.text:**程序代码指令开始的标志。
**.word:**以字为单位存储数据。
**.asciiz:**以字节为单位存储字符串。
**.space:**申请若干个字节的未初始化的内存空间。
V0 的不同值
常用:
Service
Code in $v0
Arguments
Result
print integer
1
$a0 = integer to print
print float
2
$f12 = float to print
print double
3
$f12 = double to print
print string
4
$a0 = address of null-terminated string to print
read integer
5
$v0 contains integer read
read float
6
$f0 contains float read
read double
7
...
vscode配置
1.vscode简介
VSCode是微软出的一款轻量级编辑器,它本身只是一款文本编辑器而已,并不是一个集成开发环境(IDE),几乎所有功能都是以插件扩展的形式所存在的。因此,我们想用它编程,不只是把vscode下载下来就行,还需要安装对应编程语言的扩展以及相应的编译器。
2.安装vscode
进入vscode官网:https://code.visualstudio.com/
点击红色圈出区域,见到下图所示选项。
根据自己电脑的系统选择相应的下载项。(注:stable是稳定版本;insider是内部测试版本,可能会出问题,建议选stable)
下载完成后得到下图所示安装程序,双击进入安装程序
这里我只勾选了这两个
注意,这里安装路径最好是全英文的,不要创建中文文件夹。另外根据硬盘实际情况看要不要放在c盘
安装完成后打开vscode,点击红色圈出区域,在搜索框分别搜索“C/C++”以及“chinese”,安装C/C++插件(必须有)与简体中文插件编译运行插件(个人推荐)
至此,vscode安装以及必备插件安装就完成了,可以关掉vscode了
3.安装MinGW-w64
...