北航2025面向对象设计与构造第一次作业思路简述
你好!本文章为该博客的第⑩篇文章!
本文章包含北航2025面向对象设计与构造第一次作业的思路简述,期望通过一个我自己用的顺手的构造给予一些设计上的提示。
本文章即将同步投送至该次作业下的讨论区!
需要注意的是,本文仅完全适用于北航2025OO课程,对于之前和之后的课程,课程部分内容可能会发生变动,发生冲突时请以当前课程为准!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
北航2025面向对象设计与构造第一次作业思路简述
前言——为什么要写这个
hw1本身难点在于递归下降的递归过程,以及化简过程中隐含的各类操作。
因此,总结一种尽可能简单,且基本符合课程组形式化描述的设计方法。
同时保证文字尽可能精炼,怕太长的文章没人读。
整体思路
采用递归下降的分析方法,定义乘法方法和加法方法化简表达式。细分为以下四步:
定义类型:好的类型能让后续过程更加容易处理。
词法分析:给出合理的切词方式。
语法分析:处理出表达式树。
括号拆解和同类项合并:拆开各级括号,同时用合并来避免计算过程项数过多。
调整符号和顺序:通过一些显然的优化,让表达式更简 ...
北航CO 2024 P7经验分享
你好!本文章为该博客的第⑨篇文章!
本文章包含北航2024计组实验课P7课下部分的个人理解,第一次课上题目的简要介绍和一种实现思路。
由于P7教程内容实现方法过于宽泛,所以这里我仅对自己的理解做一个分享,并不意味着这一环节的某一部分写法只有文章内一种,如果你觉得其他方法更好可以直接采纳。
本文章参考了 BUAA-CO-Lab P7 MIPS 微体系 | ROIFE BLOG 和 P7 课下 & 课上总结 - 北航计算机组成原理 | Test Blog = FlyingLandlord’s Blog,在此非常感谢两位前辈做出的贡献!(没有这两篇文章的话,我可能还要在P7耗上超过一倍的时间)
本文章将在北航2024计组实验课结束之前持续更新,如果你在阅读本文的过程中遇到了不理解的地方/发现了有笔误的地方(哪怕只是非常小的笔误)/觉得某部分还有更好的实现,请务必在评论区里留下这些想法!(或者,直接联系我本人也可以!)
同样的,请务必仔细读完整篇文章,以及上述推荐的博客后再动手,以保证自己所理解的内容没有巨大的偏差。
需要注意的是,本文仅完全适用于北航2024计组课程,对于之前和之后的 ...
北航CO 2024 P6课上部分题目回忆与分析
你好!本文章为该博客的第8篇文章!
本文章是对课上部分的题目回忆(真的只有部分,关于T1我能说很大一段),不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P6课上题目(T1)回忆
三题仍然为互相独立的添加指令题,这次我只写T1的回忆。
准确来说,我还是只想写这次上机里有含金量的题,T2有含金量的部分几乎为0,T3和第一次P5课上的T3考点重合度太高(需要了解的可自行查阅我之前写的博客),于是我只想完整回忆T1。
T1添加指令为 fmultu,R型指令。具体操作为进行一个需要在乘除模块计算3个周期的计算指令,操作细节如下:
首先,对 GPR[rs] 和 GPR[rt] 进行64位无符号乘法,结果记为 prod。
若 prod 高32位为0,则把 prod[63:32] 保存到 HI 寄存器中,把 prod[31:0] 保存到 LO 寄存器中。
否则,我们找到 prod 中最高位1的出现位置 highbit_1 与 prod 中最低位0的出现位置 lowbit_0 (可以证明,这种情况下 prod 中必定存在至少 ...
北航CO 2024 P5课上部分题目回忆与分析
你好!本文章为该博客的第7篇文章!
本文章是对课上部分的题目回忆(这次真的只有部分,因为关于T3我能说很大一段),不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P5课上题目(T3)回忆
三题仍然为互相独立的添加指令题,但是这次我只写T3的回忆。
准确来说,我只想写这次上机里有含金量的题,T1和T2T3相比有含金量的部分几乎为0,T2又只有一个清空延迟槽可以说道说道,于是我只想完整回忆T3,至于清空延迟槽,我会在写T3正解前先写一下大概内容。
T3添加指令为 lwoc,I型指令。具体操作为,从DM中读取起始地址为 GPRbase+sign_ext(offset<<2∣∣02)GPR_{base}+\text{sign\_ext}(offset<<2 || 0^2)GPRbase+sign_ext(offset<<2∣∣02) 的一整个字,若该结果小于无符号32位整数 0x80000000,则取该结果的低4位进行零扩展后作为写入 GRF 的地址,否则取指令中的 rt 为写入 ...
北航CO 2024 P4课上部分题目回忆与分析
你好!本文章为该博客的第⑥篇文章!
本文章是对课上部分的题目回忆,不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P4课上题目回忆
三题仍然为互相独立的添加指令题。(懒得写RTL了)
第一题添加指令为 eam,R型指令。具体操作为,取出 GPR[rs] 的低16位,作为一个有符号数对17取模,结果必须为0~16的某一个非负数,结果为一个16位的数。之后,若 GPR[rt] 的最高位为1,则将该运算结果零扩展至32位,否则将该运算结果一扩展至32位,将结果存至 GPR[rd] 中。
第二题添加指令为 cptl,I型指令(注意,这个不是J型指令,跳转方式和beq类似)。具体操作为,若 GPR[rs] 的低18位的二进制表示中存在连续6个1,则将PC+4存于 GPR[rt] 中,否则将PC+4存于 GPR[31] 中。之后,把PC的值无条件修改为 PC+4+sign_ext(offset<<2∣∣02)PC+4+\text{sign\_ext}(offset<<2 || 0^2)PC+4+s ...
ICPC 2024 成都站游记
你好,本文章为该博客的第⑤篇文章。
本文章是一篇游记,大部分记录的是当时的所思所感,比较偏个人情绪。
额外的,本文章大部分内容记录于比赛结束当天,在飞机上写的,最后一段于日后才补上。
?
我为什么要打算法竞赛?是热爱催生了功利,还是功利让我产生了热爱的错觉?
作为一个喜欢悠闲的人,我为什么要给自己的时间表安排的这么满?是为了快点迎来理想的生活,还是环境让我遗忘了初衷?
我无法回答这样的问题,我相信大多数人也无法回答类似这样的问题。我相信它们贯穿了我学业生活的始终,也贯穿了每个和我一样的,相当多计科学子学业生活的始终。
但是不管这个问题回答的怎么样,我们仍然坐上了各自选择的无数个航班,起飞 ,降落。
成都。
除了河南话,山东话,最熟悉的应该就是四川话了,理应陌生,但异常亲切。
烧烤,盒饭,火锅,比赛餐,如果我真的有机会细细品尝的话,应该都是好吃的。
热身赛的慌乱,最后一份模板的未打印,DDL的迫近占走练习时间,一切预示着已经过去的未来。想得到周六晚上那份隐隐的不安,应该会成为现实。
只是……来的还是有点残酷:
不是成都,只是赛场。
没有预想的异常的频发,却比异常更为刺痛人心。
9:05。 ...
北航2024面向对象程序先导课程心得
你好!本文章为该博客的第4篇文章!
本文章即将作为该课程结课作业提交至CSDN!
北航2024面向对象程序先导课程心得
前言
在知道这课有博客作业之前,我是动过心思把这课内容写在博客上的,后来犯懒了没做,没想到现在不得不写了(
既然作为作业,那就有作业必须要有的内容,从整体架构到各类心得体会,还有课程建议,这些都是必选项。不过在此之外,我觉得也应该在这里留一些给后人的提示,毕竟如果你是通过我的博客看这个文章的话,那也许你是希望学到一点东西的。
希望各位能通过这个课程和我的博客,能够对面向对象设计的模式有一点理解,至少最好摆脱可能会有的大一的抽象命名和混乱架构(
整体架构
由于这几次作业的迭代任务较为简单,以及最后一次作业实际上给了完成度较高的代码,所以实际上我所完成的结构比较简单扁平。大体上说,我的架构可以分为以下几部分:
副本相关:由Shd,Flm,Stn,Wnd,Frz类管理副本内怪物信息,各怪物具有其Treasure类管理各怪物守卫的宝藏信息,TreasureFactory类作为宝藏工厂。以上内容由AdventureSideGame类统一管理,负责协助AdventureGam ...
北航CO 2024 P3课上部分题目回忆与分析
你好!本文章为该博客的第3篇文章!
本文章是对课上部分的题目回忆,不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P3课上题目回忆
三题为互相独立的添加指令题。(懒得写RTL了)
第一题添加指令为 cwp,I型指令。具体操作为,将 imm 零扩展为32位数后逻辑左移8位的结果与PC的值进行比较,若大于PC,则将 imm 零扩展的结果存入 GPR[rs] 中,否则存入 GPR[rt] 中。
第二题添加指令为 bgc,I型指令。具体操作为,将 GPR[rs] 分割为16个二进制数后,将每个二进制数 iii 转为其格雷码 greyigrey_igreyi,计算所有转化结果的1的个数之和,若该总和大于 rt,则进行类似 beq 的指令跳转,否则PC正常自增。
第三题添加指令为 lwso,I型指令。具体操作为……这题我不建议看文字描述,直接看伪代码吧:
12345678h_temp = GPR[rt] & 0xf;reg_right = (GPR[rt] >> h_temp) & 0x1f ...
北航CO 2024 P2课下部分思路引导
你好!本文章为该博客的第2篇文章!
本文章并不是对作业的题解,虽然可能会涉及若干题目的具体思路,但是文章重心是提供作者对课下作业所需技能知识的个人理解,希望读者能借此补足作业题目里缺失的思路。
以及,本文中的许多“规范”实际上是符合作者习惯并且在课程内行之有效的个人规范,可能存在不足之处,若读者发现问题,请批评指正。
P2课下作业内容介绍
本次课下作业的要求是,使用基于MIPS指令集的汇编语言,在Mars环境下完成一些程序。
具体来说,各题要求大致如下:
计算两个 n×nn\times nn×n 的矩阵乘法。
判断一个长度为 nnn 的字符串是否为回文串。
计算 m1×n1m_1\times n_1m1×n1 矩阵与 m2×m2m_2\times m_2m2×m2 卷积核的卷积结果。
按字典序输出 1∼n1\sim n1∼n 的全排列。
(选做)输出一个 n×mn\times mn×m 大小的迷宫从起点到终点不走回头路的方案数。
(选做)输出 nnn 的阶乘,保证结果不超过 100010001000 位。
拆出结构基础
总述
大概扫一眼各个题目的内容,我们可以归纳出来一些结 ...
单周期CPU搭建的细节记录
固定开场
你好!本文章为该博客的第1篇文章!
本文章将会记录我自己在尝试自行搭建第一个基于MIPS-C指令集架构(不包含特权和异常处理指令)产生的心得!
由于搭建的时候几乎完全是在闭门造车,所以里面的内容可能不正确/不严谨/难扩展/…,暂且请读者自行甄别内容好坏。
理理思路——怎样细化工作?
首先,问一个问题:我们要干什么?
当然,我们的回答可以是搭建一个单周期的CPU。
但是这个回答不够具体,我们不能通过这个回答搞清楚我们如何搭一个CPU。
所以我们根据理论课上的内容,添加一个简单的描述:我们希望把一些模块组合连接起来,搭成一个单周期的CPU。
那么,我们通过这个描述,对这个问题拆开一下,变成这样三个问题:
我们需要用到哪些模块构建这个CPU?
模块内是长什么样子的?
这些模块之间是如何连接的?
对于第一个问题,我们可以很快的用课上知识回答出绝大部分需要的元件:我们需要一个ALU用来计算,需要一块内存(或者两块,一块存指令,另一块存内存)保存数据,需要一些寄存器保存数据和数据交换,需要一个主要的控制器来控制数据的通断。
但是,对于剩下两个问题,如果我们不去关注自己要实现哪些指令的 ...