Boot Sector(引导扇区),一个正确的BootSector除了以0xAA55结束之外,还应该包含一段少于512B的执行码

源码分析
    org07c00h            ;告诉编译器程序加载到7c00处
    movax,cs
    movds,ax
    moves,ax
    callDispStr         ;调用显示字符串例程
    jmp$                ;无限循环
DispStr:
    mov ax,BootMessage
    mov bp,ax             ;es:bp =串地址
    mov cx,16             ;cx =串长度
    mov ax,01301h         ;ah=13,al=01h
    mov bx,000ch          ;页号为0(bh=0)黑底红字(bl=0ch,高亮)
    mov dl,0
    int10h               ;10h号中断
    ret
BootMessage: db "hello ,OS world!"
    times510-($-$$) db0   ;填充剩下的空间,使生成的二进制代码恰好为
                      ;512字节
    dw0xaa55             ;结束标记
   
nasm boot.asm -o boot.bin

硬件自检相关工作完成后,就会启动操作系统:以Windows XP为例,系统BIOS将启动盘的第一扇区(BootSector,引导扇区)读入到内存的0x7C00H处,并检查0x7DFE地址的内容是否等于0xAA55,如果匹配,跳转到0x7C00处执行MBR(MasterBoot Record,主引导记录),MBR接着从分区表(Partition Table)中找到第一个活动分区(ActivePartition ,一般是C盘分区),然后按照类似方式读取并执行这个活动分区的引导扇区(Partition BootSector),而引导扇区将负责读取并执行NTLDR(NT LoaDeR,windowsnt的加载程序),然后主动权就移交给了windows.(来源<使用开源软件-自己动手写操作系统>杨文博)

从Xp启动操作系统的过程中可以看出为什么要用org 0x7c00h;

反编译
ndisasm -o 0x7c00 boot.bin >>disboot.asm

