程序为什么要把自己加载到手机内存一般有多少的7c00h这

posts - 129,&
comments - 7,&
trackbacks - 0
系统启动过程简介
系统启动过程主要由一下几步组成(以硬盘启动为例):
  1. 开机;
  2. BIOS 加电或按reset键后都要进行系统复位,复位后指令地址为 0ffff:fff0,这个地方只有一条JMP指令, 跳转到系统自检 ( Power On Self Test -- POST )程序处;
  3. 系统自检完成后,将硬盘的第一个扇区 (0头0道1扇区, 也就是Boot Sector)读入内存地址
  4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则转去尝试其他启动介质, 如果没有其他启动介质 则显示 &No ROM BASIC& 然后死机;
  5. 跳转到
处执行 MBR 中的程序;
  6. MBR程序 首先将自己复制到
处, 然后继续执行;
  7. 在主分区表中搜索标志为活动的分区,如果没有发现活动分区或有不止一个活动分区, 则转停止;
  8. 将活动分区的第一个扇区读入内存地址
  9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则 显示 &Missing Operating System& 然后停止, 或尝 试软盘启动或;
  10. 跳转到
处继续执行特定系统的启动程序;
  11. 启动系统...
  以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10步由MBR中的引导程序完成.
Boot Sector 结构简介
  1. Boot Sector 的组成
  Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (Master Boot Record),DPT (Disk Partition Table) 和 Boot Record ID(Magic Number) 三部分组成。
  MBR 又称作主引导记录,占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),包含了硬盘的一系列参数和一段系统主引导程序。引导程序主要是用来在系统硬件自检完后负责从活动分区中装载并运行系统引导程序(引导操作系统)。它的最后一条执行语句是一条JMP指令,跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们完全可以判断该引导程序的合法性(比如看JMP指令的合法性),因而也易于修复。象命令fdisk/mbr可以修复MBR和KV300这类软件可以查杀任意类型的引导型病毒,就是这个道理。
  DPT 即主分区表,占用 64 个字节 (0x1BE to 0x1FD),记录了磁盘的基本分区信息。主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息(因此最多可以有四个主分区)。
  Boot Record ID 即引导区标记,占用两个字节 (0x1FE and 0x1FF), 对于合法引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
  Boot Sector 的具体结构如下图所示:
0000 |------------------------------------------------|
  | Master Boot Record |
  | 主引导记录(446字节) |
  01BD | |
  01BE |------------------------------------------------|
  01CD | 分区信息 1(16字节) |
  01CE |------------------------------------------------|
  01DD | 分区信息 2(16字节) |
  01DE |------------------------------------------------|
  01ED | 分区信息 3(16字节) |
  01EE |------------------------------------------------|
  01FD | 分区信息 4(16字节) |
  |------------------------------------------------|
  | 01FE | 01FF |
  | 55 | AA |
  |------------------------------------------------|
硬盘MBR主引导代码分析
  一程序流程
  (引导扇区是指硬盘相应分区的第一个扇区,是和操作系统有关的,操作系统的引导是由它来完成的;而MBR主引导程序并不负责引导操作系统,MBR是和操作系统无关的,他的任务是把控制权转交给操作系统的引导程序.)
  1 将程序代码由0:7C00H移动到0:0600H(注,BIOS把MBR放在0:7C00H处)
  2 搜索可引导分区,即80H标志
  成功:goto 3
  失败:跳入ROM BASIC
  无效分区表:goto 5
  3 读引导扇区
  失败:goto 5
  成功:goto 4
  4 验证引导扇区最后是否为55AAH
  失败:goto 5
  成功:goto 6
  5 打印错误进入无穷循环
  6 跳到0:7C00H进行下一步启动工作
