先参阅 Bochs调试Linux内核 - 定位内核中的变量或数据结构_bcbobo21cn的专栏-CSDN博客​​​​​​

,运行到<bochs:1>,输入vbreak 0x0000:0x7c00,再输入c,执行到0x00007c00停住;

这个时候mov ax,0x7c0指令正好是linux启动程序bootsect.S的第一个有效指令,
(在bootsect.S中为 start:mov    ax,#BOOTSEG);
说明BIOS在执行到0x7c00的时候,把控制权转移到了linux启动程序了;

Linux 启动程序包括三个文件。他们分别是:
  Bootsect.S ,setup.S,head.s,他们都是由汇编写成的,这三个程序按一定的顺序执行各自不同的功能能来完成整个从引导到启动的整个过程;

  启动顺序是:BIOS--Bootsect.S--setup.S--head.s---main.c

  Bootsect.S代码是磁盘引导块程序。它的主要功能是:
  1)把自己移到内存绝对地址0x90000的开始处,并跳到那里执行,也就是地址0x9000:0x0000处;
  2)用13号BIOS中断来读磁盘的从第2个扇区开始的连续4个扇区内的内容,这部分内容就是setup程序模块,然后把这个内容放到bootsect紧接的后面。也就是地址0x90200.为什么是0x90200呢?后面要说道;
  3)把system模块读到内存0x10000地方。这个system模块大小必须小于0x90000-0x10000=0x80000 也就是512k字节;

然后反汇编从现在开始的10条指令;

到0x00007c11的几条指令是把ds:[offset]开始的内容复制0x0100个字到es:0000开始的内存空间内。也就是从0x7c00处复制256字到0x9000.这就把bootsect搬家到了0x9000:0000地方了。长度是256个字,也就是 0x0200个字节。这就是为什么bootsect的后面是0x90200;

需要复制0x0100个字,cx是计数寄存器,把0x0100放入来cx中;

sub si, si:sub是减法指令,自己减自己,就是把si清零来;然后把di清零;

es是附加段寄存器;复制的目标是0x9000;把0x9000放入ax, 再把ax的值放入es;立即数不能直接放入段寄存器,参阅使用emu8086学习汇编mov指令_bcbobo21cn的专栏-CSDN博客;​​​​​​

,然后是rep指令;rep指令功能如下,

rep指令常和串传送指令搭配使用
功能:根据cx的值,重复执行后面的指令

串传送指令的说明如下;

串传送指令1: movsb
功能:(以字节为单位传送)
  (1) ((es)×16 + (di)) = ((ds) ×16 + (si))
  (2) 如果DF = 0则:   (si) = (si) + 1
                              (di) = (di) + 1
       如果DF = 1则:    (si) = (si) - 1
                                         (di) = (di) - 1

串传送指令2:movsw
功能:(以字为单位传送)
  (1) ((es)×16 + (di)) = ((ds) ×16 + (si))
  (2) 如果DF = 0则:   (si) = (si) + 2
                         (di) = (di) + 2
     如果DF = 1则:   (si) = (si) - 2
                                         (di) = (di) - 2

rep的执行示意如下图,

这里重复执行了 movsw 来进行复制;

先学这么多;

Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S相关推荐

  1. Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行

    接此,​​​​​​Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S_bcbobo21cn的专栏-CSDN博客 看一下,0x00007c11 这里是重复执行串传送:而后一条 ...

  2. 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源

    实验要求: 使用gdb跟踪调试内核从start_kernel到init进程启动 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明" ...

  3. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  4. 通过gdb调试分析Linux内核的启动过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验流程 1.打开环境 执 ...

  5. linux内核分析作业3:跟踪分析Linux内核的启动过程

    内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...

  6. 实验三:跟踪分析Linux内核的启动过程

    Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核2 cd ~/LinuxKernel/3 wget https://www.kernel. ...

  7. 实验三 Linux的启动与关闭,实验三:跟踪分析Linux内核的启动过程

    Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核 2 cd ~/LinuxKernel/ 3 wget https://www.kerne ...

  8. 使用openocd调试Linux内核,openocd安装与调试

    环境: 硬件:PC机ARM仿真器v8.00已下载好bit流的Xinlinx SoC开发板(其上有arm cortex-a9核) 软件:Redhat Linux6(或虚拟机) + openocd 使用o ...

  9. openocd调试Linux内核,openocd安装与调试

    环境: 硬件:PC机ARM仿真器v8.00已下载好bit流的Xinlinx SoC开发板(其上有arm cortex-a9核) 软件:Redhat Linux6(或虚拟机)+ openocd 使用op ...

最新文章

  1. 宁波大红鹰学院计算机科学与技术,2019宁波大红鹰学院专业排名
  2. R语言系统自带及附属包开元可用数据集汇总
  3. 变分模态分解_Android小部件示例中的模态对话框(弹出)
  4. 一年的收益就是60% 熊市也能做到 股票花荣实战系统
  5. Eclipse - CDT使用GDB调试C++的问题-无源文件命名(No source file named)
  6. 织梦mysql安装教程视频教程_织梦DedeCMSV6系统安装步骤教程
  7. P6+架构技术揭秘:Redis+Nginx+Dubbo精选+面试题+架构师精选视频(送)
  8. foobar2000 配置
  9. oracle 关键字_oracle常见报错之无法验证 (约束) - 未找到父项关键字解决办法
  10. 2013年阿里巴巴实习生笔试题
  11. inno setup 卸载注册表_Inno Setup:如何自动卸载以前安装的版本?
  12. 第四章 ARMA模型的特性
  13. python调用nmap扫描局域网存活主机和端口
  14. Linux命令行运行多线程程序 和 QT集成IDE下运行多线程程序的问题。
  15. 搭建个人博客【搭建Hexo+Fluid博客并部署到GitHub/云服务器(阿里云/腾讯云)】
  16. Lua二进制chunk
  17. 2020研究生数学建模B题——汽油辛烷值优化——获奖论文思路分享
  18. Adobe Acrobat DC无需注册登陆版
  19. html图片左右转换,jquery实现图片左右切换的方法
  20. 【java】除法,除数后缀

热门文章

  1. 关于VC的dialog框PreTranslateMessage不响应现象及解决办法
  2. Leetcode 129. 求根到叶子节点数字之和 解题思路及C++实现
  3. Linux系统下安装phpmyadmin方法
  4. 线程池用过吗?ThreadPoolExecutor谈谈你的理解? —— 为什么用线程池?优势?|| 线程池如何使用?
  5. jQuery 属性操作——案例:购物车案例模块
  6. 从源码理解ReentrantLock
  7. CTFshow php特性 web150plus
  8. [YTU]_2918( Shape系列-4)
  9. 斯特芬森迭代法(Python)
  10. 爬取广州所有停车场数据(Python)(并行加速版本)