⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 操作系统引导程序
💻 TXT
字号:
 修改记录:              1.修改这个文档,修改 Boot.s和setup.s 的输出信息,使其更加美观.                                2002.9.1       2.定制djgpp nasm 在win下编译                                 本版功能:              5.移植到djgpp 使用windows 下的gcc nasm 编译成功,并且使用vmWare调试.         至此,开发方式定型了: sourceinsight, vmvare, djgpp, nasm. ^_^          下一步考虑使用tc 或者其他的编译器制作setup中的16位程序.                 (使用C 加强setup.s 的功能)                 4.Boot 装载 setup+os 到 0X10000              3.在实模式下跳到 setup, setup 把 os 移动到 0x100000 (1M)              2.然后切换到保护模式,用一句长跳转 jmp dword 8:0x100000                           (nasm can mix 16bit and 32bit code)       1.使用了 c++ 主意事项:              2).setup.s 预留了2048(0x800)个字节供以后使用              1).setup.s 预留空间, setup 搬移 os 的位置(紧邻setup之后),应该一致.               总结:       系统从 1M 的地方跑起来,总算像个操作系统的 Loader 了!!!!!曾经遇到Bug 2 :(  2001.12.?     系统起动后跳到 0x10000 ,但是setup地址gdt_48 定义为 gdt,0x9                                              改为 gdt,0x1     问题解决.Bug 1 :( 2001.12.15 晚 11:51 bug fixed      先看看这个程序段      ;move os.bin to 0x100000        mov     esi,0x010800         ;source offset        mov     edi,0x100000         ;dest offset        mov     ecx,0x1500           ;count    move:        mov    ax, word [dword ds:esi]        mov    word [dword ds:edi],ax        dec    ecx        cmp    ecx,0        je     endmove        inc    esi        inc    edi        jmp    move      ;晕倒,没写这一句,怎么他妈的移动!    endmove:        看到我写的注释了吗? 一开始竟然没写上              jmp move       后来把 ;dest offset 改为 0xb8000(直接写屏),发现屏幕上只有 一个红色的       f 在闪动,才查到这个问题  Bug 备忘录:    1) 在切换到保护模式后错误的使用 int 0x10 显示字符串    2) 使用不可写的段描述符 向显存写字符    3) 没有把选择子装入 ds        4)今天遇到几个问题: 2002.9.16         a) 去掉了函数c 中的类变量ab, 就不能出现绿色的Copyright信息.                  b) 去掉全局的类变量aaa, 就不能启动os. (head.s 不工作).         经过反复试验和观察, 结论如下:         b) 不能复现, 认为是djgpp 环境运行不稳定,和着copy/b问题,总之,             没有确切原因. 应该不会再出现.        a) 再函数重的类变量, (on stack )会调用初始化函数. 而全局的类            变量则要做未知的特殊处理. 所以导致g_x g_y 特别是g_color            没有处世化. 从而再不确定的位置打印出黑色字,被误认为            是os死掉了.        结论:           1)  使用cpp 做os 对全局类变量要有初始化动作,方法未知.           2)  一定要清bss           3) 全局变量一定要初始化. 定义时赋值好像不起作用,其实起               了作用, 因为位置不会变,只有颜色变黑,从而出现误会.               因为定义时赋值为0(黑).       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -