30OS笔记(1)

来源:互联网 发布:在淘宝上怎么搜索发票 编辑:程序博客网 时间:2024/05/19 20:20
从第一天到第四天
汇编、操作系统的完全什么都不知道,所以只是自己一点一点猜测尝试,简单写两笔免得忘得太快吧。。。
首先这个纸娃娃系统是写在软盘里的。由于没有软驱,用VM的时候到调用显卡BIOS函数的时候总是出现  “”客户机操作系统已禁用 CPU。请关闭或重置虚拟机“”  这种东西。其他没什么问题。
(1)在批处理中..表示上一级目录;
(2)
+——————— 0×0
| Interrupts vectors(中断向量表)
+——————— 0×400
| BIOS data area(BIOS的数据区域)
+——————— 0×5??
| OS load area(操作系统加载区域)
+——————— 0x7C00
| Boot sector(引导区域)
+——————— 0x7E00
| Boot data/stack(引导数据/堆栈)
+——————— 0x7FFF
| (not used)
+——————— (…)
这个表给出了操作系统从0x7c00开始加载,0x7c00-0x7dff都是用于启动区的。然后把整个系统从0x8200装载进去(缓冲区)。但似乎电脑自动将他前512字节留给启动区(直接复制数据不好吗?有可能是效率问题),也就是从0x8200才是真正的操作系统内容。至于为何选用0x7c00,是历史原因。
延伸:http://www.glamenv-septzen.net/en/view/6
(3)
写操作系统的结构:
1、写个启动区ipl10
2、用汇编和c写系统
3、揉到一起
(4)C语言函数与寄存器的对应
ESP,是一直指向栈顶的指针。EBP指向活动记录。EAX是返回值。
第一个形参地址[ESP+4],依次递增。
与C语言联合使用时,只有EAX、ECX、EDX这3个能自由使用。
(5)色号设定
这里用300*200的8位颜色模式,色号使用8位二进制数,仅有256种颜色。而RGB方式是用6位16进制数。为了与#ffffff格式对应而使用了调色板,
其实就是个目录索引。做这个索引的目的是为了省内存。
这里给出只有当
3*N*B>3*N*B'+(B'+B)*2^B'时,调色盘才能省。
N表示像素数,B表示原色号位数,B'表示调色盘色号位数。
从以上公式看出,由于B'在指数位上,所以当色位数一高调色板就没有什么卵用。因此现在真彩色压根儿就不用这玩意儿。可见这本书有多老....
(6)
static相当于DB,声明数组相当于RESB
0 0
原创粉丝点击