你好呀!

这里记录我的学习经历和内容

希望能够帮到你们

: )

标签对应使用的编程语言

分类中查看对应的板块

Archive

All Posts

114 articles collected here.

114:论文构思

2026-03-08科研论文/

应老师要求,写一篇文章记录一下从开题到准备写论文的准备过程: 论文构思 分析 首先这个基础是脱胎于科研训练项目——通用网络动态欺骗防御技术实践与低交互诱捕验证 项目立足通用网络安全防御需求,紧扣“动态欺骗防御与主动防护” 核心方向,面向本科生科研训练目标,简化动态防御技术实现路径,聚焦 “基础资产感知 低交互仿造 简易...

113:一生一芯F6

2026-02-20项目练习一生一芯F/#logisim

拖了大半个月,终于重新开始了一生一芯计划的学习。接下来要完成的部分是,一个有趣的项目 F6 功能完备的迷你RISC V处理器 我们先前实现的简单的ISA只能实现一些简单的命令,但是并不具有完备性,导致很多功能我们难以正常实现,所以这一次我们要实现的是一个功能完备的RISC V处理器,不过在此之前,我们需要更加深入的了解...

112:二月的反思

2026-02-20月报

寒假很快就过去了。农历的新年也过去了几天,还有一周多就要开学了。这段时间发生了很多事情,我感觉自己的心情每天都在成长,都在有所变化。 首先从放假初期定下的几个目标开始说起,意料之外的一个也没做到。我以为自己至少会做点什么,可是我什么都没做到,放假了每天就是玩,看电视,然后接着玩,偶尔运动,但也不多。我想为什么会这样呢,...

111:一生一芯F5(4)

2026-01-29项目练习一生一芯F/#logisim

F5 支持数列求和的简单处理器 我们已经学会了基本的数字电路逻辑和状态机的思想,现在我们要着手实现一个简单的处理器。首先我们需要明确接下来要实现的指令集 和处理器的细节: + PC位宽为4位, 初值为 + GPR有4个, 位宽均为8位 + 支持如下3条指令: 接下来完成实验的任务: F5.1.1 实现取指功能 通过多路...

110:一生一芯F4(3)

2026-01-29项目练习一生一芯F/#logisim

F4 计算机系统的状态机模型 处理器的组成和工作原理 F4.1.1 继续执行上述指令 尝试继续执行指令, 记录寄存器的状态变化过程. 你发现执行到最后时, 处理器处于什么样的状态? 上述数列的求和结果在哪个寄存器中? 状态机视角的寄存器状态变化: F4.1.2 计算10以内的奇数之和 尝试用上述指令编写一个程序, 求出...

109:一生一芯F3(2)

2026-01-23项目练习一生一芯F/#logisim

接着学习F3的内容 整数的机器级表示 主要讲了原码、补码、反码,这些是计算机组成的基本知识,就不做过多赘述。 F3.6.1 搭建4位减法器 根据4位加法器的设计思路, 尝试在Logisim中通过门电路搭建一个4位减法器, 用七段数码管按十六进制显示减法器的两个输入和结果, 并用一个LED灯指示减法结果是否产生借位. 搭...

108:一生一芯F3(1)

2026-01-19项目练习一生一芯F/#logisim

寒假报名了一生一芯的训练,作为对我这个学期的知识的一个补全,顺便学一些新的知识。为下个学期研究二进制安全做一点准备。这一部分就记录我在学习过程中的一些心得体会。就不再像往常一样讲的那么详细了,因为知识点在文档中给的很清楚,没必要再敲一遍。 通过晶体管实现0和1 主要认识两种类晶体管: + nMOS:当G为高电压时,电信...

107:一月的反思与对寒假的展望

2026-01-17月报

终于考完试了,也要做好打算琢磨一下接下来该做什么了。总体来说,这个寒假会好忙,但是也是一个很好的机遇。我打算用这段时间好好提升一下自己,无论是学习上还是生活上。 先对我的一月份做个小小的反思吧,这个月主要是期末周,导致我都没有更新博客,也没有学什么新的技术,寒假我会好好补起来的。至于期末开始,只能说考的一般吧,自己还是...

106:十二月的反思

2025-12-17月报

2025年马上就过去了,这一年发生了很多事情,我也不怎么记得了。仔细一想感觉一年好长,但是时间却又过的好快。最近很多软件都公布了年度报告,不知道为什么我甚至不敢点开,我好害怕去回想这些事情。可能是因为最近过的不是很好吧,我不想去回忆以前很多很开心的瞬间。我怕自己看到了会难过。 但我还是点开看了,我最先意识到的就是,原来...

105:Python字节码解释器基本原理(上)

2025-12-10项目练习Byterun/#Python

找到一个比较好的项目Byterun),这里进行一下复现。 Byterun Byterun 是一个基于Python实现的Python字节码解释器,简化了Cpython的实现,展示了Python解释器在底层上的实现原理,以及相关的组织过程。 搭建一个解释器 解释器本质上就是一个虚拟机,他会对你产生的字节码信息进行解释,然后...

104:初始图形学(15)

2025-12-05计算机科学图形学/#CPP

上一章中完成了对图形渲染的饿BVH加速,现在我们要尝试将图片纹理映射到物体中。 纹理映射 图形学中的纹理映射是将材质效果应用于场景中的物理过程。其中"纹理"指的是效果(这个效果可以是材质属性,或是部分存在与否)本身,而映射则是将效果映射到物体的表面上。 最为常见的纹理映射就是将图像映射到物体表面上,就像是把世界地图依附...

103:初始图形学(14)

2025-12-02计算机科学图形学/#CPP

书接上回,上一次实现了物体运动下的图形学渲染。实现了动态模糊的构建。 包围体积层级 现在随着我们场景的复杂化,和对图片质量的提升,有时候渲染一张照片都需要十几分钟。为了让代码运行的更快,我们需要引入一个新的结构 包围体积层级BVH ,以优化程序渲染的性能。 射线 对象求交,是光线追踪过程中的主要性能瓶颈,运行的时间和物...

102:日后安排

2025-12-01随笔

最近思绪有点乱,感觉要做的事情很多,但是不知道何从下手,所以我要从头缕一缕现在的问题。 首先是分析一下现阶段我要做的事情,按优先级进行分类: + 课程任务:(这几门课是这个学期的大头) + 离散数学 :这个课我现在最大的问题就是没有明确的学习路线(对着书硬啃?找个网课学?) + 概率论 :这个课我的进度很慢,但是有一高...

101:DWADRF信息解析

2025-11-24计算机科学链接/#C

上个学期也尝试了解过这些,但是那个时候还没有接触编译链接,对DWARF信息的理解不够深刻。最近有计划了解一下调试器的原理,所以重新捡起来好好学一遍。 我参考的教程是DWARF的官方介绍文档Debugging using DWARF,作为对其的简单了解 DWARF概述 一开始我并不知道怎么说明这一部分,AI给了我一个很好...