00007C00 8CC8             mov ax,cs
00007C02 8ED8             mov ds,ax
00007C04 8EC0             mov es,ax
00007C06 E80200           call 0x7c0b
00007C09 EBFE             jmp short 0x7c09
00007C0B B81E7C           mov ax,0x7c1e
00007C0E 89C5             mov bp,ax
00007C10 B91000           mov cx,0x10
00007C13 B80113           mov ax,0x1301
00007C16 BB0C00           mov bx,0xc
00007C19 B200             mov dl,0x0
00007C1B CD10             int 0x10
00007C1D C3               ret
00007C1E 48               dec ax
00007C1F 656C             gs insb
00007C21 6C               insb
00007C22 6F               outsw
00007C23 2C20             sub al,0x20
00007C25 4F               dec di
00007C26 53               push bx
00007C27 20776F           and [bx+0x6f],dh
00007C2A 726C             jc 0x7c98
00007C2C 642100           and [fs:bx+si],ax
00007C2F 0000             add [bx+si],al
00007C31 0000             add [bx+si],al
00007C33 0000             add [bx+si],al
00007C35 0000             add [bx+si],al
00007C37 0000             add [bx+si],al
00007C39 0000             add [bx+si],al
00007C3B 0000             add [bx+si],al
00007C3D 0000             add [bx+si],al
00007C3F 0000             add [bx+si],al
00007C41 0000             add [bx+si],al
00007C43 0000             add [bx+si],al
00007C45 0000             add [bx+si],al
00007C47 0000             add [bx+si],al
00007C49 0000             add [bx+si],al
00007C4B 0000             add [bx+si],al
00007C4D 0000             add [bx+si],al
00007C4F 0000             add [bx+si],al
00007C51 0000             add [bx+si],al
00007C53 0000             add [bx+si],al
00007C55 0000             add [bx+si],al
00007C57 0000             add [bx+si],al
00007C59 0000             add [bx+si],al
00007C5B 0000             add [bx+si],al
00007C5D 0000             add [bx+si],al
00007C5F 0000             add [bx+si],al
00007C61 0000             add [bx+si],al
00007C63 0000             add [bx+si],al
00007C65 0000             add [bx+si],al
00007C67 0000             add [bx+si],al
00007C69 0000             add [bx+si],al
00007C6B 0000             add [bx+si],al
00007C6D 0000             add [bx+si],al
00007C6F 0000             add [bx+si],al
00007C71 0000             add [bx+si],al
00007C73 0000             add [bx+si],al
00007C75 0000             add [bx+si],al
00007C77 0000             add [bx+si],al
00007C79 0000             add [bx+si],al
00007C7B 0000             add [bx+si],al
00007C7D 0000             add [bx+si],al
00007C7F 0000             add [bx+si],al
00007C81 0000             add [bx+si],al
00007C83 0000             add [bx+si],al
00007C85 0000             add [bx+si],al
00007C87 0000             add [bx+si],al
00007C89 0000             add [bx+si],al
00007C8B 0000             add [bx+si],al
00007C8D 0000             add [bx+si],al
00007C8F 0000             add [bx+si],al
00007C91 0000             add [bx+si],al
00007C93 0000             add [bx+si],al
00007C95 0000             add [bx+si],al
00007C97 0000             add [bx+si],al
00007C99 0000             add [bx+si],al
00007C9B 0000             add [bx+si],al
00007C9D 0000             add [bx+si],al
00007C9F 0000             add [bx+si],al
00007CA1 0000             add [bx+si],al
00007CA3 0000             add [bx+si],al
00007CA5 0000             add [bx+si],al
00007CA7 0000             add [bx+si],al
00007CA9 0000             add [bx+si],al
00007CAB 0000             add [bx+si],al
00007CAD 0000             add [bx+si],al
00007CAF 0000             add [bx+si],al
00007CB1 0000             add [bx+si],al
00007CB3 0000             add [bx+si],al
00007CB5 0000             add [bx+si],al
00007CB7 0000             add [bx+si],al
00007CB9 0000             add [bx+si],al
00007CBB 0000             add [bx+si],al
00007CBD 0000             add [bx+si],al
00007CBF 0000             add [bx+si],al
00007CC1 0000             add [bx+si],al
00007CC3 0000             add [bx+si],al
00007CC5 0000             add [bx+si],al
00007CC7 0000             add [bx+si],al
00007CC9 0000             add [bx+si],al
00007CCB 0000             add [bx+si],al
00007CCD 0000             add [bx+si],al
00007CCF 0000             add [bx+si],al
00007CD1 0000             add [bx+si],al
00007CD3 0000             add [bx+si],al
00007CD5 0000             add [bx+si],al
00007CD7 0000             add [bx+si],al
00007CD9 0000             add [bx+si],al
00007CDB 0000             add [bx+si],al
00007CDD 0000             add [bx+si],al
00007CDF 0000             add [bx+si],al
00007CE1 0000             add [bx+si],al
00007CE3 0000             add [bx+si],al
00007CE5 0000             add [bx+si],al
00007CE7 0000             add [bx+si],al
00007CE9 0000             add [bx+si],al
00007CEB 0000             add [bx+si],al
00007CED 0000             add [bx+si],al
00007CEF 0000             add [bx+si],al
00007CF1 0000             add [bx+si],al
00007CF3 0000             add [bx+si],al
00007CF5 0000             add [bx+si],al
00007CF7 0000             add [bx+si],al
00007CF9 0000             add [bx+si],al
00007CFB 0000             add [bx+si],al
00007CFD 0000             add [bx+si],al
00007CFF 0000             add [bx+si],al
00007D01 0000             add [bx+si],al
00007D03 0000             add [bx+si],al
00007D05 0000             add [bx+si],al
00007D07 0000             add [bx+si],al
00007D09 0000             add [bx+si],al
00007D0B 0000             add [bx+si],al
00007D0D 0000             add [bx+si],al
00007D0F 0000             add [bx+si],al
00007D11 0000             add [bx+si],al
00007D13 0000             add [bx+si],al
00007D15 0000             add [bx+si],al
00007D17 0000             add [bx+si],al
00007D19 0000             add [bx+si],al
00007D1B 0000             add [bx+si],al
00007D1D 0000             add [bx+si],al
00007D1F 0000             add [bx+si],al
00007D21 0000             add [bx+si],al
00007D23 0000             add [bx+si],al
00007D25 0000             add [bx+si],al
00007D27 0000             add [bx+si],al
00007D29 0000             add [bx+si],al
00007D2B 0000             add [bx+si],al
00007D2D 0000             add [bx+si],al
00007D2F 0000             add [bx+si],al
00007D31 0000             add [bx+si],al
00007D33 0000             add [bx+si],al
00007D35 0000             add [bx+si],al
00007D37 0000             add [bx+si],al
00007D39 0000             add [bx+si],al
00007D3B 0000             add [bx+si],al
00007D3D 0000             add [bx+si],al
00007D3F 0000             add [bx+si],al
00007D41 0000             add [bx+si],al
00007D43 0000             add [bx+si],al
00007D45 0000             add [bx+si],al
00007D47 0000             add [bx+si],al
00007D49 0000             add [bx+si],al
00007D4B 0000             add [bx+si],al
00007D4D 0000             add [bx+si],al
00007D4F 0000             add [bx+si],al
00007D51 0000             add [bx+si],al
00007D53 0000             add [bx+si],al
00007D55 0000             add [bx+si],al
00007D57 0000             add [bx+si],al
00007D59 0000             add [bx+si],al
00007D5B 0000             add [bx+si],al
00007D5D 0000             add [bx+si],al
00007D5F 0000             add [bx+si],al
00007D61 0000             add [bx+si],al
00007D63 0000             add [bx+si],al
00007D65 0000             add [bx+si],al
00007D67 0000             add [bx+si],al
00007D69 0000             add [bx+si],al
00007D6B 0000             add [bx+si],al
00007D6D 0000             add [bx+si],al
00007D6F 0000             add [bx+si],al
00007D71 0000             add [bx+si],al
00007D73 0000             add [bx+si],al
00007D75 0000             add [bx+si],al
00007D77 0000             add [bx+si],al
00007D79 0000             add [bx+si],al
00007D7B 0000             add [bx+si],al
00007D7D 0000             add [bx+si],al
00007D7F 0000             add [bx+si],al
00007D81 0000             add [bx+si],al
00007D83 0000             add [bx+si],al
00007D85 0000             add [bx+si],al
00007D87 0000             add [bx+si],al
00007D89 0000             add [bx+si],al
00007D8B 0000             add [bx+si],al
00007D8D 0000             add [bx+si],al
00007D8F 0000             add [bx+si],al
00007D91 0000             add [bx+si],al
00007D93 0000             add [bx+si],al
00007D95 0000             add [bx+si],al
00007D97 0000             add [bx+si],al
00007D99 0000             add [bx+si],al
00007D9B 0000             add [bx+si],al
00007D9D 0000             add [bx+si],al
00007D9F 0000             add [bx+si],al
00007DA1 0000             add [bx+si],al
00007DA3 0000             add [bx+si],al
00007DA5 0000             add [bx+si],al
00007DA7 0000             add [bx+si],al
00007DA9 0000             add [bx+si],al
00007DAB 0000             add [bx+si],al
00007DAD 0000             add [bx+si],al
00007DAF 0000             add [bx+si],al
00007DB1 0000             add [bx+si],al
00007DB3 0000             add [bx+si],al
00007DB5 0000             add [bx+si],al
00007DB7 0000             add [bx+si],al
00007DB9 0000             add [bx+si],al
00007DBB 0000             add [bx+si],al
00007DBD 0000             add [bx+si],al
00007DBF 0000             add [bx+si],al
00007DC1 0000             add [bx+si],al
00007DC3 0000             add [bx+si],al
00007DC5 0000             add [bx+si],al
00007DC7 0000             add [bx+si],al
00007DC9 0000             add [bx+si],al
00007DCB 0000             add [bx+si],al
00007DCD 0000             add [bx+si],al
00007DCF 0000             add [bx+si],al
00007DD1 0000             add [bx+si],al
00007DD3 0000             add [bx+si],al
00007DD5 0000             add [bx+si],al
00007DD7 0000             add [bx+si],al
00007DD9 0000             add [bx+si],al
00007DDB 0000             add [bx+si],al
00007DDD 0000             add [bx+si],al
00007DDF 0000             add [bx+si],al
00007DE1 0000             add [bx+si],al
00007DE3 0000             add [bx+si],al
00007DE5 0000             add [bx+si],al
00007DE7 0000             add [bx+si],al
00007DE9 0000             add [bx+si],al
00007DEB 0000             add [bx+si],al
00007DED 0000             add [bx+si],al
00007DEF 0000             add [bx+si],al
00007DF1 0000             add [bx+si],al
00007DF3 0000             add [bx+si],al
00007DF5 0000             add [bx+si],al
00007DF7 0000             add [bx+si],al
00007DF9 0000             add [bx+si],al
00007DFB 0000             add [bx+si],al
00007DFD 0055AA           add [di-0x56],dl

