Akvicor World 太棒了,我逐渐理解一切
AOS

AOS开发 04 - Loader

文件: boot.asm 完整项目代码在末尾 在上篇中, 我们已经完成了boot的编写, 并且成功的将loader加载入内存

Akvicor 发布于 2025-04-07
AOS

AOS开发 03 - Boot

文件: boot.asm 完整项目代码在末尾 从上篇可知, 留给我们的代码部分只有420字节. 而boot代码需要完成的任务也很简单, 只需要从磁盘加载loader到内存中, 并跳转到loader执行 加载inc文件和jmp 在之前我们已经完成了两个文件的设计 def.inc 和 fat32.inc

Akvicor 发布于 2025-03-30
AOS

AOS开发 02 - FAT32的世界

文件: fat32.inc 幸运的是我们不用自己编写这个文件, 不幸的是我们需要编写生成这个文件的程序 我们需要先做些准备, 方便未来的开发 在后续中, 我会使用 /dev/sda 代指磁盘或磁盘镜像, 如果你使用的是U盘, 那么我建议你修改可以临时修改磁盘的权限, 使得所有用户都可以读写磁盘 su

Akvicor 发布于 2025-03-26
AOS

偶遇bug,强如怪物,拼尽全力无法战胜...

哦对的对的,哎呀不对不对,对...对吗? 并非全力 0x500 处的内存不要碰,否则可能导致程序跑飞 可能是由于BIOS占用了这个区间的一部分内存,随便改写导致异常。 但是实模式内存分布图上显示这一块确实是随便用。

Akvicor 发布于 2025-03-25
AOS

AOS开发 01 - 可用内存分布&boot和loader阶段数据存储位置

文件: def.inc 众所周知x86的cpu在启动之后处于实模式, 只能访问前1MiB的内存, 且很多位置是不能随便写的, 因此我们需要提前设计好每个在boot和loader阶段用到的变量存放的位置, 防止因为不小心将数据写入错误的位置而导致boot和loader跑崩 即使查询了大量的内存分布的资

Akvicor 发布于 2025-03-25
AOS

AOS开发 00 - 介绍 & 环境搭建

当我第一次接触操作系统后, 我就觉得我一定要开发一个属于自己的. 然而当时的我并没有意识到这是一个不见底的深渊 开发平台和环境 始于Debian10, 目前已经Debian12了(~~这闪电般的开发进度, 不愧是我~~), 各种工具可以直接使apt直接安装, 不必担心因为各种操作系统开发书籍和教程里

Akvicor 发布于 2025-03-24
AOS

Unreal mode

Unreal mode consists of breaking the 64KiB limit of real mode segments (while retaining 16-bit instructions and the segment * 16 + offset addressing m

Akvicor 发布于 2023-02-27
AOS

AOS32 显示中文字符GB2312

aos32-gb2312.tgz 一个GB2312汉字是由两个字节编码的,范围为A1A1~FEFE。A1-A9为符号区,B0到F7为汉字区。每一个区有94个字符。 点阵结构 从图片可以看出:日文编码的第一个字节为点阵的左半部分,第二个字节为点阵的右半部分。

Akvicor 发布于 2023-02-27
AOS

Stack alignment in x64 assembly

gcc会在 call 指令之前让 rsp 按 16 字节对齐。 cpu在 call 的时候将 rip 压栈 rsp -= 8 ,所以进入被调用者之后 rsp = 8 (mod 16) 。如果在这个函数里面还要 call 其他函数的话就要将 rsp 减掉奇数个 8 让它重新 16 字节对齐。

Akvicor 发布于 2022-08-23
AOS

BOOT

根据各种书籍教程我们可以知道, 当BIOS加载完毕后会把启动扇区的 512 个字节复制到内存的 0x7c00 处,然后从 0x7c00 处开始执行 显而易见这处空间很小, 因此boot的主要使命就是从磁盘中找到loader并加载入内存中, 然后交由loader完成进入内核前的准备 初始化寄存器 我将

Akvicor 发布于 2022-08-22