100:感悟

2025-11-23随笔

也是好不容易水到第100篇了,我本来准备了好多台词的,但是不知道说什么。我就记录一下我的几个感悟吧 学会放弃 刚开始觉得只要努力学就会有所收获吧,如果没学会就是自己比较笨什么的。但事实不是这样的,认知一个领域的过程是循序渐进的,就像游戏里的科技树一样,解锁一个科技需要一大堆前置科技。有时候一些知识也是这样,所以一开始学...

99:图

2025-11-22算法数据结构/#CPP

今天接着来认识一下图,结束了图的学习,数据结构的部分就告一段落了。之后就是涉及到一些基本的算法问题,感觉也会越来越难。 图 认识图 和之前的数据结构不同,图是一种非线性的结构,由顶点和边组成,以下面为例,我们可以将图G抽象的表示成一组顶点和一组边的集合: 如果将顶点看作节点,将边看作连接各个节点的引用(指针),我们就可...

98:堆

2025-11-18算法数据结构/#CPP

学一种新的数据结构——“堆”,但是貌似和底层原理中的堆并不一样。之前总是略有耳闻,但是一直都很少仔细去了解。 堆 堆是一种满足特定条件的完全二叉树,根据性质可以分为两种类型: + 小顶堆:任意节点的值 <= 子节点的值 + 大顶堆:任意节点的值 = 子节点的值 堆作为完全二叉树的一个特例,有以下规则: + 最底层的节点...

97:平衡树

2025-11-18算法数据结构/#CPP

书接上回,接着研究一下AVL树。 AVL树 在二叉搜索树中,我们可以知道,在多次的插入和删除之后,二叉树的左右可能会失去平衡,从而导致退化成链表,在这样的情况下我们的算法的效率会从 退化到 : 但是我们接下来将要提到的AVL树,将解决这些问题 AVL树的常见术语 AVL树本质是二叉搜索树和二叉平衡树的结合,所以同时满足...

96:十一月的反思

2025-11-17月报

十一月份已经过去了一半。回顾这个月我都做了什么,做到了什么呢?仔细一想是没有的,感觉时间过的好快,转眼间就过去了大半个学期,自己也是没什么收获,定下的很多目标都没有做到。 马上就要期中考试了,我希望能在各科都拿到一个比较好的成绩吧,因为这个学期对我的绩点来说是十分重要的。所以一定要好好加油,尤其是408相关的课程,一定...

95:树

2025-11-16算法数据结构/#CPP

打算系统性的学一下数据结构与算法,这个就相当于笔记做一下记录了。 树 二叉树 二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。我们可以用以下数据结构表示: 这里每个节点都有两个引用,分别为左右子节点,中间的节点为这两个节点的父节点。左右子树的概念也可以类推。 在二叉树中,除叶节点外,其他所有节点都包...

94:c4编译器回顾(4)

2025-11-04项目练习c4编译器/#C

在上一章中,我们完成了对函数体的解析,现在我们需要进一步解析函数体中的语句,还有程序中的表达式。我们需要将程序中的语句解析成我们的虚拟机能直接执行的语句,所以这一章中会有一点难度: 语句 我们的编译器中识别以下六种语句: + + + + + + 现在我们要将这些语句转换成对应的汇编代码: IF语句 IF语句的作用是跳转...

93:c4编译器回顾(3)

2025-10-31项目练习c4编译器/#C

我们完成了对词法分析的获取函数 ,现在我们尝试根据token分析,和我们的语法规则,进行简单的语法分析。 解析变量 我们的解释器的语法结构,可以用下面的EBNF的表示法直观的体现: 对于我们的程序而言,一切都是从对 开始: + 变量定义 + 类型定义(目前只支持enum) + 函数定义 我们的 作为语法解析函数,框架如...

92:c4编译器回顾(2)

2025-10-29项目练习c4编译器/#C

上一节中完成了对虚拟机的实现和初始化,还有指令集的定义,接下来就是对源文件的词法分析部分 词法分析 什么是词法分析 源文件的内容对于我们的解释器而言,本质上就是一系列ASCII字符串,是毫无意义的,我们需要通过语法分析将其解析为简单的指令,然后再执行。可是这样一来,这就使得语法分析的部分十分庞大。所以编译器一般会对整个...

91:c4编译器回顾(1)

2025-10-29项目练习c4编译器/#C

我们将尝试构建一个C语言的解释器,这个项目也是我C语言的大作业。现在回顾看来,当时对整个项目都是知其然不知其所以然,从现在的眼光来看,当时很多做法都是很稚嫩的。尤其是对于这个项目结构的理解也远远不足,所以打算重构一遍。 构建流程 首先是整个编译器的构建流程,一般来讲,编译器的编写有三个步骤: 1. 词法分析器,用于将文...

90:初始图形学(13)

2025-10-25计算机科学图形学/#CPP

自从上个学期之后,就怎么接触过图形学了。但是仔细感受下来,图形学是最让人有收获感的方向。它通过模拟真实的物理规则,通过计算模拟出真实的模拟场景,十分有趣,就是给人一种融汇贯通的感觉,学到的知识能结合在一起,我感觉这才是最有意义的地方。 然后进度的话是接着上一次"图形学(12)"最终的场景,在此之前,我把之前的项目代码熟...

89:makefile基本使用

2025-10-22软件工程自动构建/

MAKEFILE教程 之后要尝试做一些项目,在加上前一段时间接触PA,发现自己对自动构建项目一类的操作实在是一知半解,而且之后也需要要尝试自动化编译一些大型的源码,所以学习一下 的基本使用,完善一下自己对工具链的认知。这里我看的教程是廖雪峰的 入门 Makefile基础 在Linux中我们使用 命令时,他就会在当前目录...

88:十月的反思

2025-10-21月报

上个月都没怎么学习,几乎每天都在发呆想事情,因为我和一个傻瓜的事情。前几天去北京和她在一起呆了很久呀,感觉她还是像以前一样对我很好。但是可能异地恋的负担对于她来说还是太大了,所以我也不强求什么了。只求我能努力一点,以后和她一起去北京读书。我和她约好了我会去找她,会陪着她。 她对我一直都很好,很爱我的一个女生,我们从高一...

87:NJU_PA_STUDY(4)

2025-10-03项目练习NJUPA/#C

这一篇博客中,我将完成PA1的收尾部分,我将完成完成对表达式求值的功能拓展,和程序监视点的实现,预计要花费较多的时间。可能很多内容也需要好好学习理解一下。 PA1 监视点 扩展表达式求值的功能 之前我们实现了算数表达式基本的求值(对整数的基本四则运算与结合律),但这些表达式都是常数组成的,他们的值不会发生变化,导致这样...

86:NJU_PA_STUDY(3)