下面代码是一个综合,注意使用宏。ps,宏这个东西还是需要自己来控制的,别认为编译器给你自动处理了

;�fine_BOOT_DEBUG_       ;做bootsector时一定将此行注释掉!
                      ;将此行打开后使用nasm boot.asm -o boot.com
                     ;做成一个.com文件易于调试
%ifdef _BOOT_DEBUG_
    org0100h            ;调试状态,做成.com文件,可调试
%else
    org07c00h            ;告诉编译器程序加载到7c00处,boot 状态,bios将把boot sector 加载到0:7c00处执行
%endif
    movax,cs
    movds,ax
    moves,ax
    callDispStr         ;调用显示字符串例程
    jmp$                ;无限循环
DispStr:
    mov ax,BootMessage
    mov bp,ax             ;es:bp =串地址
    mov cx,16             ;cx =串长度
    mov ax,01301h         ;ah=13,al=01h
    mov bx,000ch          ;页号为0(bh=0)黑底红字(bl=0ch,高亮)
    mov dl,0
    int10h               ;10h号中断
    ret
BootMessage: db "hello ,OS world!"
    times510-($-$$) db0   ;填充剩下的空间,使生成的二进制代码恰好为
                      ;512字节
    dw0xaa55            ;结束标记

为什么一定要加载到0x7c00处执行呢?在大灰狼汇编语言视频中有讲解:

