基于bochs实现X86操作系统
操作系统实战、实模式、保护模式、内存管理、文件系统、多线程创建等等
干锅土鸡
这个作者很懒,什么都没留下…
展开
-
局部段描述符表的使用
%include "inc.asm"org 0x9000jmp ENTRY_SEGMENT[section .gdt]; GDT definition; 段基址, 段界限, 段属性GDT_ENTRY : Descriptor 0, 0, 0CODE32_DESC : Descriptor 0...原创 2021-08-04 09:29:16 · 72 阅读 · 0 评论 -
从保护模式返回实模式
未对esp寄存器赋值但是进入保护模式后,esp指向栈顶依然会用到%include "inc.asm"org 0x9000jmp ENTRY_SEGMENT[section .gdt]; GDT definition;GDT_ENTRY : Descriptor 0, 0, 0CODE32_DESC : Descriptor 0, Code32SegLen - 1, .原创 2021-08-03 22:29:30 · 111 阅读 · 0 评论 -
实模式到保护模式(下)
dword:双字,32位loader.asm%include "inc.asm"org 0x9000jmp CODE16_SEGMENT[section .gdt]; GDT definition; ¶Î»ùÖ·£¬ ¶Î½çÏÞ£¬ ¶ÎÊôÐÔGDT_ENTRY : Descriptor 0, 0, 0C.原创 2021-08-03 09:54:28 · 103 阅读 · 0 评论 -
实模式到保护模式(中)
试水产品,市场反响不错,继续推出后续产品X:处理器的排名,例如:8086、80286、80386等等原创 2021-08-03 08:56:03 · 91 阅读 · 0 评论 -
实模式到保护模式(上)
CPU:不处理没有考虑安全性原创 2021-08-02 21:03:37 · 69 阅读 · 0 评论 -
主引导程序控制权的转移
目前内存使用情况:将控制权从boot转移到LoaderFat Table占据4KB空间,起始于0x7e00boot.asm:org 0x7c00jmp short startnopdefine: BaseOfStack equ 0x7c00 BaseOfLoader equ 0x9000 RootEntryOffset equ 19 RootEntryLength equ 14 EntryItemLength equ 3原创 2021-08-02 10:45:10 · 127 阅读 · 0 评论 -
突破512字节的限制(下)
这一篇的重点是通过FAT表项将文件内容加载进入内存在根目录区每一项占32字节,对我们有用的只有这32字节,只拷贝这32字节有利于不浪费内存:原内存与目标内存有重叠的情况,那么拷贝的方向就至关重要!!!图中内存向下增长。拷贝内容起始地址比目标起始地址低时,应该从尾部向头部进行拷贝。si大于di就跳转至btoe汇编代码如下:org 0x7c00jmp short startnopdefine: BaseOfStack equ 0x7c00 Bas.原创 2021-08-02 09:42:06 · 270 阅读 · 0 评论 -
突破512字节的限制(中)
创建辅助函数就是为了这张流程图C语言和汇编同一个功能的代码对比:首先看看cx是不是为0,如果为0就跳转到equal(相等)处,不为0那么将si处的数据放入al,如果与di处一样,那么就跳转到goon继续比较,si++指向下一个单元,di++,cx–,跳转到compare继续比较(while循环)org 0x7c00jmp short startnopdefine: BaseOfStack equ 0x7c00 RootEntryOffset ..原创 2021-08-01 22:09:35 · 168 阅读 · 0 评论 -
突破512字节的限制(上)
ax bx的值是规定好的,不必深究原创 2021-07-31 09:17:28 · 213 阅读 · 0 评论 -
主引导程序的扩展(下)
长得很像链表(无表头)原创 2021-07-28 12:10:37 · 73 阅读 · 0 评论 -
主引导程序的扩展(上)
将主引导程序加载到内存中执行,然后在存储介质中寻找目标程序,加载到内存中执行,将控制权交给此程序(跳转到目标程序第一条指令执行)在C/C++中可以直接搜寻文件名读取加载,但这是基于操作系统的,现在没有操作系统,不能这么做。那咋办?引入文件系统挂载到Linux:方便写入文件创建1.44大小的虚拟软盘,命名为data.img增加14行,意思是:将虚拟软盘data.img增加到freedos里面去,盘符是B盘进入bochs,敲入c命令,进入freedos系统敲入format B...原创 2021-07-28 11:43:01 · 96 阅读 · 0 评论 -
调试环境的搭建
当输入bochs命令时,会从当前目录寻找启动文件bochsrc等在入口处打一个断点reg:查看寄存器的值step:执行一条指令原创 2021-07-28 08:36:46 · 77 阅读 · 0 评论 -
Hello,DTOS
把0x07这个数据放入0xb800:0x01地址处,数据只占一个字节至于为什么参数寄存器这么写,不用深究,可以查阅相关手册org 0x7c00 //指明入口地址,主引导程序入口地址为这个start: //标签,另一层含义是下面一行指令的地址 mov ax,cs //下面四行:把相关寄存器值清零 mov ss,ax mov ds,ax mov es,ax mov si,msg //将msg代表的地址放入si寄存器,也就是msg下面一行指令的地址...原创 2021-07-28 01:37:12 · 79 阅读 · 0 评论 -
进阶操作系统
原创 2021-07-27 23:04:15 · 83 阅读 · 0 评论