2025-09-29项目练习NJUPA/#C

我们先前反复提到了一个式子 ,它代表着表达式含义,常见的表达式是通过操作符连接的。这里我们需要为我们的框架实现一个表达式求值的功能。我们要解决的问题是求值一个字符串表示的表达式。 PA1 表达式求值 为了简单起见,我们先从数学表达式求值实现开始。 数学表达式求值 如下的一个表达式的字符串: 我们应该怎么求出它的值?我们...

85:NJU_PA_STUDY(2)

2025-09-28项目练习NJUPA/#C

NEME是一个用于执行其他用户程序的虚拟计算机,对于运行在NEMU中的应用程序,外部的调试器难以获取其详细的信息,往往需要对引用程序内部下断点的方法来观察程序运行。 但是对于NEMU而言,应用程序的状态是可见的,因此我们需要一个简单有效的方法来观察并调试应用程序的内部状态,所以我们需要设计简易调试器,作为NEMU的基础...

84:九月的反思

2025-09-28月报

这个月发生了各种各样的事情,我特别累也特别疲惫。对于上次以后的总结,我几乎记不得中间都做了哪些事情。我不想对这一个月的经历过多谈论,我心里是十分难过的。 接下来一段时间会很忙,忙在哪些地方呢? + NJU PA实验,我要坚持写下去 + 操作系统真象还原,我也要坚持看下去,我希望能通过这本书的指引,实现一个自己的操作系统...

83:NJU_PA_STUDY(1)

2025-09-27项目练习NJUPA/#C

PA1 RTFSC 框架代码 由于NEMU PA是一个很庞大的框架系统,所以要在其基础之上开发需要对框架代码进行熟悉。所以最重要的一步应该是阅读程序的源代码。在课件中,已经给出了相关代码的简要结构说明,按照标题简单理解即可: 为了支持不同的ISA形式。框架代码将NEMU分成两部分:ISA的相关实现和ISA无关的框架代码...

83:NJU_PA_STUDY(0)

2025-09-27项目练习NJUPA/#C

这个学期抽取一部分课余时间用来完成NJU的PA实验,争取能做多少做多少。 第一篇先从环境配置开始,这里我使用的程序环境是WSL+Vscode。 PA0 Getting Source Code For PAs 拉取源码 由于我的git环境已经配置好了,所以直接在我的主目录下面 文件内容就行了: 然后 ,以后这个目录就是项...

81:虚拟内存(3)

2025-08-30计算机科学虚拟内存/#C

上一篇中我们研究了虚拟内存在理想状态下的工作模式,现在我们要结合实际案例,来进一步了解虚拟内存在具体环境下是怎么工作的: Intel Core7/Linux内存系统 Core i7地址翻译 我们的系统是一个运行Linux的Intel Core i7。下图是其处理器的一个封装结构: 包括四个核,一个大的所有核共享的L3高...

80:虚拟内存(2)

2025-08-28计算机科学虚拟内存/#C

我们已经学习了虚拟内存的作用和虚拟内存的基本使用过程,为了进一步的深入的理解虚拟内存的机制,我们需要要深入理解虚拟内存的基本原理。 地址翻译 现在我们将从底层除出发,理解硬件在虚拟内存中的角色。为了简化之后的说明,这里提前展示我们所要用到的符号以参考: 实际上,地址翻译就是一个N元素的虚拟地址空间(VAS)中的元素和一...

79:虚拟内存(1)

2025-08-28计算机科学虚拟内存/#C

总是听到诸如页表,分页机制一类的词汇,听起来让人感到十分的复杂。实际上这些都是涉及到虚拟内存相关的只是。一直以来对这一部分的知识都是望而生畏,现在好好来理解一下它: 物理和虚拟寻址 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的 物理地址 ,物理地址从0开始依次设置。这是最简单...

78:初窥深度学习(4)

2025-08-26人工智能深度学习/#Python

我们先前实现了卷积神经网络的各层,以及基本的前向传播,现在我们要进一步的完善整个神经网络,通过反向传播实现对权重的更新,从而提高神经网络的准确性。 反向传播 现在我们已经完成了神经网络的前向传播,现在我们需要对每个层进行反向传播以更新权重,来寻来你神经网络。进行反向传播,我们需要注意两点: + 在前向传播的阶段,我们需...

77:初窥深度学习(3)

2025-08-25人工智能深度学习/#Python

上一篇文章中我们学习了循环神经网络,我们现在已经基本理解了神经网络怎么去处理数据/序列。可是对于图片、音频、文件之类的数据,我们该怎么去处理呢?相较于数据、序列,对图片使用传统神经网络会导致更大的开销。其他的数据类型也是同理,所以接下来我们将要认识 卷积神经网络 。 卷积神经网络简介 卷积神经网络的一个经典应用场景是对...

76:对暑假的反思与下个学期的展望

2025-08-24月报

今天是8月24号,暑假已然过去了2/3,我打算明天就提前返校。我想对我的暑假做一个总结,这个暑假学了很多东西,相较于平时有更多的集中连续的时间可以用了学习,提升个人的能力。在校期间,我更多是用一些零散的时间来通过做项目来学习。但感觉难以长时间的专注在一个知识点上。始终是项目驱动学习,被动的去了解一些内容,暑假的话有大把...

75:初窥深度学习(2)

2025-08-17人工智能深度学习/#Python

在上一篇博客中,我们完成了一个简单的前馈神经网络,完成了对根据身高体重对性别进行猜测的神经网络,以及对他的训练。但是我们不该止步于此,接下来我们将尝试编写一个RNN循环神经网络,并认识它背后的原理。 循环神经网络简介 循环神经网络是一种专门用于处理序列的神经网络,因此其对于处理文本方面十分有效。且对于前馈神经网络和卷积...

74:背景驱动的双态图像显现

2025-08-14杂项#Python

在网上冲浪的时候我们经常会看到一些点开与不点开会呈现不同结果的图片,我们称这种图片为"幻影坦克图"。因为它利用到了光学欺骗的原理,与红警中的幻影坦克相似,故得其名。今天,尝试了解下背后的原理,并自己动手实现一下这个功能。 原理 由于幻影坦克图需要涉及到 ,所以我们使用的图像格式必须带有 通道。所以我们的首选就是 图像格...

73:异常控制流(3)

2025-08-13计算机科学异常控制流/#C

信号 我们已经认识到了操作系统怎么通过异常使得进程上下文切换,以实现异常控制流的实现。现在我们将尝试另一种实现—— Linux信号 ,来允许进程和内核中断其他的进程。 我们可以将信号理解成一条消息,它通知进程系统中发生了某一个事件。每种信号类型都会对应于某种系统事件。然后由不同的处理程序去处理这个事件。我们可以通过 来...

72:异常控制流(2)

2025-08-07计算机科学异常控制流/#C

