




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
纸娃娃操作系统汇总分析(16days)1. ipl.nas(initial Program Loader); haribote-iplCYLS EQU10 ORG0x7c00 JMPentryDB0x90DBHARIBOTEDW512 DB1 DW1 DB2 DW224 DW2880 ;DB0xf0 ; DW9 DW18 DW2 DD0 DD2880 DB0,0,0x29DD0xffffffffDBHARIBOTEOS DBFAT12 RESB18 这个程序都是为了x86架构会在bios启动后加载第一个扇区,故此这个512字节需要放置特殊的字符,entry:MOVAX,0 MOVSS,AXMOVSP,0x7c00MOVDS,AXMOVAX,0x0820MOVES,AXMOVCH,0 ; 柱面0MOVDH,0 ; 磁头0MOVCL,2 ; 扇区2readloop:MOVSI,0 ; 记录失败次数retry:MOVAH,0x02 ; AH=0x02 : 读入磁盘MOVAL,1 ; 1个扇区MOVBX,0MOVDL,0x00 ; A驱动器INT0x13 ; 调用磁盘BIOSJNCnext ; 没出错到nextADDSI,1 ; SI+1CMPSI,5 ; SI与5比较JAEerror ; SI = 5 跳到errorMOVAH,0x00MOVDL,0x00 ; A驱动器INT0x13 ; 重置驱动器JMPretrynext:MOVAX,ES ; 把内存地址后移0x20ADDAX,0x0020MOVES,AX ; 以为没有ADD ES,0x020指令,所以在这里绕个弯子 ADDCL,1 ; CL+1CMPCL,18 ; CL于18比较JBEreadloop; CL = 18 跳到readloopMOVCL,1ADDDH,1CMPDH,2JBreadloop; DH 2 跳到readloopMOVDH,0ADDCH,1CMPCH,CYLSJBreadloop; CH CYLS 跳到readloop;CH柱面,DH磁头,CH扇区 共加载 10 * 2 * 17 *512 = 184320 BYTLE;一般时候在一个软盘上0x002600放文件名字,0x004200以后放入文件正文;我们要做的是将磁盘上的东西加载0x8200以后,详情看下图1MOV0x0ff0,CH; IPL偑偳偙傑偱撉傫偩偺偐傪儊儌JMP0xc200error:MOVSI,msgputloop:MOVAL,SIADDSI,1 ; SI + 1CMPAL,0JEfinMOVAH,0x0e ; 绘图参数MOVBX,15 ; INT0x10 ; 绘图biosJMPputloopfin:HLT ; JMPfin ; msg:DB0x0a, 0x0a; 放置0x0a 0x0a(加载时候用的)DBload errorDB0x0a ; DB0RESB0x7dfe-$; 0x7dfe 当前($)全部放置0 DB0x55, 0xaa ; 在7dff的地方放置0x55,0xaa(系统检测这个数值判断为启动分区)-绘图区-绘图区-2. asmhead.nas.nas(we will go to 32MODE); haribote-os boot asm; TAB=4INSTRSET i486pVBEMODEEQU0x105; 1024 x 768 x 8bit僇儔乕; 乮夋柺儌乕僪堦棗乯;0x100 : 640 x 400 x 8bit僇儔乕;0x101 : 640 x 480 x 8bit僇儔乕;0x103 : 800 x 600 x 8bit僇儔乕;0x105 : 1024 x 768 x 8bit僇儔乕;0x107 : 1280 x 1024 x 8bit僇儔乕BOTPAKEQU0x00280000; bootpack偺儘乕僪愭DSKCACEQU0x00100000; 僨傿僗僋僉儍僢僔儏偺応強DSKCAC0EQU0x00008000; 僨傿僗僋僉儍僢僔儏偺応強乮儕傾儖儌乕僪乯; BOOT_INFO娭學CYLSEQU0x0ff0; 僽乕僩僙僋僞偑愝掕偡傞LEDSEQU0x0ff1VMODEEQU0x0ff2; 怓悢偵娭偡傞忣曬丅壗價僢僩僇儔乕偐丠SCRNXEQU0x0ff4; 夝憸搙偺XSCRNYEQU0x0ff6; 夝憸搙偺YVRAMEQU0x0ff8; 僌儔僼傿僢僋僶僢僼傽偺奐巒斣抧ORG0xc200; 程序从ipl跳过来; VBE模式支持MOVAX,0x9000MOVES,AXMOVDI,0MOVAX,0x4f00INT0x10CMPAX,0x004fJNEscrn320 ;执行了int 0x10 后,如果Ax变成了4f那么有vbe模式显示; VBE版本判断MOVAX,ES:DI+4CMPAX,0x0200JBscrn320; if (AX 0x0200) goto scrn320 看Ax(vbe的版本)是否大于2.0版本; 判定VBE能不能使用MOVCX,VBEMODEMOVAX,0x4f01INT0x10CMPAX,0x004fJNEscrn320; 上次取得的信息被存在ES:DI中CMPBYTE ES:DI+0x19,8 ;颜色数必须为8JNEscrn320 ;CMPBYTE ES:DI+0x1b,4 ;颜色制定方法必须为调色板JNEscrn320MOVAX,ES:DI+0x00 ; 模式属性第七位要是为1ANDAX,0x0080 ;JZscrn320; ; 模式,分辨率,映射区MOVBX,VBEMODE+0x4000MOVAX,0x4f02INT0x10MOVBYTE VMODE,8; 模式,分辨率,映射区MOVAX,ES:DI+0x12MOVSCRNX,AXMOVAX,ES:DI+0x14MOVSCRNY,AXMOVEAX,ES:DI+0x28MOVVRAM,EAXJMPkeystatusscrn320:MOVAL,0x13; VGA320x200x8bit彩色调色板模式MOVAH,0x00INT0x10MOVBYTE VMODE,8; MOVWORD SCRNX,320MOVWORD SCRNY,200MOVDWORD VRAM,0x000a0000; 获取键盘上LED灯状态keystatus:MOVAH,0x02INT0x16 ; keyboard BIOSMOVLEDS,AL; PIC偑堦愗偺妱傝崬傒傪庴偗晅偗側偄傛偆偵偡傞;AT屳姺婡偺巇條偱偼丄PIC偺弶婜壔傪偡傞側傜丄;偙偄偮傪CLI慜偵傗偭偰偍偐側偄偲丄偨傑偵僴儞僌傾僢僾偡傞;PIC偺弶婜壔偼偁偲偱傗傞MOVAL,0xff ; OUT将#define PIC0_IMR0x0021 置1OUT0x21,AL; OUT将#define PIC1_IMR0x00a1 置1NOP; 若连续的执行out命令的话,可能无法正常运行OUT0xa1,ALCLI; 关中断;为了让cpu访问1M以上的内存空间,开启A20GateCALLwaitkbdoutMOVAL,0xd1OUT0x64,ALCALLwaitkbdoutMOVAL,0xdf; enable A20OUT0x60,ALCALLwaitkbdout; 僾儘僥僋僩儌乕僪堏峴LGDTGDTR0; 加载全局描述符MOVEAX,CR0ANDEAX,0x7fffffff; 高位清0OREAX,0x00000001; 低位置1 pg=0 不分页,pe=1 有保护机制,即开启保护模式MOVCR0,EAXJMPpipelineflushpipelineflush:MOVAX,1*8; 将选择子全部变成(1*8) 寻址的时候去寻找第一个描述符MOVDS,AXMOVES,AXMOVFS,AXMOVGS,AXMOVSS,AX; bootpack偺揮憲MOVESI,bootpack; 将bootpack的代码移动到0x00280000MOVEDI,BOTPAK; MOVECX,512*1024/4CALLmemcpy; 偮偄偱偵僨傿僗僋僨乕僞傕杮棃偺埵抲傊揮憲; 傑偢偼僽乕僩僙僋僞偐傜MOVESI,0x7c00; 将启动区代码移动到0x00100000(1M)MOVEDI,DSKCAC; MOVECX,512/4CALLmemcpy; 巆傝慡晹MOVESI,DSKCAC0+512; 将0x8000 以后1440kB不要512字节(空的)拷贝到1M+512字节处MOVEDI,DSKCAC+512; MOVECX,0MOVCL,BYTE CYLSIMULECX,512*18*2/4; ?我觉得这段代码是有问题的 SUBECX,512/4; IPL偺暘偩偗嵎偟堷偔CALLmemcpy; asmhead偱偟側偗傟偽偄偗側偄偙偲偼慡晹偟廔傢偭偨偺偱丄;偁偲偼bootpack偵擟偣傞; bootpack偺婲摦MOVEBX,BOTPAKMOVECX,EBX+16ADDECX,3; ECX += 3;SHRECX,2; ECX /= 4;JZskip; 揮憲偡傞傋偒傕偺偑側偄MOVESI,EBX+20; 揮憲尦ADDESI,EBXMOVEDI,EBX+12; 揮憲愭CALLmemcpyskip:MOVESP,EBX+12; 僗僞僢僋弶婜抣JMPDWORD 2*8:0x0000001bwaitkbdout:IN AL,0x64AND AL,0x02JNZwaitkbdout; AND偺寢壥偑0偱側偗傟偽waitkbdout傊RETmemcpy:MOVEAX,ESIADDESI,4MOVEDI,EAXADDEDI,4SUBECX,1JNZmemcpy; 堷偒嶼偟偨寢壥偑0偱側偗傟偽memcpy傊RET; memcpy偼傾僪儗僗僒僀僘僾儕僼傿僋僗傪擖傟朰傟側偗傟偽丄僗僩儕儞僌柦椷偱傕彂偗傞1001ALIGNB16GDT0:RESB8; 僰儖僙儗僋僞DW0xffff,0x0000,0x9200,0x00cf; 撉傒彂偒壜擻僙僌儊儞僩32bitDW0xffff,0x0000,0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抗菌药物的临床应用试题及答案2025年版
- 临床病历书写考试题及答案2025年版
- 2025年文化旅游节庆活动旅游节庆活动与旅游养老产业融合创新可行性分析
- 2025年特色小镇文化旅游IP运营项目生态旅游可持续发展可行性研究
- 门头税务知识培训课件
- 门卫知识培训
- 2025年电子产品配送的合同范本
- 镜片专业知识培训课件
- 2025年简单初中音乐试卷及答案
- 锻压相关知识培训总结课件
- 睾丸常见肿瘤超声诊断要点
- 重症医学科肺康复综合体系建设
- 数字劳工的集体行动:“罢工”现象解析
- 癫痫学生免责协议书
- 班级管理情境案例分享
- 陶艺知识课件大全初中版
- 动物疫情监测与预警的数据分析与利用
- 格拉斯哥昏迷评分法详解(GCS)
- 针灸科面瘫护理个案汇报
- 停车场管理制度-停车场管理制度
- 小学昆虫知识科普单选题100道及答案
评论
0/150
提交评论