1.操作系统如何从BIOS到MBR的

简介: 1.操作系统如何从BIOS到MBR的

1.操作系统如何从BIOS到MBR

1.1首先进入BIOS系统

BIOS系统保存在ROM可读存储器里面,在这里面并不会被掉电擦除。所有BIOS程序基本上不会改变。

这里产生3个问题:

1.BIOS是由谁加载的

2.BIOS被加载在哪里

3.BIOS的cs:ip是谁来更改的

BIOS程序保存在ROM里面,在开电的一瞬间CPU的CS:IP被强制初始化为0xF0000:0xFFF0。在实模式下被转化为0xFFFF0地址,在实模式下0xFFFFF是最大的寻址空间。在怎么小的空间里面保存不了BIOS的代码。所以这里存放的是转移指令 jmp far f000:e05b。BIOS代码真正的保存在0xfe05b处。

BIOS所做的工作是检测内存和显卡等外设信息。当检测通过的时候,并初始化硬件后,开始在内存中0x000~0x3FF处建立数据结构,中断向量表并填写中断例程。


1.2当BIOS程序使命完成之后调用MBR(主引导)程序

BIOS通过跳转指令转移jmp 0:0x7c00实现的。

为什么跳转到0x7c00处呢?为的是不能让MBR程序过早的被破坏或者覆盖其他程序。

被认为是MBR程序,必须末尾两个字是0x55和0xaa,这样BIOS才把相应段认为是MBR段。

;主引导程序 
;------------------------------------------------------------
SECTION MBR vstart=0x7c00         
   mov ax,cs      
   mov ds,ax
   mov es,ax
   mov ss,ax
   mov fs,ax
   mov sp,0x7c00
; 清屏 利用0x06号功能,上卷全部行,则可清屏。
; -----------------------------------------------------------
;INT 0x10   功能号:0x06     功能描述:上卷窗口
;------------------------------------------------------
;输入:
;AH 功能号= 0x06
;AL = 上卷的行数(如果为0,表示全部)
;BH = 上卷行属性
;(CL,CH) = 窗口左上角的(X,Y)位置
;(DL,DH) = 窗口右下角的(X,Y)位置
;无返回值:
   mov     ax, 0x600
   mov     bx, 0x700
   mov     cx, 0           ; 左上角: (0, 0)
   mov     dx, 0x184f    ; 右下角: (80,25),
         ; VGA文本模式中,一行只能容纳80个字符,共25行。
         ; 下标从0开始,所以0x18=24,0x4f=79
   int     0x10            ; int 0x10
;;;;;;;;;    下面这三行代码是获取光标位置    ;;;;;;;;;
;.get_cursor获取当前光标位置,在光标位置处打印字符.
   mov ah, 3    ; 输入: 3号子功能是获取光标位置,需要存入ah寄存器
   mov bh, 0    ; bh寄存器存储的是待获取光标的页号
   int 0x10   ; 输出: ch=光标开始行,cl=光标结束行
      ; dh=光标所在行号,dl=光标所在列号
;;;;;;;;;    获取光标位置结束    ;;;;;;;;;;;;;;;;
;;;;;;;;;     打印字符串    ;;;;;;;;;;;
   ;还是用10h中断,不过这次是调用13号子功能打印字符串
   mov ax, message 
   mov bp, ax   ; es:bp 为串首地址, es此时同cs一致,
      ; 开头时已经为sreg初始化
   ; 光标位置要用到dx寄存器中内容,cx中的光标位置可忽略
   mov cx, 5    ; cx 为串长度,不包括结束符0的字符个数
   mov ax, 0x1301 ; 子功能号13是显示字符及属性,要存入ah寄存器,
      ; al设置写字符方式 ah=01: 显示字符串,光标跟随移动
   mov bx, 0x2    ; bh存储要显示的页号,此处是第0页,
      ; bl中是字符属性, 属性黑底绿字(bl = 02h)
   int 0x10   ; 执行BIOS 0x10 号中断
;;;;;;;;;      打字字符串结束   ;;;;;;;;;;;;;;;
   jmp $    ; 使程序悬停在此
   message db "1 MBR"
   times 510-($-$$) db 0
   db 0x55,0xaa

这里贴上一个MBR主引导区的代码。

程序中的知识点:

1.SECTION MBR vstart=0x7c00

这里给编译器指明MBR开始的地址设置在0x7c00处,但是实际上程序的还是在本文件的开头处。这种写法只有提前规定了该段程序的地址,才可以进行声明。CPU就直接从这个地址处进行程序的执行。


2.INT 0x10或者INT 0x13

INT 0x10调用中断,在调用中断的时候,需要提前设置好寄存器的值,这样才能调用中断。


3. $ 和 $$

$表示当前行, $ $表示此section的虚拟起始地址。


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

$ - $$标识程序所占的大小。并且510减去这个大小,表示这个程序字节大小到510个字节还有多少个字节。剩下的用0进行填写。


寄存器赋值

寄存器的值只能通过通用寄存器AX,BX,CX,DX进行间接复制,不能直接用立即数进行赋值。


目录
相关文章
|
存储 小程序 Unix
《操作系统真象还原》——0.28 MBR、EBR、DBR和OBR各是什么
MBR和EBR是分区工具创建维护的,不属于操作系统管理的范围,因此操作系统不可以往里面写东西,注意这里所说的是“不可以”,其实操作系统是有能力读写任何地址的,只是如果这样做的话会破坏“系统控制权接力赛”所使用的数据,下次开机后就无法启动了。
3450 0
|
JavaScript 前端开发 Linux
《操作系统真象还原》——2.3 让MBR先飞一会儿
虽说主引导记录mbr是咱们能够掌控的第一个程序,但这并不是让我们为之激动的理由。我们平时所写的程序都要依赖于操作系统,而我们即将实现的这个程序是独立于操作系统的,能够直接在裸机上运行,这才是让我们激动的理由,对咱们来说这无疑是历史性的一刻。
2360 0
|
存储
《操作系统真象还原》——第2章 编写MBR主引导记录,让我们开始 掌权 2.1 计算机的启动过程
所以,都在内存中运行程序,操作系统和硬件设计都省事了,这可能也是为了方式的统一吧,否则总不能出现某种存储介质后,操作系统和硬件就要付出额外努力去支持。当然,具体原因只有硬件工程师才知道,咱们在此先打住,继续咱们的内容。
1505 0
|
17天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
31 0
|
19天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
1月前
|
Linux 数据安全/隐私保护 虚拟化
Linux技术基础(1)——操作系统的安装
本文是龙蜥操作系统(Anolis OS) 8.4 的安装指南,用户可以从[龙蜥社区下载页面](https://openanolis.cn/download)获取ISO镜像。安装方法包括物理机的光驱和USB闪存方式,以及虚拟机中的VMware Workstation Pro设置。安装过程涉及选择语言、配置安装目标、选择软件集合和内核,设置Root密码及创建新用户。安装完成后,可通过文本模式或图形化界面验证系统版本,如Anolis OS 8.4,标志着安装成功。
|
1月前
|
存储 缓存 算法
Linux--系统结构与操作系统
Linux--系统结构与操作系统
|
1月前
|
Linux 网络安全 数据安全/隐私保护
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
172 0
|
1月前
|
缓存 Linux Shell
Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)
Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)
52 1
|
1月前
|
安全 Linux 网络安全
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
94 0