第一章 自己动手写第一个最小的“操作系统”
来源:互联网 发布:重庆时时彩平台源码 编辑:程序博客网 时间:2024/04/29 03:54
1. 工具准备
1. 硬件
- 一台计算机(Win7/Win8操作系统)
- 一个U盘
2. 软件
- 编辑器Notepad++
- 汇编编译器NASM
- WinHex 16进制编辑器
2. 引导扇区代码(汇编)
;--------------------------------------boot.asm------------------------------; ORG 7C00H; 告诉编译器程序加载到7c00处MOV AX,CSMOV DS,AXMOV ES,AXCALL DispStr; 调用显示字符串例程JMP $ DispStr:MOV AX,BootMessageMOV BP,AX; ES:BP = 串地址MOV CX,16; CX = 串长度MOV AX,01301H; AH = 13, AL = 01HMOV BX,000CH; 页号为0(BH = 0) 黑底红字(BL = 0CH,高亮)MOV DL,0INT 10H; 10H 号中断RET BootMessage:DB "Hello, OS World!"TIMES510-($-$$) DB 0; 填充剩下的空间,使生成的二进制代码恰好为512字节DW0xAA55; 结束标志
3. 操作步骤
1.用NASM编译
nasm boot.asm -o boot.bin
2. 用WinHex刻录
- 打开boot.bin文
“菜单栏”------>“文件”------>“打开”------>“boot.bin” - 打开U盘
“菜单栏”------>“工具”------>“打开磁盘”------>“逻辑驱动:移动存储介质”------>“确定” - 把boot.bin文件的数据复制到U盘的引导扇区
1)CTRL+A全选boot.bin文件数据,CTRL+C复制boot.bin文件的数据
2)左键单击U盘偏移地址为0的地方(即第0行第0列)
3)“右键单击”------>“编辑”------>“剪贴板数据”------>“写入”------>“确定”
4)“菜单栏”------>“文件”------>“保存扇区”------->“确定”------>“是” - 重启电脑,按下F10键打开BOIS菜单,选择从U盘启动,可以看到屏幕显示红色的字符串“Hello,OS World!”
4. 原理解释
1. ORG 7C00H
有的书上说ORG的作用是规定某一段内存程序代码或数据存放的起始偏移地址。但其实ORG 指令本身并不能决定程序将要加载到内存的什么位置,它只是告诉编译器,我的程序在编译好后需要加载到 XXX地址,所以请你在编译时帮我调整好数据访问时的地址。ORG是伪指令,只会在编译期影响到内存寻址指令的编译(编译器会把所有程序用到的段内偏移地址自动加上ORG后跟的数值),而其自身并不会被编译成机器码。
如果一个程序使用了ORG XXX 指令,那么该程序只能被加载到段内偏移 XXX 处,否则将不能正常访问段内数据。
2. INT 10H
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序。调用前需要在寄存器AH中存放欲调用的功能号。
3. DW 0xAA55
如果磁盘的第一个扇区以0xAA55结束,那么BOIS认为它是一个引导扇区。
详细说明请参考INT 10H中断功能详解。
4. 单美元符号$和双美元符号$$
$表示当前行被汇编后的地址,$$表示一个节的开始处被汇编后的地址,$-$$表示本行距程序开始处的距离。
5.注意事项
- 只有完整版的WinHex才能刻录U盘
- 在NASM中,任何不被方括号[] 括起来的标签或变量名都被认为是地址,访问标签中的内容必须使用[]。Offset这个关键字在NASM中是不需要的,因为不加方括号 [] 时表示的就是Offset。
6.遗留的问题
- 汇编语言中定位伪指令ORG的作用机理是什么?
- 操作系统把可执行程序装入内存执行的过程是什么?
- 操作系统怎么把可执行程序装载到指定的位置呢?
- 第一章 自己动手写第一个最小的“操作系统”
- [自己动手写操作系统]的学习实践【第一章】
- 《自己动手写操作系统》 第一章总结
- 2010.01.23【自己动手写操作系统】写一个最小的操作系统
- 第一章--最小的“操作系统”
- Orange's 自己动手写操作系统 第一章 十分钟完成的操作系统 U盘启动 全记录
- 第一章《马上动手写一个最小的操作系统》
- 动手写自己的第一个"操作系统"
- 自己动手写操作系统的理由
- 自己动手写操作系统(1):一个最小的“操作系统”(转载备用)
- 《自己动手写操作系统》第一章 boot.asm源码剖析
- 关于《自己动手写操作系统》的两点不足
- 《自己动手写操作系统》的配置问题
- 《自己动手写操作系统》开发环境的安装
- 自己动手写操作系统一书的总结
- 自己动手写操作系统
- [转载]自己动手写操作系统
- 自己动手写操作系统(一)
- 黄淮学院CSDN高校俱乐部举行户外趣味活动
- 趣味编程题——猜算式
- android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
- 运用JDK中 ZipInputStream类实现压缩文件的解压缩功能
- Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
- 第一章 自己动手写第一个最小的“操作系统”
- InitCommonControlsEx调用失败,manifest作怪
- 安装.NET Framework 3.5 SP1 超慢的解决办法
- Ganymed_ssh2工具bug
- Duilib中各个类的简单介绍
- git 服务器搭建若干问题
- IE 下的各种浏览器模式的区别
- ibatis中log显示sql语句
- Hadoop cluster测试过程