系统调用错误处理 由于之后会用到大量的系统调用函数,我们需要做好错误处理,以便于查找问题。Uinx系统中的系统级函数遇到错误时会返回 1,并设置全局整数变量 来表示错误类型。这个时候我们可以通过 函数来返回和errno值相关联的错误。我们以处理 的错误为例: 我们可以进一步的封装这个错误: 通过错误处理包装函数,我们可...

71:异常控制流(1)

2025-08-06计算机科学异常控制流/#C

异常 从处理器加电一直到断电,程序计数器始终执行着一个序列的指令。每次从一个指令到下一条指令的过渡被称为控制转移。而这个控制转移序列则被称为处理器的 控制流 。最简单的控制流是一个平滑的序列,由诸如跳转,调用,返回一类的指令造成的。这些指令都是必要的,使程序能根据程序内部状态做出反映。 但是系统也应该能对系统状态的变化...

70:初窥深度学习(1)

2025-08-06人工智能深度学习/#Python

最近很流行这些,出于好奇,我也想知道这些技术背后的原理是什么。而且我感觉很多知识可能之后会用到,所以我打算浅浅的了解一下。最终的目标是实现一个手写数字识别的神经网络吧。试试看吧。 神经网络简介 基础构件:神经元 神经元是神经网络的基本单元。它接受输入,对数据进行计算从而产生一个输出。比如下面的一个二元输入神经元样例:...

69:随便的想法

2025-08-05随笔

和好兄弟出去玩,谈到上大学。我觉得很遗憾,遗憾自己没能去想去的学校。他说,感觉人生就是因为有遗憾的事情所以才值得去回忆。我想想也是,我看历史书也是这样的,就是因为有遗憾的部分我才总是记得很清楚。就像是三国演义的诸葛之死,我每次想到都很难过,王者荣耀这个赛季也是三国主题。我看别人都是选的魏国吴国的阵营,我就选蜀国,我就是...

68:链接(4)

2025-08-01计算机科学链接/#C

在上一章中的加载过程中,我们大致了解了动态链接的过程,接下来我们要进一步认知其背后的原理。 位置无关代码 共享库的主要目的就是让多个正在运行的进程共享内存中相同的库代码,从而节约内存空间。可是多个进程是怎么共享同样一个副本的呢? 给每个共享库分配有一个事先预备的专用的地址空间,然后有要求加载器总是在这个地址加载共享库。...

67:链接(3)

2025-07-27计算机科学链接/#C

介绍完了目标文件是怎么链接到可执行程序的,我们不妨进一步学习可执行程序是怎么被加载到内存中并运行的。以及动态链接库是怎么和程序一起被加载的。 可执行目标文件 我们已经学习了链接器是怎么将多个目标文件合并成一个可执行目标文件的。我们的C程序,从一开始的一组ASCII文本文件,被转换成了一个二进制文件。这个二进制文件包含加...

66:链接(2)

2025-07-22计算机科学链接/#C

接下来我们要探讨学习一下 符号解析 和 重定位 实现的原理。 符号解析 连接器解析符号引用,实际上就是将每个引用,和它输入的可重定位目标文件的符号表中的一个确定的符号定义关联起来。当局部符号的引用和引用定义在相同模块的时候,符号解析简单明了。编译器只允许每个模块中每个局部符号只有一个定义,因此编译器要确保它们又唯一的名...

65:链接(1)

2025-07-21计算机科学链接/#C

开始学习新的章节——链接。我们现在要研究在gcc调用的过程中,到底有哪些过程是被我们所忽略的,在编译的过程中它们又有着什么作用呢? 编译器驱动程序 我们以下面的这段代码为例,将以此来分析整个编译的过程 大多数编译系统都会提供一个编译驱动程序,在用户需要时调用语言处理器,编译器,汇编器,链接器。比如我们要用GNU编译系统...

64:存储器层次结构与性能利用

2025-07-19计算机科学存储器层次结构/#C

我们学习一下现代计算机中的存储器架构,以及它的一些具体实现。我们该如何利用存储器的性能来实现对局部性的高效利用?它背后的原理又是什么呢? 存储器存储结构 不同的存储器有着不同的存储技术和存储性能,可喜的是,它们的属性很好的互相补齐各自的不足,利用这个性质,出现了一种组织存储器系统的方法,称之为存储器层次结构。 从高层往...

63:螺旋矩阵

2025-07-16算法模拟/#CPP

螺旋矩阵题型总结。我刷了几道螺旋矩阵相关的题目,这里我们介绍一下一些常见的解法。 螺旋矩阵 方形矩阵 当我们遇到 的方形矩阵时,可以用一种特殊的解法来遍历实现,以下面这道题为例: 59. 螺旋矩阵 II 我们可以定义几个变量用来控制遍历的行为: + startX:每次循环的起点的行数 + startY:每次循环的起点的...

62:程序性能优化(3)

2025-07-15计算机科学程序性能优化/#C

我们已经尽可能的实现各种程度的优化了,但所谓知己知彼,百战不殆。我们不仅要了解程序的性能怎么去优化,同时也要了解制约程序进一步优化的因素是什么。 限制因素 关键路径指明了执行程序所需时间的基本下界。如果程序中有某条数据相关链,这条链上的所有的延迟之和等于T,那么程序至少需要T个周期才能执行完。我们还看到功能单元的吞吐量...

61:程序性能优化(2)

2025-07-15计算机科学程序性能优化/#C

上次我们分别从简单的过程调用的优化到了机器级层面的关键路径优化。在此基础之上,我们可以尝试更进一步的优化。 循环展开 循环展开通过增加每次迭代计算的元素的数量,减少循环的迭代次数。它从两个方面改进了程序的性能: + 减少了循环索引的计算和条件分支的判断 + 提供了一些方法,进一步的变化代码,减少整个计算中关键路径上的操...

60:程序性能优化(1)

2025-07-12计算机科学程序性能优化/#C

对于特定的程序而言,尤其是要长时间多次运行的程序而言,我们需要尽可能的优化他的效率。如计算效率,空间效率...大多数时候编译器会帮助我们完成这个工作,但是特定的场景中,我们需要自己实现程序的优化设计。 优化编译器的能力和局限性 在现代编译器中,编译器往往会通过各种复杂的算法,根据程序中的值,被计算被使用的过程,来优化程...

59:二分查找

2025-07-11算法查找/#CPP

开始算法的简单学习,今天先从二分查找法开始 二分查找 代码实现: 这个是常用的二分法的代码实现,但是在这里我们仍然有很多要注意的地方: while的循环条件与start end更新 有时候会疑惑循环不变量中我们什么时候使用 或 。而在start和end的更新中不知道什么时候使用 或 或不变。我们需要理解什么情况下怎么去...

58:Y86-64处理器的实现(4)

2025-07-07计算机科学处理器体系结构/#C

