纸娃娃操作系统汇总分析(16d)_第1页
纸娃娃操作系统汇总分析(16d)_第2页
纸娃娃操作系统汇总分析(16d)_第3页
纸娃娃操作系统汇总分析(16d)_第4页
纸娃娃操作系统汇总分析(16d)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、纸娃娃操作系统汇总分析(16days)1 ipl.nas(initial program loader);haribote-iplcyls equ10org0x7c00jmpentrydb0x90db"haribote"dw512db1dw1db2dw224dw2880;dboxfo;dw9dw18dw2dd0dd2880db0,0,0x29ddoxffffffffdb"hariboteos"db"fat12 ”resb18这个程序都是为了 x86架构会在bios启动后加载第一个扇区,故此这个512字节需要放置 特殊的字符,entry:ax,0

2、ss,axsp,0x7c00ds,axmovmovmovmovmovmovmovmovax,0x0820;柱面0;磁头0es,axch,0dh,0movcl,2;扇区2readloop:movsi,0;记录失败次数retry:movah,0x02;ah=0x02 :读入磁盘moval,1;1个扇区movbx,0movdl,oxoo;a驱动器int0x13;调用磁盘biosjncn ext;没出错到nextaddsl,l;si+1cmpsl,5;si与5比较jaeerror;si >= 5 跳到 errormovah,0x00movdl,oxoo;a驱动器int0x13;重置驱动器jmpr

3、etrynext:movax,es;把内存地址后移0x20addax,0x0020moves,ax;以为没有add es,0x020指令,所以在这里绕个弯子addcl,1;cl+1cmpcl,18;cl于18比较jbereadloop;cl<= 18 跳到 readloopmovclz1adddh,1cmpdh,2jbreadloop;dh < 2 跳至1 readloopmovdh,0addchz1cmpch,cylsjbreadloop;ch < cyls 跳到 readloop;ch 柱而,dh 磁头,ch 扇区 共加载 10 * 2 * 17 *512 = 18432

4、0 bytle;一般时候在一个软盘上0x002600放文件名字,0x004200以后放入文件正文;我们要做的是将磁盘上的东西加载0x8200以后,详情看下图1movjmpoxoffo,ch; ipl佩储俑傑循擊傑偵僭僅偿傑傲0xc200error:si,msgmovputloop:addsl,l;si + 1cmpal,0jefinmovah,oxoe;绘图参数movbx,15/intoxlo;绘图biosjmpputloopfin:hlt/jmpfin9msg:db0x0a, 0x0a;放置0x0a 0x0a(加载时候用的)db"load error"db0x0a/db0

5、resb0x7dfe-$;ox7dfe-当前($)全部放置0db0x55, oxaa;在7dff的地方放置0x55,0x33(系统检测这个数值判断为启动分区)磁盘0x4200 - ox2dooo(18okb)0x2600 0x4iff0 - ox25ff0 - 0x0200自动拷贝 映射正文开始绘图区2 asmhead.nas.nas(we will go to 32mode);haribote-os boot asm ;tab=4instrset ,i486pnvbemode equ 0x105;里麦楞傲庸儀增棗罢;1024 x 768 x 8bit 傷儔庸;0x100:640 x;0x10

6、1:640 x;0x103:800 x;0x105 : 1024 x400 x 8bit僅儔庸480 x 8bit僅儔庸600 x 8bit偿儔庸768 x 8bit傷儔馬;0x107 : 1280 x 1024 x 8bit 僅儔庸botpakequ0x00280000dskcacequ0x00100000応強dskcaco equ0x00008000応強聖儕傾檻傲cyls equoxoffo;leds equoxofflvmode equ0x0ff2;bootjnfo 嫔學;bootpack僭儘馬儒惰;債借傍債僉傻傷傅傑僭;債備傍債僉傻傷傅傑僭億馬個債債僞佩悵援僵僅;恢t良偵嫔倶僅恢曬丁墟

7、價傑倜僅儔馬億北scrnx equ0x0ff4scrny equ0x0ff6vram equ巒斛採0x0ff8;夕生險搏僭y;儆儔價僞僻債傩傑僧偉僭奥org 0xc200;程序从ipl跳过来;vbe模式支持movax,0x9000moveszaxmovdi,0movax,0x4f00i nt 0x10cmpax,0x004fjne scrn320 ;执行了 int 0x10 后,如果 ax 变成了 4f 那么有vbe模式显示;vbe版木判断movax,es:di+4cmpax,0x0200jbscrn320;讦(ax < 0x0200) goto scrn320 看ax(vbe的版本)是

8、否大于2.0版本;判定vbe能不能使用movcx,vbemodemovax,0x4f01int0x10cmpax,0x004fjnescrn320;上次取得的信息被存在es:di屮cmpbyte es:di+0xl9,8 ;颜色数必须为 8jnescrn320;cmpbyte es:di+0xlb,4 ;颜色制定方法必须为调色板jnescrn320movax,es:di+oxoo;模式属性第七位耍是为1andax,0x0080;jzscr n320:;模式,分辨率,映射区movbx,vbemode+0x4000movax,0x4f02int0x10movbyte vmode,8 ;模式,分辨率

9、,映射区movax,es:di+0xl2movscrnx,axmovax,es:di+0xl4movscrny,axmoveax,es:di+0x28movvram,eaxjmpkeystatusscr n320:movalz0xl3; vga320x200x8bit 彩色调色板模式movah,0x00int0x10movbyte vmode,8 ;movword scrnx,320movword scrny,200movdword vram,0x000a0000;获取键盘上led灯状态keystatus:movah,0x02int0x16; keyboard biosmovleds,al;p

