linux-0.11分析:boot文件 bootsect.s 第一篇随笔
boot文件 bootsect.s 第一篇随笔
参考 [github这个博主的][ https://github.com/sunym1993/flash-linux0.11-talk ]
bootsect.s
开机后会主动把由硬件设置好的主动把第一磁盘扇区212字节的内容读取到内存中
1、boot文件
bootsect.s
-
第一段指令代码,只是把开机从磁盘读取的这段bootsect.s代码复制到了另一片区域,还设置了栈顶
mov ax,#BOOTSEG ;BOOTSEG = 0x07c0 mov ds,ax mov ax,#INITSEG ;INITSEG = 0x9000 mov es,ax mov cx,#256 sub si,si sub di,di rep movw ;rep movw字 就是 es:si = ds:di 然后si+1 di+1;这样循环执行256(cx)次,每次移动一个字 jmpi go,INITSEG ;INITSEG = 0x9000 go: mov ax,cs mov ds,ax mov es,ax mov ss,ax mov sp,#0xFF00 -
继续从磁盘加载setup.s这段代码的内容到内存中
load_setup: mov dx,#0x0000 ; 驱动器0,磁头0 mov cx,#0x0002 ; 从扇区2开始读,轨道0 mov bx,#0x0200 ; 地址=512,在INITSEG中 mov ax,#0x0200+SETUPLEN ; 服务2,需要读的扇区数量 SETUPLEN = 4 int 0x13 ; 阅读它 -
第三步就是把系统的内存读取到内存中,顺便在显屏上打印一下东西
ok_load_setup: ; 获取磁盘驱动器参数,特别是扇区/磁道的数量 ...... ; 打印msg1处的内容 mov ah,#0x03 ; 读取光标位置 xor bh,bh int 0x10 mov cx,#24 mov bx,#0x0007 ; 第0页,属性7(正常) mov bp,#msg1 mov ax,#0x1301 ; 写入字符串,移动光标 int 0x10 ; 好的,我们现在已经写了消息 ; 我们希望加载系统(0x10000) mov ax,#SYSSEG ; SYSSEG = 0x1000 mov es,ax ; segment of 0x010000 call read_it call kill_motor ....... -
bootsect.s主要做了哪些事情了?需要和Makefile和build.c配合完成
分类:
linux - 0.11
, 操作系统
标签:
linux-0.11
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了