当按下电脑电源开关,计算机的启动步骤:

1.开关按下,发信号给bios

2.bios获得信号后,启动自检程序,检查周边设备是否通电完毕。

3.自检完毕后将控制权还给bios,bios读取引导启动器中的启动程序(引导启动器可以是光盘,软盘或者usb,设置是网络启动,装过系统的都应该有深入的理解)

系统的内存安排:

在系统加电最初的1M内存是bios为我们准备好的,他的分布情况为:

this picture is quite precise to show thearrangement of this 1M memory,look at the forth floor,you will seeboot loader zone ,and the size is very 512B,that fit ourconclusion.that answers our question,what is the location of bootloader and why the size of it is 512B(1FF==512),that is just doneby bios.

*************************************************************************************************

org 07c00h ;org指令明确告诉编译器程序的段地址是7c00而不是0000
           ;int汇编指令+呼叫的bios中断编号 int 10h
           ;10h的中断提供很多子程序,通过读取ah寄存器的值来决定条用哪个子程序
          ;ah=13显示字符串
mov ax,cs
mov es,ax//我一直用bochs查看cs的内容和地址,但是目前bochs用的很不熟,还没有看到
movax,msgstr ;msgstr偏移地址给bp,es:bp指向的内容就是我们要显示的字符串地址
mov bp,ax
mov cx,12 ;串长度
mov dh,12 ;起始行号
mov dl,36 ;起始列号
mov bx,000ch ;bh显示页号,bl是显示的字符的属性,这里为黑底红字,高亮,具体属性查看王爽汇编语言
mov al,1 ;显示的串结构,光标跟随移动
mov ah,13h ;明确为13h子程序
int 10h
msgstr: db "hello,os"

times (510-($-$$)) db 0

;$表示当前程序的偏移地址
                       ;$$表示程序开始的地址,
                       ;重复n次,每次填充1byte的0
dw 0xaa55

