org 07c00h的原因
2016-01-07 11:14
225 查看
Boot Sector(引导扇区),一个正确的Boot Sector除了以0xAA55结束之外,还应该包含一段少于512B的执行码
源码分析
org 07c00h ;告诉编译器程序加载到7c00处
mov ax,cs
mov ds,ax
mov es,ax
call DispStr ;调用显示字符串例程
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
int 10h ;10h号中断
ret
BootMessage: db "hello ,OS world!"
times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码恰好为
;512字节
dw 0xaa55 ;结束标记
nasm boot.asm -o boot.bin
硬件自检相关工作完成后,就会启动操作系统:以Windows XP为例,系统BIOS将启动盘的第一扇区(Boot Sector,引导扇区)读入到内存的0x7C00H处,并检查0x7DFE地址的内容是否等于0xAA55,如果匹配,跳转到0x7C00处执行MBR(Master Boot Record,主引导记录),MBR接着从分区表(Partition Table)中找到第一个活动分区(Active Partition ,一般是C盘分区),然后按照类似方式读取并执行这个活动分区的引导扇区(Partition Boot
Sector),而引导扇区将负责读取并执行NTLDR(NT LoaDeR,windows nt的加载程序),然后主动权就移交给了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
源码分析
org 07c00h ;告诉编译器程序加载到7c00处
mov ax,cs
mov ds,ax
mov es,ax
call DispStr ;调用显示字符串例程
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
int 10h ;10h号中断
ret
BootMessage: db "hello ,OS world!"
times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码恰好为
;512字节
dw 0xaa55 ;结束标记
nasm boot.asm -o boot.bin
硬件自检相关工作完成后,就会启动操作系统:以Windows XP为例,系统BIOS将启动盘的第一扇区(Boot Sector,引导扇区)读入到内存的0x7C00H处,并检查0x7DFE地址的内容是否等于0xAA55,如果匹配,跳转到0x7C00处执行MBR(Master Boot Record,主引导记录),MBR接着从分区表(Partition Table)中找到第一个活动分区(Active Partition ,一般是C盘分区),然后按照类似方式读取并执行这个活动分区的引导扇区(Partition Boot
Sector),而引导扇区将负责读取并执行NTLDR(NT LoaDeR,windows nt的加载程序),然后主动权就移交给了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
相关文章推荐
- UIScrollView
- linux sed简单使用
- java开发前奏
- txt文本行数计算;转为二维数组;二维数组写为txt内容
- 第6集 精通spark集群搭建
- 轮询和长轮询
- YTU 1075: Time
- 我的MYSQL学习心得(十) 自定义存储过程和函数
- 很简单的JQuery网页换肤
- [MariaDB] Setup MariaDB Galera Cluster with HAProxy
- JavaEE_SSM_SpringMVC 学习指南
- 文字超出隐藏
- Android View与GroupView原理以及其子类描述
- github的使用方法
- 剑指offer-变态跳台阶
- 1977: [BeiJing2010组队]次小生成树 Tree kruskal+倍增
- 线程池作用及Executors方法讲解
- Axis2在Web项目中整合Spring
- Python使用二分插入排序竟然比直接插入排序快99倍!
- Exchange 2016 创建日程,远程服务器返回错误: (401) 未经授权