接着上一次的内容,中间有一段时间在忙着搞大作业的内容,所以就没继续搞这个了。今天我们将具体实现Y86 64的设计。 异常处理 异常控制流导致程序正常的执行流程被破坏掉。异常可以有程序内部产生,也可以由某个外部中断产生。我们的指令集主要包括三种类型: + halt指令 + 非法指令和功能码组合的结果 + 取指或数据读写访...

57:六月的反思与七月的计划

2025-07-07月报

一下子就到七月了,我六月的总结并没有写,因为六月比较忙...前半个月急着复习。后半个月忙着玩儿和打游戏。 上次说这个学期希望绩点高一点,我对这个学期的绩点还算比较满意吧,好歹花了很多时间精力在上面。然后是时长两周的小学期,感觉还是很不错的,前端的基础知识稍微巩固了一下,同时学习了很多新的东西,相较于刚开学的时候自己学前...

56:mov指令的图灵完备性

2025-07-06计算机科学处理器体系结构/#assembly

文章原文:mov is Turing complete ——by Stephen Dolan,Computer Laboratory, University of Cambridge 不使用特殊的寻址模式,代码自修改,和运行时生成代码。用 实现图灵完备的模拟器 介绍 我们在学习下x86的指令集中我们时常会用到 指令。我...

55:Y86-64处理器的实现(3)

2025-06-29计算机科学处理器体系结构/#C

我们把之前的SEQ结构已经实现了,可是为了更好的符合流水线执行的特性,为我们需要对顺序的SEQ处理器做一点小的改动,我们需要将PC的计算拿到取指阶段。然后在不同的阶段之间留下流水线寄存器来保存状态。 Y86 64的流水线实现 SEQ+:重新安排计算阶段 我们要把更新PC的阶段放在取值阶段,在第一个时钟周期开始执行。这样...

54:Y86-64处理器实现(2)

2025-06-18计算机科学处理器体系结构/#C

我们已经基本了解了Y86 64的指令集和汇编的用法,现在我们要尝试模拟处理器的硬件行为。这里描述一个称为SEQ的处理器,我们了解它的使用过程,并尝试构建它。 Y86 64的顺序实现 将处理组织成阶段 处理一条指令包括很多的操作和步骤,如果我们有序的将其进行划分。我们就可以得到一个顺序序列,所有的指令都可以按这个顺序进行...

53:Y86-64处理器实现(1)

2025-06-17计算机科学处理器体系结构/#C

最近在看CSAPP的第四章,因为要记的东西比较多,所以整理一些东西帮助理解 Y86 64指令集体系结构 对于程序员可见的状态 Y86程序的每条指令都会对我们的处理器进行一些改变,我们把这个过程称之为状态的改变。这里我们需要能够知道对应的行为,使我们的状态发生了哪些变化。这些需要被观测的状态就是“对于程序员可见的状态”...

52:QOI编码解析

2025-06-07计算机科学信息压缩/

我突然理解什么是解释器了,解释器的话全称应该理解为 字节码解释器 。本质上是对特定的数据赋予一定的规则下的意义,然后用同样的规则可以去解读同一个数据,这个实际上就是信息论。我们的解释器,机器码之类的也是这样,数据本没有意义,但是特定的规则赋予了其意义即信息。 这里我要讲到的QOI就是这么一种规则,图像的压缩规则。我们知...

51:五月的反省

2025-05-27月报

五月份恍恍惚惚就过去了,都不太记得发生了什么,本来说好的是中旬写一些反思的。但是当时应该是在打游戏,所以就这么拖到了现在。也不知道说点什么比较好,慢慢想一想吧。上个月说要学这个学那个,也没学成什么,C++也没学多少,不记得是卡在哪里了。学了一段时间蒋炎岩老师的课,但是学不太下去。 但是也发现了一些,经历了一些好玩的东西...

50:写一个Linux调试器(4)

2025-05-15项目练习Debugger/#CPP

上一部分中我们实现了对于程序的汇编级别的调试,但是这种调试,过程繁琐,难度大,且调试过程的可读性较差。我们需要拓展我们的调试器的性能,所以我们需要用到DWARF格式以实现源码级别的调试。 Dwarf和Elf 在此之前我们需要对这些知识有一定程度的掌握。ELF(可执行和链接格式)是Linux中最广泛使用的对象文件格式,其...

49:写一个Linux调试器(3)

2025-05-10项目练习Debugger/#CPP

上次把断点基本的设置搞完了,接下来需要进一步的对寄存器进行操作。我们将添加读取和写入寄存器和内存的功能,这样我们就可以操作程序寄存器(PC),从而实现程序状态的观察和操作。 寄存器和内存 寄存器结构 我们需要建立x86 64架构寄存器的元数据,以便通过 系统调用和 调试信息于寄存器交互 首先我们需要明确我们需要用到的寄...

48:写一个Linux调试器(2)

2025-05-09项目练习Debugger/#CPP

昨天写了一些基本的架构,写到一半我突然有很多灵感,为什么一定要按照教程的内容去做呢。我应该有自己的想法,而且我现在也有能力去实现,有错误也可以慢慢调试。再加上AI的帮助,我可以以这个教程为蓝本,学习各种知识。 所以现在我要从头开始尝试这个过程,OK基本上自己重新实现了一遍,优化了一些功能和拓展了一些程序。接下来需要进一...

47:写一个Linux调试器(1)

2025-05-08项目练习Debugger/#CPP

之前一段时间在研究Linux下的虚拟内存分布,还有一些比较细节的内容吧。现在打算更加深入了解这个内容,刚好看到了这篇教程,所以打算花一周左右的时间跟着学习一下,顺便做个简陋的翻译吧。这里我们使用的C++ 这是项目的源地址: 编写 Linux 调试器第一部分:设置 Writing a Linux Debugger Par...

46:动手实现内存分配

2025-05-07计算机科学虚拟内存/#C

学习虚拟内存,对于其中的 的实现有一定兴趣,所以深入研究一下 研究 首先我们知道 的函数原型: 我们可以用它申请一个指定大小的内存空间,其中 是我们申请的空间,于是我们我们可以简单的实现这个功能: 注意到这里我们使用了一个函数 它可以它通过调整堆指针(brk)从而实现对堆的大小的动态调整,其中的参数 是将要分配的内存空...

45:2025年的年轻人需要什么?

2025-05-03随笔

刚送一个好兄弟回家,我们最后在分别时在探讨一个问题,大学的意义是什么? 如果是几个月前,我可以很清晰的回答这个问题,但是现在不能了。上了大学确实面对的了很多问题,即使已经做好了准备,但还是准备的不够。究其根本在于哪里——我们还有希望,尚未麻木。我们有理想有目标,有底线有准则。但是这是好的品质吗?是好的选择吗?我们以后不...

44:虚拟内存——C字符串与proc

2025-04-29计算机科学虚拟内存/#C

