第0天-制作软盘开机往屏幕上打印Hello, OS world!

实验目的:

               通过自己动手实践, 了解计算机的启动流程, 为理解操作系统奠定基础

实验器材:

               1. vmware, 里面装linux机器使用dd命令方便制作软盘

               2. bochs, 模拟物理机器的模拟器 , 运行我们制作好的软盘

               3. nasm, 使用它来编写开机启动的代码

 

实验步骤:

            1. 软件安装

                 1.1 到buchs官网下载bochs安装, 用其启动里面的dllinux验证其安装是否正确

                 1.2 安装nasm,将其bin目录添加到环境变量PATH中

             2. 机器指令生成

                 2.1 用编辑器编写如下代码,然后将其命名为boot.asm:

                      

                                  org 07c00h                       // 向nasm指示代码将会被加载到07c00h,  nasm 会根据这个数字调整后面指令中对内存地址的引用
                                  mov ax, cs                       
                                  mov ds, ax
                                  mov es, ax                       //数据段和扩展数据段寄存器指向代码段
                                  call PrintMsg                    //调用PrintMsg打印消息
                                  jmp $                                //无限循环, $代表当前指令的内存地址

                    PrintMsg:
                                  mov ax, BootMessage     //
                                  mov bp, ax                       //字符串的地址
                                  mov cx, 16                       //字符串的长度
                                  mov ax, 01301h              //AH = 13( 功能号), AL=01(显示模式) 
                                  mov bx, 000ch
                                  mov dl, 0            
                                  int 10h                            //进入10号中断
                                  ret
               BootMessage: db "Hello, OS world!"
               times 510 - ($ - $$) db 0                       //times表示指令或数据重复被编译, $表示当前指令地址, $$当前段的开始地址。表示填充0 一直到地址499
               dw 0xaa55                                            //在最后两个字节填上 55 aa。

               2.2 使用命令 nasm boot.asm -o boot.bin  将汇编代码编译成机器指令码

           3. 生成软盘映像

                3.1 将boot.bin拷贝到linux中的/tmp 目录

                3.2 运行以下命令生成软盘映像boot.img

                      3.2.1  dd if=/dev/zero of=diska.img bs=512 count=2880  //bs 指定读写块的大小, count 指定要写入软盘的块数,软盘的结构为2面, 80道/面

                                                                                                                //18扇区/道, 512字节/扇区, 所以 512 * (2 *18 * 80 = 2880) = 1474560 = 1440 KB    

                      3.2.2  dd if=/tmp/boot.bin of=boot.img bs=512 count=1

                      3.3.3 dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879    

                                                                                                              

            4. 配置生成的软盘镜像到bochs中

                4.1 在bochs安装目录下建立 helloos文件夹, 将生成的boot.img复制到其中,再将dllinux中的bochsrc.bxrc和run.bat也复制到该文件夹中,打开bochsrc.bxrc

                       将flopyya 配置成boot.img, 并将启动方式改成floppy. 保存文件

                4. 2 运行run.bat将虚拟机启动, 会看到如下画面:

                       

             至此, 实验完成。

 

             实验总结:

                  1. 计算机中存在两种程序指令, 一种是我们平常所写的应用转化成的二进制指令, 这些程序不能自己执行, 它们必须依靠那些处于比他们更低层次的基础软件

                       在收到用户的指示或者在特定的事件发生的时候将其调用, 只有通过这种方式, 它们才得以被执行。 另一种就是我们这次实验中所写的程序了, 它们在计算

                       机启动时, 被调入到内存特定地址处, 然后立刻被执行(计算机在启动的时候会将启动设备上第一个扇区的内容读取到内存中,然后从第一条指令                     

                      开始执行。

                   2. 源代码文件与目标机器指令文件里面存储的都是二进制组成的内容, 不同之处是, 源码文件里存储的二进制内容是与人类的能识别的符号一一对应的,

                      它们被发送到显示器上后被显示器转化为人能识别的符号, 而目标机器指令文件里面存储的二进制内容则是CPU能识别的0,1 组合, 这些内容一般不发送到显示

                      设备, 而只是发送给CPU, CPU根据这些0,1组合做相应的状态转换, 输出不同的控制信号。

  

 

                      

               

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值