自制操作系统OS-1

来源:互联网 发布:淘宝3c证书编号 编辑:程序博客网 时间:2024/05/01 22:40
无知者无畏OS
1,自制操作系统,我们基于Windows平台下的编辑器,用汇编和C语言,但C语言不能用到关于Windows系统调用的函数(如prinf,系统分配资源函数),只能用一些简单的操作语句,我们把操作系统(软件)制作成映像文件写入软盘或U盘进行加载运行,再打开电源,启动BIOS芯片(BIOS里有BIOS程序),GPU也有BIOS程序;;;;;;


2,
二进制(十六进制)编辑器的原理和使用(一切高级语言编译器的原型,一切的数字文件软件都可以用这个编辑器制作);;;;;;
3,
汇编语言
3.01
“;”位注释符。图一
3.02
DB(data byte)指令:往文件里直接写入1个字节(两位)的指令,db小写一样,程序员的杀手锏。还可以用它直接写字符串,汇编语言会自动查找字符串中每一个字符所对应的编码,就不用自己去查字符编码表了。DB 0x0a表示换行。
3.03
RESB(reserve byte)指令:resb + 从现在的地址开始空出n个字节,还能在这些空的字节里输入很多0x00(0x开头位十六进制),节省程序行;;;;;;
3.04
DW(data word)和DD(data double-word)指令:在计算机汇编语言中,word指的是16位的意思,也就是两个字节,DD就是32位4个字节。
3.05
ORG(origin)指令:程序要从指定的这个地址开始,也要把程序装载到内存中的指定的地址;;;;;
3.06
JMP(jump)指令:相当于C语言的goto语句,跳转,后接entry(这是一个标签的声明);;;;
3.07
MOV(move)指令:意思不是移动,确切点是赋值,被移动的的内存(寄存器)里的值不会被消除,相当于copy。MOV指令使用时,元数据和目的数据的位数必须相同。;;;;;
3.08
ADD(add)加法指令:“ADD SI,1”《==》SI=SI+1,;;;;
3.09
CMP(compare)指令:“CMP AL,0”意思是比较0与AL中的值得大小,;;;;
3.10
JE(jump if equal)指令:条件跳转指令,一般与CMP合用,如(CMP AL,0   JE fin<-->if(AL==0){goto fin(finish结束)}),;;;
3.11
INT(interrupt)指令:是软件中断指令。中断机制,;;;;;;


而BIOS程序则在另外一个空间里面,如果你想到那个空间,你可以发送中断,但是本质而言中断无非是一种特殊的GOTO而已罢了。
;;;;
3.12
HLT(halt)指令:停止的意思,让CPU停止动作的指令,让CPU进入待机的状态,只要按一下键盘或鼠标就可以让CPU醒过来,与goto fin;语句连用进行循环操作,可以把中断理解为一种外部GOTO,我们知道GOTO随便跳,但再怎么跳还是在程序自己看得到的空间里面;;;;;


4,
CPU(central process unit)中只能对电信号进行识别和交换处理(字符、单词,图片,音频等转换位01二进制信号),电脑的32位和64位都是寄存器的位数,还有早期的16位寄存器,(我们以32位的操作系统为例)8个16位的寄存器(AX——accumulator累加,CX——counter基数,DX——data数据,BX——base基址(X的意思是extend扩展)SP——stack pointer栈指针,BP——base pointer基址指针,SI——source index源变址,DI——destination index目的变址寄存器,一共加起来也就16个字节的寄存器容量大小,AL,CL,DL,BL,AH,CH,DH,BH为8个8位的高低位寄存器),即便我们家的电脑是32位的(其期存器在16位寄存器前加上E,如EAX,但32位中的低16位才有用,高16位没有寄存器编号)也只能存储32个字节,就算把8个段位寄存器(16位)加起来也就44个字节的存储量。还有8个16位的段寄存器(ES,CS,SS,DS,FS,GS);;;;;;;
5,
“MOV AL,[SI]” []这个符号的意思是内存,而不是代表以前的那个寄存器。CPU要通过自己的一部分管脚(引线)向内存发出电信号,告诉内存把指定的内存地址上的数据通过我的管脚传过来,因为程序都是在内存中运行(从外存中调到内存,再由CPU执行机器语言,从内存中一个命令一个,命令地读取程序,顺序执行),(严格来说,CPU和内存之间还you称为芯片(chipset)的控制单元);;;;;;
6,
BIOS(basic input output system)基本输入输出系统(程序),出厂时就组装在主板的ROM单元里,BIOS程序其实就是一个函数库,用各种数字调用里面的函数(为系统开发人员准备的各种函数),而INT(INT+数字,如0x10即16号函数就是控制显卡的函数)就是用来调用这些函数的指令,显示一个字符(文字)图二,内存(2G)的0号地址开始后面的一段空间用来放的是BIOS的是实现程序(用来实现各种不同功能的地方)如果我们随便乱用的话就会与BIOS发生冲突,另外内存的0xf0000号地址的附近还存放着BIOS程序本身,也不能使用。0x00007c00-0x00007dff :启动区内容的装载地址,程序中的ORG指令的值就是这个数字。
7,
制作启动区,
 
0 0
原创粉丝点击