linux-0.11分析:boot文件 bootsect.s 第一篇随笔
2024-10-20 22:21:38
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配合完成
最新文章
- 创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)
- Phalapi 中Union和Union All的用法
- AC日记——向量点积计算 openjudge 1.6 09
- windows下安装git &; 在git@OSC上推送代码
- [转]java web简单权限管理设计
- static cross compile gtk-2.16.6+gtk-directfb+arm-linux (arm-linux-gcc-3.4.4+glib-2.3.5)
- lua 模块功能
- MIFARE系列2《非接触卡标准》
- linux make clean
- jni.h源码
- 如何用angularjs制作一个完整的表格之二__表格分页功能
- python文件处理
- 新注册第一帖----------------------乱码新手自学.net 之Linq 入门篇
- 《分布式Java应用之基础与实践》读书笔记四
- dedecms环境优化
- SpringBoot 数据篇之使用JDBC
- 使用Keras搭建cnn+rnn, BRNN,DRNN等模型
- Day 5-3 多态与多态性
- NOIP2017题解
- CF1139B Chocolates