阅读(...) 评论()专注于IT互联网
操作系统:实现引导扇区
电脑在启动时,在BIOS启动自检后,检查并将引导扇区加载到7c00h处,跳转到7c00h开始执行代码。
0. 使用的工具
建议先看完本文,再选择安装。
nasm (开源的汇编器 )Bochs (开源的X86硬件平台模拟器 )VirtualBox (虚拟机软件 )1. 引导扇区代码
org 07c00 告诉编译器将程序加载到7c00h处
mov ax, 取代码段段地址,此时应该为0
mov ds, 让数据段与代码段地址指向相同地址
mov es, 让附加段es与代码段地址指向相同地址
call DispS 调用DispStr例程
jmp $ 无限循环,$ 表示编译后当前行指令地址
DispStr: 例程DispStr,显示一行字符串
mov ax, BootM 取字符串首地址
mov bp, CPU使用ES:BP寻址字符串
mov cx, 16 将字符串长度放入 CX
mov ax, 01301 AH = 13h表示输出字符串 AL = 01h写模式,01h表示字符串
中仅包含字符,不包括字符属性,写完更新光标位置
mov bx, 000 BH = 0h页数为0 BL表示字符串属性,0CH表示黑底红字
mov dl, 0 显示位置,DH表示行,DL表示列
int 10 调用BOIS中断10H
BootMessage:
"Hello, MN world!" 定义字符串 db表示define byte
510-($-$$)
0 填充剩余空间 $$表示该程序所在section的开始地址
此处为7c00h
0xaa55 扇区结束标志,如果已0xAA55结束,BIOS认为是一个合法
的引导扇区,dw表示define word
引导扇区长度一般长度为512字节。
上述的代码编译后生成512字节大小的二进制文件。编译命令:
nasm boot.asm -o boot.bin
然后打算以软盘的形式加载并执行这段代码,软盘采用1.44M大小的盘,BIOS的会检查软盘的0面0磁道1扇区,如果是引导扇区,即以0xaa55结束,就加载它。那么就需要将boot.bin写到软盘的第一个扇区。使用作者提供的FloppyWriter完成上述工作,得到Finix.img文件,如下:
-rw-r--r--. 1 root root 1474560 Sep
9 13:56 Finix.img
使用两种方式来运行它,分别使用Virtualbox和Bochs来运行。
3.1 Virtualbox
使用Virtualbox 5.0.2新建一个类型和版本都为Other类型的系统,内存32M,硬盘1G就足够用了。然后配置从软盘启动:
接着设置软盘的加载上述的Finix.img文件。
接着启动系统,运行结果:
3. 2 使用Bochs来运行
安装Boch 2.6.8。然后在Finix.img文件同目录新建一个文件Finix.bxrc,接着将如下内容写入到Finix.bxrc中:
###############################################################
# bochsrc.bxrc file for Finix.
###############################################################
# how much memory the emulated machine will have
# filename of ROM images
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
# what disk images will be used
floppya: 1_44=Finix.IMG, status=inserted
# choose the boot disk.
# where do we send log messages?
log: bochsout.txt
# disable the mouse, since Finix is text only
mouse: enabled=0
# enable key mapping, using US layout as default.
keyboard: keymap=$BXSHARE/keymaps/x11-pc-us.map
不出意外双击Finix.bxrc即可运行,结果如下:
虽然显示了很多其他的信息,但我们知道上面的代码已经可以运行了。
如果配置过程出现了问题可以参考:
于渊《自己动手写操作系统》
Writing 16-bit Code
BIOS INT 10H调用
Wiki INT 10H
INT 10H 的13H参数说明
关于INT 10H 13H的更多应用
INT 10H 13H说明
linux之 引导扇区(二)
常见文件系统,超级块,引导扇区
重建引导扇区
一个最简单引导扇区的编写
自己动手写操作系统-编写引导扇区
主引导扇区解析
操作系统1——引导扇区的理解
没有更多推荐了,MASM涓?负浠

我要回帖

更多关于 手机内存不足关闭那些 的文章

 

随机推荐