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配合完成