boot文件 bootsect.s 第一篇随笔

参考 [github这个博主的][ https://github.com/sunym1993/flash-linux0.11-talk ]

bootsect.s

开机后会主动把由硬件设置好的主动把第一磁盘扇区212字节的内容读取到内存中

1、boot文件

bootsect.s

  1. 第一段指令代码,只是把开机从磁盘读取的这段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

  2. 继续从磁盘加载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 ; 阅读它
  3. 第三步就是把系统的内存读取到内存中,顺便在显屏上打印一下东西

    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
    .......

  4. bootsect.s主要做了哪些事情了?需要和Makefile和build.c配合完成

linux-0.11分析:boot文件 bootsect.s 第一篇随笔的更多相关文章

  1. linux-0.11分析:boot文件 setup.s 第二篇随笔

    boot文件 setup.s 第二篇随笔 参考 [github这个博主的][ https://github.com/sunym1993/flash-linux0.11-talk ] 中断获取光标的位置 ...

  2. 【从头到脚品读 Linux 0.11 源码】第一回 最开始的两行代码

    从这一篇开始,您就将跟着我一起进入这操作系统的梦幻之旅! 别担心,每一章的内容会非常的少,而且你也不要抱着很大的负担去学习,只需要像读小说一样,跟着我一章一章读下去就好. 话不多说,直奔主题.当你按下 ...

  3. Linux 0.11下信号量的实现和应用

    Linux 011下信号量的实现和应用 生产者-消费者问题 实现信号量 信号量的代码实现 关于sem_wait和sem_post sem_wait和sem_post函数的代码实现 信号量的完整代码 实 ...

  4. Linux 0.11中write实现

    看了一下Linux 0.11版本号write的实现,首先它在标准头文件unistd.h中有定义 int write(int fildes, const char * buf, off_t count) ...

  5. Linux 0.11源码阅读笔记-总结

    总结 Linux 0.11主要包含文件管理和进程管理两个部分.进程管理包括内存管理.进程管理.进程间通信模块.文件管理包含磁盘文件系统,打开文件内存数据.磁盘文件系统包括空闲磁盘块管理,文件数据块的管 ...

  6. Linux 0.11源码阅读笔记-文件管理

    Linux 0.11源码阅读笔记-文件管理 文件系统 生磁盘 未安装文件系统的磁盘称之为生磁盘,生磁盘也可以作为文件读写,linux中一切皆文件. 磁盘分区 生磁盘可以被分区,分区中可以安装文件系统, ...

  7. Linux 0.11源码阅读笔记-中断过程

    Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产 ...

  8. Linux 0.11源码阅读笔记-总览

    Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...

  9. Linux内核:分析coredump文件 - 内核代码崩溃

    转自:http://blog.csdn.net/guowenyan001/article/details/12975221 一.分析Core文件 1.1 找到core文件目录,启动mycrash:my ...

随机推荐

  1. Object类和对象类型转换

    学习内容:Object类和对象类型转换 一.Object类 1.Object类是所有类的父类,是Java类层中最高层的类. 2.getClass()方法:返回对象执行时的Class实例,然后用此实例调 ...

  2. 安装Samba到CentOS(YUM)

    运行环境 系统版本:CentOS Linux release 7.3.1611 软件版本:Samba-4.6.2 硬件要求:无 安装过程 1.基础网络配置 配置一个静态IP,关闭防火墙.SeLinux ...

  3. 一次生产环境的docker MySQL故障

    问题 昨天下午本来要去吃下午茶,然后前端小伙伴突然说接口怎么崩了,我登上sentry一看,报错了 (2005, "Unknown MySQL server host 'mysql' (-3) ...

  4. 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)

    问题描述 在上一篇博文 "[Azure 应用服务]NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤"中, ...

  5. JZOJ 5409 Fantasy & NOI 2010 超级钢琴 题解

    其实早在 2020-12-26 的比赛我们就做过 5409. Fantasy 这可是紫题啊 题目大意 给你一个序列,求长度在 \([L,R]\) 区间内的 \(k\) 个连续子序列的最大和 题解 如此 ...

  6. 快速选择 第k个数

    快速选择 第k个数 题目描述 给定一个序列,求第k小的数 算法思想 利用快速排序思想,算法复杂度能达到O(n)步骤如下: 1.找到排序分界点x,这里选择区间最左值 2.排序,让左边的值都小于x,右边都 ...

  7. Eclipse For Java开发环境部署

    Eclipse For Java开发环境部署 1.准备工作 jdk安装包 jdk官网下载 Eclipse安装包 Eclipse官网下载 Eclipse下载时选择图中所示的国内镜像地址下载 下载后的文件 ...

  8. SAP 文本框多行输入

    REPORT zjw_test01. CONSTANTS: gc_text_line_length TYPE i VALUE 72. TYPES: text_table_type(gc_text_li ...

  9. 分布式机器学习:同步并行SGD算法的实现与复杂度分析(PySpark)

    1 分布式机器学习概述 大规模机器学习训练常面临计算量大.训练数据大(单机存不下).模型规模大的问题,对此分布式机器学习是一个很好的解决方案. 1)对于计算量大的问题,分布式多机并行运算可以基本解决. ...

  10. RPA SAP财务内部对账机器人

    [简介] 本机器人用于使用SAP软件的集团公司间往来对账前台登录SAP账户和密码,需退出PC微信,输入法切换为英文半角状态. [详细流程] 1.清空Excel-VBA管理工具原始数据 2.输入对账时间 ...