26考研 | 王道 | 计算机组成原理 | 四、指令系统
26考研 | 王道 | 计算机组成原理 | 四、指令系统1.指令系统0.指令集体系结构 1. 指令格式 1.按地址码数目不同来分 2.指令-按指令长度分类机器字长和存储字长固定不变。 3.指令-按操作码长度分类 4.指令-按操作类型分类 程序控制类指令除了上述还有循环指令 2. 扩展操作码指令格式 2.指令的寻址方式###1. 指令寻址 1.顺序寻址(PC)+“1”–>PC 图中的指令字长是变化的,不是右边的16bit,所以才会每次读入一个字 2.跳跃寻址:由转移指令指出本节回顾 转移指令是通过修改PC实现的 程序计数器PC:存放下一条指令所在单元的地址 累加器ACC:用来存放操作数或运算结果 指令寄存器IR:临时放置从内存里面取得的程序指令的寄存器,用于存放当前从主存储器读出的正在执行的一条指令。 地址寄存器MAR:用来保存当前CPU所访问的内存单元的地址。 2. 数据寻址 1.常见寻址方式 取指令也需要一次访存(如果指令字长等于存储字长的话) 直接寻址 间接寻址 寄存器寻址 寄存器间接寻址 隐含寻址 立即寻址 2....
Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合
Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合17.电话号码的字母组合17. 电话号码的字母组合 - 力扣(LeetCode) 思路: 笔者用index代替i,这里的index其实就是digits数组的下标 按照灵神的回溯三问,那就是 1.当前的操作:找到本层要给path[index]里面填入哪个字母,很明显的是每层就是一个数字的那几个字母,所以就是选定一个数字然后从它的字母中选一个 2.子问题:构造字符串>=index的部分,其实也就是说明经过了index层选择之后,我们已经确定了i位字母 3.下一个子问题:构造字符串>=index+1的部分,就是说明我们下一层的递归参数是index+1,因为我们已经在本层的字母中选择了一个,所以要继续往下走了,表现在数组上就是继续往下遍历digits 注意的细节: 映射的建立,下标要对上数字,也就是让映射的数组从下标2开始而不是0,这样会方便很多 完整代码: 1234567891011121314151617181920212223242526272829class Solution...
26考研 | 王道 | 计算机组成原理 | 三、存储系统
26考研 | 王道 | 计算机组成原理 | 三、存储系统3.1 存储系统基本概念 相联存储器的基本原理是指把存储单元所存的内容的某一部分作为检索项去检索该存储器,并把存储器中与该检索项符号的存储单元内容进行读出和写入。所以是按内容或者地址进行寻址的,价格比较昂贵 一般用来制作TLB,相联Cache等 存储器的层次化结构 主存和辅存之间的数据调动是由硬件和操作系统共同完成的,仅对应用级程序员透明 存储器的分类–层次 存储器的分类–存储介质 半导体存储器:主存、Cache 磁表面存储器:磁盘、磁带(以磁性材料存储信息) 光存储器:光盘(以光介质存储信息) 存储器的分类–存取方式 相联存储器既可以按地址又可以按内容寻址。 存储器的分类–信息的可更改性 CD-ROM是只读型光盘存储器,不属于只读存储器ROM 存储器的分类–信息的可保存性 RAM都是易失性存储器; ROM都是非易失性存储器; 存储器的性能指标 3.2 主存储器1....
Day129 | 灵神 | 二叉树 | 二叉树的堂兄弟节点II
Day129 | 灵神 | 二叉树 | 二叉树的堂兄弟节点II2641.二叉树的堂兄弟节点II2641. 二叉树的堂兄弟节点 II - 力扣(LeetCode) 思路: 笔者这道题就算告诉我要用层序遍历,后面我也没做出来….. 要从父节点思考子节点,而不是单纯从子节点下手 以这个例子为例 要算第三层,就要考虑第二层,当我们还在遍历第二层的时候,就把第二层的节点存起来 然后遍历一次第二层节点得到 第三层节点的和 10+1+7=18 为什么要算和是多少呢?因为我们要知道4的左右孩子的值是多少就必须知道9的左右孩子的和 而我们把所有结点的和加起来以后,再减去 4的左右孩子的值,那剩下的不就是9的左右孩子的值吗 算一下就是 10+1+7=18,这是第三层节点的和 4的左右孩子和是11,9的是7 那么4的左右孩子的值就是...
26考研 | 王道 | 第六章 应用层
26考研 | 王道 | 第六章 应用层 1.网络应用模型 1.CS模型的应用CS模型(客户端-服务器)的特点是客户端需要安装专用软件,服务端负责核心逻辑处理和数据存储。典型应用包括: 传统桌面软件:如早期的单机游戏(如《魔兽争霸3》)、办公软件(如Office) 网络游戏:如《王者荣耀》采用客户端-服务器架构,客户端负责渲染和操作,服务器处理战斗逻辑和匹配 企业级应用:如ERP系统、数据库管理系统(如MySQL客户端) 云服务工具:如Cobalt...
Day128 | 灵神 | 二叉树 | 反转二叉树的奇数层
Day128 | 灵神 | 二叉树 | 反转二叉树的奇数层2415.反转二叉树的奇数层2415. 反转二叉树的奇数层 - 力扣(LeetCode) 思路: 层序遍历的话就交换对应节点的值吧,就如果是奇数层的话,就把节点都弄到vector里面,然后反转节点的值 完整代码: 12345678910111213141516171819202122232425262728293031class Solution {public: TreeNode* reverseOddLevels(TreeNode* root) { queue<TreeNode *> q; if(root==nullptr) return root; q.push(root); int count=0; while(!q.empty()) { int size=q.size(); ...
26考研 | 王道 | 第五章 传输层
26考研 | 王道 | 第五章 传输层1. 传输层提供的服务IP报协议部分TCP是6,UDP是17 2. UDP协议 2.1 UDP数据报 UDP数据报实际最大长度只有65515B这么长,因为IP数据报不拆分的最长长度也就是65535B这么长,还要除去至少20B的IP数据包首部长度,那么剩下的65515B就是UDP数据报的总长度了。 2.2 UDP检验 其实就是UDP对应的差错控制,错了直接扔了,而且不通知发送方 接收方把数据和检验和相加如果得到的不是全1就是错的 刚开始的没有计算过检验和的时候,把检验和当做全0来算 IP首部检验和 与 UDP检验和的区别两者检验方法一致,需注意一下区别 1.IP首部检验和只检查首部,不检查数据部分 2.IP首部检验和不需要添加伪首部 3.TCP协议3.0...
Day127 | 灵神 | 二叉树 | 奇偶树
Day127 | 灵神 | 二叉树 | 奇偶树1609.奇偶树1609. 奇偶树 - 力扣(LeetCode) 思路: 这道题用层序遍历的思路比较好想,就是往for循环里面加一个if,如果是奇数层就判断是不是偶数并且递减,如果是偶数层就判断是不是奇数并且递增,会很直接的写下如下所示的代码 12345678910111213141516171819202122232425262728293031323334353637383940class Solution {public: bool isEvenOddTree(TreeNode* root) { queue<TreeNode *> q; int count=0; if(root==nullptr) return true; q.push(root); while(!q.empty()) { int size=q.size(); ...
Day126 | 灵神 | 二叉树 | 层数最深的叶子结点的和
Day126 | 灵神 | 二叉树 | 层数最深的叶子结点的和1302.层数最深的叶子结点的和1302. 层数最深叶子节点的和 - 力扣(LeetCode) 思路: 这道题用层序遍历的思路比较好想,就把每层的都算一下,然后返回最后一层的和就是了 用深度优先也可以,传一个参数是深度,当深度最大的时候才会把当前结点的值加入到res中 完整代码: 123456789101112131415161718192021222324252627class Solution {public: int deepestLeavesSum(TreeNode* root) { queue<TreeNode *> q; int res=0; if(root==nullptr) return res; q.push(root); while(!q.empty()) { res=0; int...
Day125 | 灵神 | 二叉树 | 二叉树中的第K大层和
Day125 | 灵神 | 二叉树 | 二叉树中的第K大层和2583.二叉树中的第K大层和2583. 二叉树中的第 K 大层和 - 力扣(LeetCode) 思路: 把每层的结果都放到一个vector数组里面,然后排序这个vector数组,返回第K大的元素即可 完整代码: 123456789101112131415161718192021222324252627282930class Solution {public: long long kthLargestLevelSum(TreeNode* root, int k) { vector<long long> res; queue<TreeNode *> q; if(root==nullptr) return 0; q.push(root); while(!q.empty()) { int size=q.size(); ...