目录 回顾 今日目标 必要工具的安装及介绍 工具一览 工具介绍 GCC Hosted Environment Freestanding Environment Linker C 语言编译(gcc 的临时文件) 预处理或预编译(Pre-processing) 编译(Compiling) 汇编(Assembly) 链接(Linking) Objdump Nasm Ndisasm Cross-compiler C 与汇编 局部变量 条件判断 循环 函数调用 指针 加载内核 手动编译 指定内核入口 extern 指令 Makefile 基本规则 特殊变量 默认目标与临时文件清理 宏、匹配规则与通配符 新的代码结构 新的 Makefile Debug 内核代码 QEMU 与 GDB 总结 参考链接 回顾 上一篇文章,我们讨论了以下内容: 读取硬盘所需的参数设置,硬盘数据的地址由 CHS 提供,我们需要将柱面,磁头,扇区信息写入相应的寄存器…
Tag: OSFromScratch
0x200-从头开始写操作系统-进入32-Bit Protected Mode
目录 回顾 今日目标 BIOS 读取硬盘数据 硬盘 读取硬盘数据的参数 硬盘参数小结 调用中断读取硬盘数据 32-Bit Protected Mode 关于 32-Bit Protected Mode 什么是 32-bit Protected Mode? 为什么我们需要 32-bit Protected Mode? 32-bit Protected Mode vs 16-bit Real Mode 32 位模式下的字符打印 告别 BIOS 32 位模式下的显示设备调用 Memory-Mapped Device(Memory-Mapped I/O) VGA 模式(Video Graphics Array) VGA 模式内存 32-bit Protected Mode 输出字符 全局描述符 什么是 GDT 及 GDT…
0x120-从头开始写操作系统-启动扇区与内存的关系及内存寻址的应用
目录 回顾 今日目标 Boot Sector 与内存的关系 打印任意内存位置上的内容(以 16 进制输出) 物理寻址的应用 找到 Boot Sector 在内存中的前两个字节的位置 寄存器 寄存器的种类 通用寄存器 段寄存器 指针寄存器 索引寄存器 控制寄存器 段和段寄存器小结 完成任务 程序拆解及必要汇编指令 org 指令 jmp 指令 times 指令 pusha popa 指令 条件控制指令 其他必要的汇编指令 总结 参考链接 回顾 上一篇,我们讲到了以下内容: 16-bit Real Mode 是 x86 系列 CPU 的一种工作模式,所有 x86 系列 CPU 启动时,都处于 16-bit Real Mode 16…
0x120-从头开始写操作系统-启动扇区与内存以及读取磁盘数据
目录 回顾 今日目标 Boot Sector 与内存的关系 打印任意内存位置上的内容(以 16 进制输出) 物理寻址的应用 段寄存器(Segment Register)和索引寄存器(Index Register) 找到 Boot Sector 在内存中的第一个字节的位置 什么是内存分段 16-bit Real Mode 物理内存地址的计算 第一个引导扇区程序 中断 中断的作用 中断,Interrupt Vector 和 ISR 常见中断 Hello World 总结 参考链接 回顾 上一篇,我们讲到了以下内容,在回顾一下。 16-bit Real Mode 是 x86 系列 CPU 的一种工作模式,所有 x86 系列 CPU 启动时,都处于 16-bit Real Mode 16 bit 系统中,只有 64…
0x110-从头开始写操作系统-CPU模拟器
目录 回顾 CPU模拟器 引导扇区编程(16-bit Real Mode) 什么是 16-bit Real Mode? 16-bit 系统中的 16 是什么意思? 8086 架构的内存寻址总量 8086 架构的内存管理 什么是内存分段 16-bit Real Mode 物理内存地址的计算 第一个引导扇区程序 中断 中断的作用 中断,Interrupt Vector 和 ISR 常见中断 Hello World 总结 参考链接 回顾 系列开篇讲了计算机启动时的情况。计算机启动时,BIOS 做硬件检查,然后按顺序读取存储介质上 512 字节长的 boot sector。如果读到某个存储介质的 boot sector 最后 2 个字节是 0xaa55,就加载该介质上的操作系统,将控制权交给该操作系统。 CPU 模拟器 上篇中我们有了一个 512 字节的 boot sector:…