10、ic佩増愁俗妞傷策傑偿厝俏晅俏側澳俗借偵僵俵;at命姊嫌俗幟條储储丄pic俗弓京娶境倒甚僥側倨丄;傍澳借偿cli愁偵倚価锲促傍側澳偲丄傑傑偵彳間備儆傾係優僵;pic僭弓京娶燼储傅偲循信僅;outw#define picojmr;out 将#define pic1jmr;若连续的执行out命令的话,可moval,oxff0x0021 置 1out0x21,aloxooal 置 1nop能无法正常运行cliout oxal,al;关屮断;为了让卬u访问1m以上的内存空间,开启a20gatecallwaitkbdoutmovalzoxdlout0x64,alcallwaitkbdoutmovalzo

11、xdf; enable a20out0x60,alcallwaitkbdout;侵儘僥價倘傲庸儼塑叽movax,1*8;将选择子全部变成(1*8)寻lgdtgdtro;加载全局描述符moveaxzcroandeax?0x7fffffff ;高位清 0oreaxz0x00000001 ;低位置 1 pg=o 不分页,pe=l 有保护机制,即开启保护模式movcro.eaxjmppipeli neflushpipeli neflush:址的时候去寻找第一个描述符movds,axmoves,axmovfsaxmovgs,axmovss,ax;bootpack俗揮憲movesi,bootpack ;将

12、 bootpack的代码移动到0x00280000movedi,botpak;movecx,512*1024acall memcpy;借澳循偵債僞傍債債馬僞傕柿梨僭埋扌可價揮憲;傑僦佬億馬倜債債僞億您movedi,dskcacmovesi,0x7c00 ;将启动区代码移动到0x00100000 (1m)movecx5 必callmemcpymovesldskcaco+512 ;将 0x8000 以后 1440kb 不要512字节(空的)拷贝到1m+512字节处movedi,dskcac+512 ;movecx,0movcl,byte cylsimulecx,512*18* ;?我觉得这段代码是

13、有问题的subecx,514; ipl僭場偵借幡僅培儕callmemcpy;asmhead循彳皇側彳省彳翁偽澳偕側澳傍偲健匸爽吻彳皇屢傢価傑俗循丄;傅偲倚bootpack偵擱涪彳差;ecx += 3;bootpack俗妣擬movebx,botpakmovecxjebx+16addecx,3shrecx,2; ecx /= 4;jzskip;揮憲倶僅備傷傕僭佩側澳movesijebx+20;揮憲施addesi,ebxmovedi,ebx+12;揮憲惰callmemcpyskip:movesp,ebx+12;傍僞彳舜僮荣娶拘jmpdword 2*8:0x0000001bwaitkbdout:ina

14、l?0x64andal,0x02jnzwaitkbdout; and彳咎寢堰佩0循側俏彳翁偽waitkbdout 債retmemcpy:moveax,esiaddesi,4movedi,eaxaddedi,4sub ecx,1jnz merrkpy;培傷嶼彳皇傑寢堰佩0循側偕彳翁偽memcpy 債ret;memcpy佬傾儒儀傍傷備儆優儕澧僞債傍偿扌葛傷去脩側僭脩偽 丄傍倜儕儒儆粗械循傕族借憊1001alignb 16gdt0:resb 8;焚檻潢僦潰僞dw 0xffffqx0000qx9200,0x00cf ;擊僅族惕 t曇擞債儆健 伽 32bitdw 0xffff/0x0000/0x9a28

15、,0x0047 ;幫山見t曇擞債儆健彳爾個 32bit 聖 bootpack 椀老dw 0gdtr0:dw 8*3-1 (大小)dd gdt0(地址)alignb 16bootpack:绘图区足 足 frvbemodei支曲否使用big的显不怏式lunivbfmoof:初始化piv拢贝内f “跳转txxmpack图2.启动过程如下1准备两个描述符,一个描述代码段一个描述数据段3124 23 22 21 20 1916 15 14 13 12 118 70基地址base 31. 21gd/b0avl段限长19. . 16pdplstype基地址base 23. 1643116 1500基地址ba

16、se address 15. 0段限长segment limit 15. 0avl系统软件可用位limit 段限长base段基地址p段存在b/d 默认大小(0-16位;1-32位段)s描述符癸型(0-系统;1-代码或数据)dpl-描述符特权级type 段类型g-颗粒度第一个 0xmf,0x()00<),0x9200,oxoocf0000000011001111100100100000 0000第二个 0xffft,0x0000,0x9a28,0x0047oooooooooooooooomi mi mi mi基地址:0x0000 oooo段的长度为:oxftfft * 4k = oxftf

17、f woo (粒度为1 ) 属性:s: 1代码段或数据段(若0表示系统)dpl: 0等级最高的区域p: 1这个段在内存中type:位0: 0未被访问 位1: 1可读 位2: 0不一致代码 位3: 0数据的代码00000100011110011010001010000000 0000 1111 1111 1111 1111 1111 1111基地址:0x0028 0000段的长度为:0x7ftff属性:s: 1代码段dpl: 0等级最高的区域p: 1这个段在内存中type:位0: 0未被访问 位1: 1可读 位2: 0不一致代码 位3: 0代码段的代码d/b: 1向上扩展,(如果是堆栈(0)向下)图32设置cro是否分页,是否进行内存保护页盼胡她it (page-directory base)保8? (reserved)3112 ii031°cr3贞错懊线性地址(page-fault lineal address!cr231()31 30保田(reserved)19 18 17 16 156 5 4 3 2 10cr1p保田aw保羽(i(r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论