windows程序设计
基础知识
字符集
我觉得字符集这里要分为两个部分:
字符集编码: 一个字符对应一个数字值, 不同的字符集对应的编码是不一样的 比如 ascll 编码 和 Unicode 和 ansi
编码方案: 如何转换计算机里面的字节数据到编码 比如 Unicode的转换就有 UTF-8 UTF-16 UTF-32
asni编码 根据不同国家对应的编码方案是不同的, 字符集也不同
字符和宽字符
宽字符使用Unicode编码 统一两个字节 字符的话一般使用多字节编码ansi
12wchar* "c语言" // 在Unicode下面这个是8字节char* "c语言" // 在ansi 里面是6字节 c一个 \0 一个 其他都是双字节
注意区分代码编码 和 变量本身编码 这是两个不同的东西, 代码的编码取决于你的选择, 但是变量的编码一般不是你决定的, 但是你的代码编码会影响到变量里面的值
比如 你的代码文件采用的是asni 但是对于 wchar* “c语言” 文件里面它是6字节 但是内存里面它是8字节 (可以这样理解), 如果代码文件编码 ...
设计模式
设计模式
一 创建型模式
创建对象时隐藏创建逻辑,而不是直接使用new的方式创建对象,可以根据程序判定创建什么样的对象,这样会很灵活
1.工厂模式
在工厂模式中,不对外暴露对象创建的过程,用户需要什么跟工厂要就行.
优点:
不需要知道产品内部实现细节,只需要知道产品对应的接口能干嘛就行
扩展性高,增加一类产品只需要多写一个工厂类就行
缺点:
每次创建一类产品,都需要增加一个工厂类,而多增加一个产品,需要更改工厂类的代码
举例说明:
我们买车只需要直接告诉造车工厂我们需要什么车就行,不需要知道车怎么造出来的,如果我们需要买飞机,我们就需要告诉造飞机的工厂,
车:接口
奥迪:具体实现类
造车工厂:工厂类
我们知道车可以干嘛,然后我们可以根据喜欢向工厂要什么样的车.
每多一个接口,就需要多 一个工厂类,每多一个具体实现类,工厂类里面就需要多些一段代码.
何时使用: 明确知道不同条件下需要创建什么对象,如果创建对象本来就很简单,我们还是直接new比较好
2.抽象工厂模式(---------)
抽象工厂是工厂的工厂,它可以创建工厂类对象,创建的工厂又可以提供创建 ...
学习方法论
前言
长久以来,我对学习的态度可以概括为"随遇而安"——面对新知识时,总是凭直觉和当下状态决定学习策略,没有形成系统的方法论。这种即兴式学习看似灵活,实则暗藏效率陷阱:常常在学习到一半时,才想起曾经使用过的更高效方法,结果是浪费了大量时间和精力。
经过反思,我意识到:建立个人学习方法论不是可有可无的锦上添花,而是提升学习效率的必要基础
按照这个方法论加上主观能动性来学习, 定会事半功倍, 以这个方法论为主导, 加上具体问题具体分析
在不断实践中, 完善学习方法论
方法论
记录
一定要保留学习记录痕迹, 看过的书, 问过的问题, 写过的东西
能清楚的知道我们学到哪里了
后续遇到同样的问题, 很快就能找到答案
操作系统镜像还原
实模式下的中断向量 占4个字节 段基址+段偏移地址(中断处理程序地址) 中断向量表最多1024 字节, 因此最多256中断处理程序
关于电脑的一些基本硬件
前言
最近本人心血来潮想自己diy主机玩玩, 然后呢我只知道电脑需要些什么, 但是他们的型号啊, 搭配关系啊, 我是完全不知道的, 因此就记录一下
主板
主板型号通常由几个部分组成,每个部分代表不同的信息,帮助用户了解主板的规格和功能。以下是主板型号中常见的组成部分及其含义:
1. 品牌名称
代表主板的制造商或品牌,例如华硕(ASUS)、技嘉(Gigabyte)、微星(MSI)等。品牌名称通常是型号的第一个部分,用来识别主板的生产厂商。
2. 芯片组代号
芯片组是主板的核心部分之一,影响主板的性能和功能支持。常见的芯片组代号是字母和数字的组合,表示主板采用的芯片组类型。
例子:
Intel平台:Z790、B660、H510 等(Z代表高端,B和H则代表中低端)。
AMD平台:X670、B550、A320 等(X代表高端,B和A表示中低端)。
3. 平台和处理器代号
有时型号中会包含与支持的处理器类型或平台相关的信息。特别是在不同代数的CPU出现时,主板厂商会区分主板型号。例如,Intel的 LGA 1700 或 AMD 的 AM5 插槽。
例子:
Intel:LG ...
自制操作系统
启动
BIOS
basic input output system 基本输入输出系统
BIOS启动流程: 加电自检, 然后读出启动盘的第一个扇区 到 0x7c00 位置 然后调整到 0x7c00位置执行代码, 这个时候把执行权限交给我们, 我们需要将代码写入到第一个扇区, 然后将操作系统加载到内存中
此时CPU处于的模式是在实模式下 , 在这个模式下我们能够直接操作内存, 想怎么操作怎么操作, 但是只有1M的寻址空间
中断
中断处理流程
中断产生和检测:
当外部设备或其他源产生中断信号时,外部中断控制器(如PIC或APIC)负责接收这些信号。
当CPU完成当前执行的指令后,它会检查中断控制器是否标记了任何待处理的中断。
中断向量和中断服务例程(ISR)的查找:
如果中断被允许(即处理器的中断标志IF位为1),CPU会从中断控制器获取一个中断向量号。
使用这个中断向量号,CPU会查找IDT(中断描述符表),以确定相应的中断服务例程的地址。
状态保存和中断响应:
在跳转到中断服务例程之前,CPU自动保存当前的代码段寄存器(CS)和指令指针(IP)到堆栈中。 ...
vscode的使用
前言
这里主要介绍一些配置项和好用插件
外观
主题选择
文件主题
vscode-icons
Material Icon Theme
插件
运行和调试
vscode 是通过 配置launch.json 和 task.json 来 进行调试和 运行程序
python配置
123456789101112131415161718192021{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python 调试程序: 当前文件", // 当前配置名字 "type": "debugpy", // 类型 "req ...
makefile学习
前言
什么是 Makefile?
Makefile 是一个用来自动化构建项目的简单工具,通常用在编译和链接程序的过程中,但它也可以用来执行任何你想自动化的任务。Makefile 包含一系列规则和指令,它们定义了如何构建项目和执行其他相关任务。
为什么使用 Makefile?
自动化:Makefile 可以自动化许多编程任务,比如编译源代码、生成文档、或执行测试等。
依赖跟踪:make 工具可以自动检测文件之间的依赖关系,只重新构建实际需要更新的部分,而不是整个项目。
**跨平台:**虽然 make 最初是为 Unix 和类 Unix 系统开发的,但现在也可用于许多其他操作系统。
Makefile 的基本组成
目标(Target): 是你想完成的任务名称。比如:编译源代码可以是一个目标。
依赖(Dependencies): 是完成任务所需的前置条件,通常是源文件或其他目标。
命令(Commands): 是 make 执行的实际命令,它们指定了如何从源文件创建目标输出。
伪目标(Phony target): 伪目标并不代表实际的文件名,而是一个执行特定任务的标签名称。伪目标没有对应的 ...
计算机组成原理
十万个为什么
目前CPU分为两种架构,精简指令集和复杂指令集,不同的CPU的指令集是不一样的
精简指令集(RISC):动作简单,执行时间短,效率高,执行复杂操作的时候,需要多条指令集完成 主要的CPU有:ARM ,SPARC
复杂指令集(CISC):
硬盘是分扇区的,以前每个扇区512B,为了减少存储一个文件的拆解 现在一般是 4KB(所以现在文件所占大小一定是4KB的整数倍,所以文件的实际大小一般比文件所占大小小),
传统硬盘是分为很多盘片,每个盘片上又分为很多磁道(就是一圈一圈的),每个磁道又分了很多扇区,每个扇区就是存放一个文件的一部分的地方,每个盘片相同的磁道被称为柱面,当我们需要数据时,告诉磁头在哪个盘面哪个扇区哪个柱面就行,这样是比较慢的,因为盘面转一圈才能找到一个或者多个文件块.
固态硬盘像内存那样,可以直接定位到数据在哪,所有就非常快
Linus是很聪明,但是,我觉得他的成功可不只有聪明,他早些年的经历(学过组合语言,经常跟硬件打交道,明白硬件的特性,CPU不够用,需要紧凑,这样写代码的话需要充分考虑资源,这些不是正好符合操作系统的功能吗?),让他写出了如此优秀的操作 ...
bochs安装
使用centos7 (遇到坑不少)
bochs-gdb安装(2.7)
由于bochs的GDB要么本地要么远程, 所以我们得整两个bochs, 这个就当bochs-gdb
参考地址 https://zhuanlan.zhihu.com/p/492780020
依赖库安装
1sudo yum install gtk2 gtk2-devel libXt libXt-devel libXpm libXpm-devel SDL SDL-devel libXrandr-devel.x86_64 xorg-x11-server-devel glibc-headers gcc-c++ SDL SDL-devel
安装nasm
1234567wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.gztar xvzf nasm-2.15.05.tar.gzcd nasm-2.15.05./configuremakesudo make install
下载bochs
1234wget https:// ...