org 07c00h的原因相关推荐

  1. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

    最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...

  2. java.lang.NullPointerException异常原因及解决

    java.lang.NullPointerException异常原因是因为创建了一个引用类型的变量却没有指向任何对象而又去通过这个引用类型变量加点的形式去访问非静态的方法及属性. 给出三种情况, 第一 ...

  3. SQL性能下降原因及Join查询

    原因 查询语句写得烂 索引失效 关联查询过多(设计缺陷) 服务器调优及各个参数设置(缓冲.线程数等) Join查询的SQL执行顺序 手写 SELECT <select_list> FROM ...

  4. 从C到C++过渡的3个原因

    从C到C++过渡的3个原因 3 reasons to transition from C to C++ 几十年来,嵌入式软件工程师们一直在争论他们是否应该使用C或C++.根据2019年嵌入式市场调查, ...

  5. 使用hibernate与mysql时数据不能插入的原因及解决办法

    1.背景 之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照<Myeclipse Hibernate 快速入门 中文版>(CSDN,百度文库 ...

  6. golang log4go 使用说明及丢失日志原因

    1. 描述 这个 repository 是从 alecthomas 的 log4go 重构而来的,log4go 是一个类似于用于 Java 编程语言的 log4j 的日志包.源于 Google 的一项 ...

  7. javascript小数相减会出现一长串的小数位数的原因

    javascript小数相减会出现一长串的小数位数的原因 <script> var a='38.8'; var b='6.8'; alert(parseFloat(a)-parseFloa ...

  8. 3dmax2020安装失败原因及解决方法_电伴热带安装维护,线路断路器跳闸的原因及解决方法...

    在冬季管道里面的介质由于受到低温的影响会出现冻凝的现象,特别是液体介质,所以需要保温,而电伴热带就用于管道.容器等设备寒冷季节保温的产品.但是系统在使用过程中难免会出现问题,所以要对电伴热带安装维护, ...

  9. 人物关系 人脸识别_原因解密:格里兹曼宣布终止与华为合作,不只是因为人脸识别系统...

    恐怕不少球迷在看到这篇文章之前,依旧不知道格里兹曼突然间宣布终止了与华为方面的代言合作,并且这突然违约的行为背后是什么原因也让人不得而知.真的是因为华为方面研发了一款特殊的人脸识别系统,还是受到舆论的 ...

最新文章

  1. [性能] SAP销售订单取数逻辑优化---索引表
  2. 服务器被一堆系统登录_WIN10做天高服务器客户端登录出现“操作系统原因无法登录”...
  3. docker Harbor2.3.4 https 搭建镜像仓库
  4. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
  5. Codeforces Gym 100286I iSharp 模拟
  6. MediaCodec解码aac
  7. 社区论坛小程序源码,功能齐全,简洁漂亮,前端+后端
  8. 易语言dd驱动模拟按键模块_DD驱动 虚拟键盘 虚拟鼠标
  9. 小郡肝火锅点餐系统代码实现(部分)
  10. c语言解除键盘锁定,笔记本键盘怎么解除锁定
  11. android将图片转成字符串,再将字符串转成图片
  12. 如何解决刷新一瞬间 出现样式未加载完 或者 出现VUE代码问题
  13. MongoDB勒索事件中,DBA们到底该学到什么?
  14. lambda表达式:
  15. koa2.x--art-template
  16. 关于博客搬家至博客园的通知
  17. 计算机架构:漫游CPU的奥秘世界
  18. fNIRS用于评估自然/社会情况下人类行为中的脑功能
  19. Excel快速删除重复值注意不保留唯一值的操作!
  20. java 对象和实例有什么区别_对象和实例之间的区别

热门文章

  1. 【五线谱】音高表示 ( 低音谱号 | C1 36 音符音高表示 | C2 48 音符音高表示 | C3 60 音符音高表示 )
  2. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 完整流程演示 | 查找临时内存地址 | 查找真实指针地址 )
  3. 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
  4. 【FluidSynth】SoundFont 音源文件资料收集 ( SoundFont 规范 | SoundFont 音源下载 | SoundFont 编辑器 | 博客资源 )
  5. 【C 语言】文件操作 ( 写文本文件 | Qt 创建 C 语言命令行项目 )
  6. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )
  7. 【Android 异步操作】线程池 ( Worker 简介 | 线程池中的工作流程 runWorker | 从线程池任务队列中获取任务 getTask )
  8. 【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 )
  9. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
  10. Linux系统的基本命令