技术实验:系统启动过程
来源:互联网 发布:淘宝买的机票怎么取 编辑:程序博客网 时间:2024/06/06 03:33
使用的软件与环境:
1、Intel CPU
2、Windows XP
3、NSAM-2.09RC1
4、VMWare 6.5
启动过程概述:
电脑启动时首先运行的是 BIOS 中的固化代码,比如:上电自检等。如果这部分代码没有问题,BIOS 就会按照去寻找启动设备(软盘、硬盘、光驱等),设备的寻找顺序是由用户在 BIOS 中定义的。这块有个小问题,如何判断一个设备是启动设备?在安装系统时,我们将系统盘放入光驱,可以进行引导,但不是每张光盘都可以引导系统。BIOS 判断一个设备是否具有引导功能的依据是:设备的第 1 Sector 的最后两个字节是 0xAA55;如果满足上述条件 BIOS 就会将第一个 Sector 内的数据(512K)加载到内存的 0x7C00,然后从这个位置开始执行。注意:这是还是在 16 位的实模式下。
电脑上电后控制权的转移顺序为:BIOS –>0x7C00 处代码。
上面描述的 BIOS 定义的一种机制,我没有去寻找具体的原因,感兴趣的同学可以 Google 下原因。
Hello Word:
在了解了上述过程后我们来写一段小的汇编程序(floppy.asm):
[BITS 16];指定位模式[ORG 0x7C00];指定加载的起始地址;定义一个字符串MsgString db 'Hello World!', 13, 10, 0;无条件跳转JMP _start_start:;将 AX 清零XOR AX, AX;将 DS 清零,下面要用到 SI,SI 寻址的基址为 DSMOV DS, AX;将字符串的起始地址加载到 SI 中便于后面循环输出MOV SI, MsgStringCALL next_characterJMP $;调用 BIOS 中断进行字符输出,中断就相当于 Windows 的 API,参数放在寄存器中,关于中断调用的具体信息可以查阅相关文档,BIOS 中断号:0x10PrintCharacter:MOV AH, 0x0EMOV BH, 0x00MOV BL, 0x07INT 0x10RETPrintString:next_character:;SI 类似于 C 中的指针,[SI] 类似于 *SIMOV AL, [SI]INC SI;或运算,影响 0 标志位,或运算的结果为假的条件是:两个操作数都为 0,此处是为了判断是否到了字符串结尾OR AL, ALJZ exit_functionCALL PrintCharacterJMP next_characterexit_function:RET;填充其它空间,$ 代表当前位置的偏移量 $$代表程序起始位置的偏移量,510 + 0xAA + 0x55 = 512TIMES 510 - ($ - $$) db 0DW 0xAA55
然后用 NASM 编译上述程序:
nasm floppy.asm -f bin -o floppy.img
PS:
为了便于 NASM 的使用我是这样设置的:
创建一个启动 NASM 的批处理文件:
d:cd D:/nasm-2.09rc1PATH=PATH;D:/nasm-2.09rc1cls
然后仿照 VS 命令行的启动方式启动它:创建一个快捷方式,目标为:C:/WINDOWS/system32/cmd.exe /E:ON /K D:/nasm-2.09rc1/setup.bat,起始位置为:D:/nasm-2.09rc1
在 VMWare 中使用程序:
创建一个 DOS 虚拟机:
1、开始新建虚拟机向导:
2、暂不安装系统:
3、选择其它系统:
4、设置名称与选择存储位置:
5、将硬盘的大小修改为最少:
6、在这个界面上点击配置硬件:
7、卸载掉光驱:
8、 加载软驱(指定从镜像文件加载,选择上面生成的 floppy.img):
9、卸载网络:
10、卸载声卡:
11、虚拟机配置结果:
12、启动引导程序运行结果:
进一步:
如果想进一步做实验的话,可以试着用 BIOS 中断,将引导程序写入硬盘,然后用硬盘启动输出 “Hello World!”
- 技术实验:系统启动过程
- 系统启动 过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- 系统启动过程
- 系统启动过程简介
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- FreeBSD 虚拟内存系统启动过程
- 剖析Linux系统启动过程
- 剖析Linux系统启动过程
- Linux系统启动过程:
- Failed to load class "org.slf4j.impl.StaticLogger
- 李开复:移动互联网还不够成熟 但不做就迟了
- 我的大学路
- 三网融合7500亿商机乍现 运营商圈地运动进行时
- 获取焦点
- 技术实验:系统启动过程
- 炎热的夏季
- 小型的http服务器处于维护中
- 详细解说STL string
- 难 难 难!!!
- Hibernate参考手册3.5.3(中文版).pdf
- 操作系统中的进程同步详析
- 使用相对路径来获取资源
- 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(5)