看到一篇很好的实验性质的文章,在这里学习复现一下:破解虚拟内存 使用环境: + Ubuntu 24.04 noble(on the Windows Subsystem for Linux + gcc + python3.12.3 虚拟内存 首先我们需要明确虚拟内存是什么? 我们的内存在物理地址上实际上并不是连续的,为了...

43:使用Git(中)

2025-04-20软件工程版本管理/

上一篇中学习了基本的本地的版本控制,现在进一步的学习Git的使用。 远程仓库 现在我们需要找一个网站用来为我们提供Git仓库托管服务,这个网站叫做Github,这个网站为我们提供了Git仓库的托管服务,不过我们首先需要注册一个账号,这里我已经搞完了。 本地的Git仓库和Github仓库之间的传输时通过SSH设置的,所以...

42:使用Git(上)

2025-04-19软件工程版本管理/

朋友圈里看到同学用Git,觉得图形化还是很帅的。加上最近刚好有需求,所以就来系统的学习一下git的使用。 这里参考的教程是:简介 Git教程 廖雪峰的官方网站 先从git在本地的简单使用开始学习一下吧,明天再接着讲讲git的远程使用 Git git是一款分布式的版本管理器。 分布式的意思就是一个每个开发者人的工作区就是...

41:四月的反省

2025-04-18月报

今天是2025年4月17号,我打算从今天开始我未来的每月总结。 其实月中也挺好的,先忙半个月,然后看看有没有效果。然后再指正接下来半个月的要做什么。 我也不知道应该反省什么,我的上个月挺糟糕的。月初还算高兴吧,后面我女朋友的寝室出了点事情,她的室友意外去世了。我女朋友因为这个心理状态也不是很好,接下来的半个月,我一直在...

40:初始图形学(12)

2025-04-13计算机科学图形学/#CPP

两个星期过去了,我们的图形学入门之旅也是迎来了终章。 最后就以一个完美的作品来作为纪念我们图形学学习的短暂结束。 我们设置main函数: 两个星期的学习,都在这张图片之中了

39:初始图形学(11)

2025-04-13计算机科学图形学/#CPP

今日收官之战,图形学之旅差不多到此为止了 可定位相机 我们的相机目前是固定视角的,比较单调。由于程序的复杂性,所以在这里我们最后实现它。首先,我们需要为我们的相机添加视场(fov)效果。这是从渲染图像一边到另外一边的视觉角度。由于我们的图像不是正方形视图,所以水平和垂直的fov是不同的。这里我们选择开发垂直fov。我们...

38:初始图形学(10)

2025-04-12计算机科学图形学/#CPP

继续冲 介电质材料 乍一听可能感觉很厉害,但实际上水,玻璃,钻石一类的材料都属于介电质,他们通常有以下特点: + 不导电:但会光会与该材料发生相互作用,主要表现有 反射与折射 + 折射率:是材料特有的属性,决定光线进入材料时的弯曲程度,不同的材料有不同的折射率 当光线击中他们时,会分成反射光线和折射(透射)光线。我们将...

37:初始图形学(9)

2025-04-11计算机科学图形学/#CPP

继续图形学的学习,我打算在下一周左右结束图形学的学习,因为要期中考试了(晕),现在赶赶进度 金属 一个材质的抽象类 如果想让不同的物体拥有不同的材质,我们可以设置一个通用的材质类,具有许多参数。或者我们可以有一个抽象的材质类,封装特定材质的独特行为,这里我们使用第二种方式,因为这样便于我们更好的组织代码,设置这么一个类...

36:初始图形学(8)

2025-04-10计算机科学图形学/#CPP

中途歇了一段时间写物理作业,然后昨天学了下垃圾回收。现在继续开始我们的图形学学习。 漫反射材质 现在我们有了物体和每个像素的多个光线,现在我们可以尝试制作更加逼真的材质了。我们先从我们的漫反射材质开始(也称为哑光材质)开始。不过这里我们将几何体和材质分开使用,这使得我们可以将一种材质应用于多种物体,或者将多种材质应用于...

35:简易的垃圾回收机制

2025-04-10语言机制/#C

大佬的技术博客,拜读了一下,理解的七七八八,做一个记录和研究吧。 文章地址: Baby’s First Garbage Collector – journal.stuffwithstuff.com 简易的垃圾回收机制 在计算机运行的过程中,会不断的分配和释放内存。尤其是在一些低级的语言中,内存的分配和释放都需要程序员手...

34:初始图形学(7)

2025-04-08计算机科学图形学/#CPP

上一章完成了相机类的实现,对之前所学的内容进行了封装与整理,现在要学习新的内容。 抗锯齿 我们放大之前渲染的图片,往往会发现我们渲染的图像边缘有尖锐的"阶梯"性质。这种阶梯状被称为"锯齿"。当真实的相机拍照时,边缘通常没有锯齿,这是因为真实的边缘时前景和背景颜色的混合,而不是简单的二值化。而且真实的世界是连续的,而我们...

33:初始图像学(6)

2025-04-08计算机科学图形学/#CPP

Camera类 我们之前学了很多的图形学知识和相关的程序,现在我们停下脚步,来好好整理一下我们学习的内容,我们将之前的视口代码和渲染代码合并到一个新的单类 ,这个类主要负责两项任务: + 构建并发射光线到世界中 + 使用光线的信息来构建渲染图像 这次的重构,我们收集以下几个功能: + ray color() + 图像设...

32:初始图形学(5)

2025-04-06计算机科学图形学/#CPP

感觉学的还是有点慢啊,刚刚往后看了一点,感觉后面的知识越来越难,我得赶快点学。 法向量和多物体处理 根据法向量进行表面着色 我们需要计算出表面法线进而进行着色。(法线是垂直于交点处的表面的向量) 法向量的计算使用决策有以下两种情况: + 法向量可以有任意长度,这些长度可以附带额外的信息,比如反射啥的 + 法向量全部进行...

31:初始图形学(4)

2025-04-06计算机科学图形学/#CPP

学到一半区研究旋转立方体去了,确实好玩,受益匪浅啊,刚好搞明白了上一章相机的设置和视图的投影,现在继续学习。 添加一个球 我们现在向我们的光线追踪器中添加一个物体。我们从添加一个球体开始(因为它是最容易分析实现的) 射线 球面的交汇 这一部分将有大量的公式,但是我现在还没有搞明白Latex的渲染问题(这个太麻烦了,我已...

30:旋转立方体

2025-04-05项目练习图形学/#C

看到一个视频,对其内容比较感兴趣,刚好今天没什么事,我们来深入解析一下这个项目 视频链接:终端字符旋转立方体 参考链接:Donut math: how donut.c works 这是我们最终想要实现的效果(一个旋转的立方体): 旋转 怎么让一个立方体转起来,我们是怎么实现的?实际上这里用到的是线性代数的几何原理。 这...

29:初始图形学(3)

2025-04-03计算机科学图形学/#CPP

昨天休息了一天,今天继续图形学的学习 向场景发射光线 现在我们我们准备做一个光线追踪器。其核心在于,光线追踪程序通过每个像素发送光线。这意味着对于图像中的每个像素点,程序都会计算一天从观察者出发,穿过该像素的光线。并且计算这个光线的方向上所看到的像素的颜色。其步骤为以下几点: + 计算从“眼睛”发出的通过像素的光线 +...

28:初始图形学(2)

2025-04-01计算机科学图形学/#CPP

今天简单的学习一下相关类的定义和作用 Vec3类 图形程序中需要一些用于存储几何向量和颜色的类,这里的话我们设置一个最简单的,只需要三个坐标就够了。我们使用相同的类 来表示颜色、位置、方向、偏移。所以我们会为这个类声明另外两个别名 和 ,但是要注意,不要将一个 添加到一个 中 我们定义一个类文件: 其中大量应用了函数的...

27:初始图形学(1)

2025-04-01计算机科学图形学/#CPP

最近对图形学比较感兴趣,虽然感觉找不到工作,但是帅,我花点时间学一下,刚好练习一下C++ 输出一个图像 ppm 当我们启动一个渲染器时,我们需要一种方式来查看我们的图像。最简单的方式就是将它写入文件中,这里我们使用PPM格式(因为它比较简单) 这是PPM文件格式在维基中的表现: + 第一行是文件描述子 什么P1 P2...

26:闲逛

2025-04-01随笔

你真的喜欢你现在正在做的事情吗?这真是你想学的吗?你以后还会继续喜欢它吗? 我和一位学艺术的同学聊到这个话题,我们都很喜欢自己正在做的事情。他说 "我很怕自己以后突然有一天不喜欢画画了" ,我听得很难过,因为我已经开始不喜欢我正在做得事情了。好不容易找到自己想做的事,难道仅仅也是因为新鲜感吗?他接着说 "我觉得很多人并...

25:虚拟机在C的实现

2025-03-16项目练习Simulation/#C

项目地址 https://www.jmeiners.com/lc3 vm/ running the vm 什么是虚拟机 虚拟机是一种像计算机一样的程序。它模拟CPU和一些其他的硬件组件的功能,使其能够实现算术运算,内存读写,还有与I/O设备的交互。最重要的是,你可以理解你为其定义的机器语言,然后用它来编程。 LC 3架...

24:动手写shell

2025-03-14项目练习Shell/#C

最近一直在学习,但是却忽略了最基本的需求——想要有所反馈,所以的话找了几个项目来做一做,这里的话我挑选的是一个用C语言实现shell的项目,用的是Linux编程,刚好我还没有试过在WSL上的编程开发,所以试一试呀,顺便把这个英语博客翻译一遍,锻炼下水平。 项目地址:[brenns10/lsh: Simple shell...

23:算法小练(3)

2025-02-28算法练习/#Python

简单结束了数组和字符串的学习,现在来继续学习哈希表的内容 设计哈希表 设计哈希集合 哈希表精讲 LeetBook 力扣(LeetCode)全球极客挚爱的技术成长平台 不使用任何内建的哈希表库设计一个哈希集合(HashSet),实现 MyHashSet 类: + void add(key) 向哈希集合中插入值 key 。...

22:人生的价值

2025-02-27随笔

信息安全法律基础的老师留了一个问题,和朋友石头剪刀布输了,所以是我来回答这个问题。那么 人生的价值 是什么? 以前也想过这个问题,但更多是讲给别人听的,告诉他们要积极要向上。但是很少认真的考虑这个问题,拿出一个让我自己的满意的答案。寻寻觅觅,想了一段时间,感觉大概有能拿出来说一说的想法了吧。所以记录在这里: 一串数字,...

21:KMP算法精读

2025-02-14算法字符串/#Python

这是第二遍学KMP算法,第一遍学习的过程中,对他的原理理解的是云里雾里。现在回过头来,深度学习一下KMP算法 首先我们要清楚什么是KMP算法? KMP KMP算法的优点相较于暴力匹配算法(BF)更有效率。这是因为KMP算法会利用每次匹配得到的已有的信息,来进行回溯。从而开始一次新的匹配。而暴力算法由于重复的匹配,其复杂...

20:算法小练(2)

2025-02-13算法练习/#Python

继续算法的日常练习 字符串 最大公共前缀 数组和字符串 LeetBook 力扣(LeetCode)全球极客挚爱的技术成长平台 编写一个函数来查找字符串数组的最大公共前缀;如果不存在,则返回 先纵向比对第一个字符,如果均为相同,则加入返回值中;若不正确,则直接返回 最长回文子串 数组和字符串 LeetBook 力扣(Le...

19:互联今日

2025-02-12随笔

互联今日 我本来有好多好多话想说啊 写着写着什么也写不下去了 很怀念以前在网上认识的朋友们 再看看如今的网络环境 唏嘘不已

18:十大排序算法

2025-02-10算法排序/#Python

用Python感受十大排序算法,首先我们对这十个排序进行分类 非线性排序 冒泡排序 最经典的排序算法 算法思想 将数据中的每个数与相邻的数进行比较并交换,大数往上冒,小数向下沉。将每个数遍历排序一遍 算法步骤 + 取第一个数,依次与下一个数进行排序,然后与小于(或大于)自己的数交换位置直到最后一个数 + 如果未发生位置...

17:算法小练(1)

2025-02-09算法练习/#Python

四月份还是三月份有蓝桥杯的算法比赛,加上一直对算法感兴趣。所以从现在开始稍微学一下。 每天会坚持做几题吧,因为不知道哪些比较重要,我就主要记一些我认为重要的内容和算法 数组 数组中心索引 数组和字符串 LeetBook 力扣(LeetCode)全球极客挚爱的技术成长平台 当数组中一个索引右边的和等于左边和时,称这个索引...

16:CE修改器入门教程

2025-02-08CTF逆向工程/#C

久仰CE修改器大名,今天来学习一下CE的基础使用(官方教程) 我看网上有很多图文教程,在此就尽量不配图。主要记录学习过程中的感受心得为主 1. 打开进程 ​ 这一步没啥难度,不做说明 2. 已知数值查找 ​ 先在此附上官方说明 + 扫描类型设置为“精确数值”,并设置初始数值为100,使用首次扫描 + “打我”之后血量减...

15:栈的工作原理及栈溢出的使用

2025-02-08计算机科学程序结构/#C

书接上回 这一篇主要讲一下,当一个C语言函数在执行时,操作系统是如何调度内存将数据存放并完成相关函数操作的 C语言内存分布 当一个C语言程序被编译成可执行文件执行时,它在内存中的存储如右图所示。这是一个内存空间,地址由底部逐渐升高: + 其中顶层的Kernel是操作代码的核心源码,它是操作系统完成功能的关键 + 栈用于...

14:8086CPU_Extra(12)

2025-02-01语言8086/#assembly

这里我们接下来使用TurboC2来尝试编写可执行程序,它是一个可以在DOS十六位上运行的C语言编辑器,我们使用C语言来进一步的对8086进行学习 有关Turbo2C的安装到网上找教程即可 使用寄存器 在汇编中使用寄存器,需要指定寄存器名,在C语言中也是如此 我们可以tc2.0支持以下寄存器名 根据寄存器名称可以理解对应...

13:8086CPU_Learning(11)

2025-01-31语言8086/#assembly

这几天一直在玩,要抓紧学完,去学别的东西哦 直接定址表 学习如何有效的组织数据,以及相关的编程技术 描述了单元长度的标号 我们先以一个程序为例 这里的 都是标号。这些标号仅仅表示了内存单元的地址 但是我们还有一种标号,这种标号不仅表示内存单元的地址,同时还表示了内存单元的长度 上面的程序可以写成下面的形式 在code段...

12:8086CPU_learning(10)

2025-01-30语言8086/#assembly

马上过年了,这几天要么在帮忙,要么在玩。今天是年三十,上午没什么事,我要好好学一下。 外中断 外中断信息 有一种中断信息,来自于CPU的外部,当CPU外部有需要处理的事情发生的时候。比如说,外设的输入到达,芯片会向CPU发出相应的中断信息。CPU在执行完当前的指令后,可以检测发送过来的中断信息,引发中断过程,处理外设的...

11:8086CPU_Learning(9)

2025-01-25语言8086/#assembly

昨天学的那个太难了,再加上下午一直在玩,今天要赶赶进度 int 指令 当CPU执行 指令时,相当于引发一个n号中断的过程,其执行流程如下: + 取中断类型码n + 标志寄存器入栈,IF = 0,TF = 0 + CS,IP入栈 + 可以在程序中使用int指令,调用任何一个中断的中断处理程序 比如我们使用这段程序: 当我...

10:8086CPU_Learning(8)

2025-01-24语言8086/#assembly

今天继续学习汇编语言,争取这个星期之内学完8086CPU 内中断 CPU 具有一种能力,可以在执行当前的命令之后,检测到从CPU外部发送过来的或者内部产生的一种特殊信息,并且可以立即对接受到的信息进行某种处理。这种特殊的信息,我们称之为"中断信息"。中断的意思是要求CPU马上进行某种处理,并向需要进行处理的提供了必备的...

09:8086CPU_Learning(7)

2025-01-23语言8086/#assembly

今天继续学习汇编语言,感觉有点难哇 标志寄存器 我们前面介绍了13种寄存器分别的作用,现在还剩一种特殊的寄存器,它有以下功能: + 用来存储相关指令的某些执行结果 + 用来为CPU执行相关指令提供行为依据 + 用来控制CPU的相关工作方式 这种特殊的寄存器被称为 标志寄存器(flag) 它和别的寄存器不同,其他寄存器用...

08:8086CPU_Learning(6)

2025-01-23语言8086/#assembly

今天继续学习汇编语言 转移指令的学习 jmp指令 使用jmp指令需要给出两种信息: + 转移的目标地址 + 转移的距离(段间转移,段内转移,段内近转移) 根据位移进行的jmp指令 先对两种jmp进行介绍: 功能为:(IP)=(IP)+ 八位位移(short指明) + 8位指令=标号处的地址 jmp指令后的第一个字节的地...

07:关于技术与学习的思考

2025-01-22随笔

自从大学以来我一直在思考一个问题 是学技术重要还是卷绩点重要? 从学校的角度出发,因为是一个中下游的211,有一定的保研资格但是不多,所以给人一种有希望的感觉。但是僧多肉少,很多人为了保研无所不用其极,或者说是要舍弃很多的东西。对我而言,可能最让我纠结的便是在卷绩点上面所花费的时间。 从我个人的角度出发,我十分喜欢自己...

06:CPU_Learning(5)

2025-01-22语言8086/#assembly

DEBUG的用法 在 DOSBox 中使用 DEBUG 工具时,可以使用以下命令及其用法,这些命令主要用于调试汇编语言程序、查看和修改寄存器与内存内容、执行代码等。以下是 DEBUG 的所有常用命令及其详细用法: 1. 进入和退出 DEBUG 进入 DEBUG :在 DOSBox 中输入 命令。 退出 DEBUG :使...

05:8086CPU_Learning(4)

2025-01-18语言8086/#assembly

为了进一步的使用对内存单元进行灵活的操作,所以使用 [BX]和loop指令 对其进行操作 [BX]和loop指令 在开始学习之前,需要对一些符号进行讲解 1. [bx]和内存单元的描述 要完整的描述一个内存单元,需要两种信息: + 内存单元的地址 + 内存单元的长度(类型) 这里[bx]表示一个内存单元,段地址默认为d...

04:8086CPU_Learning(3)

2025-01-18语言8086/#assembly

今天晚上的学习任务是用汇编写一个 可执行程序 ,接下来开始吧 第一个程序 一个源程序从写出到执行的过程 1. 编写汇编原程序 产生一个存储源程序的文本文件 2. 对源程序进行编译连接 先使用汇编语言编译程序对源程序进行编译,产生目标文件;再用连接程序对目标程序进行连接,生成可在系统中运行的可执行程序 可执行程序包含两部...

03:8086CPU_Learning(2)

2025-01-17语言8086/#assembly

昨天我们学习了 简单寄存器的使用 和 DEBUG 程序的使用 这一篇我们将学习 寄存器的内存访问 寄存器(内存访问) 从访问内存的角度认识学习寄存器i 我们知道一个字的存储分为高字节和低字节,由于内存地址是自上而下向下递增的,所以高位字节从内存分布上看再地位字节的下面 也就是说当我们从0地址开始存放 数值20000(4...

02:8086CPU_Learning(1)

2025-01-17语言8086/#assembly

搞了那么久的博客现在终于可以开始汇编语言的学习了 这里我用的教材是王爽老师的《汇编语言》,使用的环境是基于DOSBOX的模拟DOS环境 接下来开始正式的学习 今天的内容是 寄存器 和 实验一 寄存器 8086CPU共有14个寄存器,每个寄存器都有对应的名称,他们分别是: , , , , , , , , , , , ,...

01:My_First_Blog

2025-01-17博客编辑#Hexo

这是我的第一篇博客,这个博客搭建花了很多时间,遇到了很多问题,在这里分享一下 环境配置 首先是环境的配置 你需要安装 作为包管理器进行 网站的搭建 其次你需要将 与你的 账号建立SSH通道 然后进行Hexo的安装: 接着新建一个文件夹作为你的本地博客的文件,进行安装Hexo的依赖 搭建博客 初始化 首先我们需要创建一个...