深入浅出操作系统(二)Hello,DTOS

1、问题

主引导程序是软件还是固件?如果是软件那么由谁开发?如何开发?

软件、开发操作系统的程序员

2、主引导程序

  • 一段存储在主引导区(MBR)中的有效代码
  • 并不固化于硬件,属于操作系统代码的一部分
  • 启动操作系统内核的桥梁,由汇编程序写成
  • 代码总量不能超过512个字节(包含0x55aa

3、主引导程序的开发

4、课程实验

  • 编写一个主引导程序(汇编语言)
  • 可独立运行于x86架构的主机(无操作系统)
  • 运行后在屏幕上打印 "Hello, DTOS!"

5、实现思路

1. 将关键寄存器的值设置为0 ( mov ax,0 )

2. 定义需要打印的数据( db "Hello,D.T.OS!" )

3. 打印预定义好的字符数据( int 0x10 )

6、汇编小贴士一

  • mov:赋值操作,将右操作数赋值给左操作数
    • mov ax, 0       ;0赋值给ax寄存器
  • int:触发中断
    • int 0x10            ;触发0x10中断,对屏幕进行操作
  • hlt:停止运行,CPU进入暂停状态,不执行任何操作
    • hlt                ;使程序进入睡眠状态

7、汇编小贴士二

  • 汇编中地址的访问方式:段地址:段内偏移地址
    • mov byte [0xb800:0x01]0x07          ; 0x07赋值到 ( 0xb800:0x01 ==> 0xb8000 + 0x01)  byte ==>只要一个字节
  • 标签
    • 用于标识后续指令的地址(可等同为C语言中的标签
  • $ vs $$
    • $表示当前指令行地址,$$表示当前汇编段起始地址

8、中断调用 VS 函数调用

在屏幕上打印一个字符

9、编程实验:第一个引导加载程序

boot.asm

10、问题

如何验证编写的主引导程序?

11、解决方案设计

  • 将汇编源码编译为二进制机器码( nasm
  • 创建虚拟盘( bximage
  • 将二进制代码写入虚拟盘起始位置( dd
  • 在虚拟机中将虚拟盘作为启动盘执行( vmware

12、实验原材料

  • nasm
    • nasm boot.asm -o boot.bin
  • bximage
    • bximage a.img -q -fd -size=1.44
      • -q    

        不需要任何的交互,一次性创建出a.img即可

        -fd    

        创建的是虚拟软盘

        -size=1.44  

        大小为1.44兆

  • dd
    • dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
      • if

        输入

        of

        输出

        bs=512

        写入时每个单元的大小

        count=1

        数量为1,即1个512字节

        conv=notrunc

        连续写入,不要有间隔

13、编程实验:运行引导加载程序

boot.img

14、小结

  • 主引导程序的代码量不能超过512字节
  • 主引导程序需要使用汇编语言开发
  • 主引导程序中可以通过BIOS中断使用硬件功能
  • 主引导程序运行于实模式(地址都是实际的物理地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值