<address id="tbpfr"></address>

            <sub id="tbpfr"></sub>

                操作系统-Hello,DTOS!的创建

                一.Hello,DTOS的创建

                Q:主引导程序是软件还是固件?如果是软件,那么由谁开发?如何开发
                A.主引导程序
                1.一段存储在主引导区中的有效代码
                2.并不固化于硬件,属于操作系统代码的一部分
                3.启动操作系统内核的桥梁,由汇编程序写出
                4.代码总量不能超过512个字节(包含0x55aa)
                我们可以由图可以看出BIOS的入口于C/C++的入口的对比
                操作系统-Hello,DTOS!的创建
                实验-编写一个主引导程序(汇编语言),可独立运行于x86架构的主机(无操作系统),运行后在屏幕上打印"Hello,DTOS!"
                A.实现思路
                1.将关键寄存器的值设为0(mov ax,0)
                2.定义需要打印的数据(db "Hello,D.T.OS!")
                3.打印预定义好的字符数据(int 0x10)
                在这里需要知道的是
                mov:赋值操作,将右操作数赋值给左操作数
                操作系统-Hello,DTOS!的创建
                int:触发中断
                操作系统-Hello,DTOS!的创建
                hlt:停止运行,CPU进入暂停状态,不执行任何操作
                操作系统-Hello,DTOS!的创建
                汇编中地址的访问 方式:段地址:段内偏移地址
                操作系统-Hello,DTOS!的创建
                标签
                操作系统-Hello,DTOS!的创建
                操作系统-Hello,DTOS!的创建
                B.中断调用VS函数调用
                操作系统-Hello,DTOS!的创建
                实验解决方案的设计
                1.将汇编源码编译为二进制机器码(nasm)

                操作系统-Hello,DTOS!的创建创建虚拟网盘
                2.创建虚拟盘(bximage)
                操作系统-Hello,DTOS!的创建设置大小
                3.将二进制代码写入虚拟盘起始位置(dd)
                操作系统-Hello,DTOS!的创建if为输入 of为输出 bs为大小 连续写入没有间隔
                4.在虚拟机将虚拟盘作为启动盘执行(vmware)
                B.实现过程如下
                a.编写汇编语言

                org 0x7c00
                
                start:
                  mov ax, cs//关键寄存器地址为0
                    mov ss, ax
                    mov ds, ax
                    mov es, ax
                
                    mov si, msg//赋值操作 将msg的第一行地址赋值到si寄存器中
                
                print:
                    mov al, [si]//[]表示取数据
                    add si, 1//si保存的地址值+1
                    cmp al, 0x00//结束位置
                    je last//进行比较跳转
                    mov ah, 0x0e
                    mov bx, 0x0f
                    int 0x10//触发中断,打印字符
                    jmp print//相当于while循环
                
                last:
                    hlt
                    jmp last//无条件的跳转
                
                msg:
                    db 0x0a, 0x0a//定义两个连续数据 0x0a换行
                    db "Hello, DTOS!"http://定义字符串数据 
                    db 0x0a, 0x0a//定义换行符
                    times 510-($-$$) db 0x00//填0满足512字节
                    db 0x55, 0xaa//占用两个字节

                b.在Linux下将其编译成二进制
                操作系统-Hello,DTOS!的创建操作系统-Hello,DTOS!的创建
                1-2.通过nasm命令进行二进制编译,如果没有安装nasm通过提示进行安装
                3-4.通过bximage命令进行网盘设置,如果没有安装bximage通过提示进行安装
                5-8.分别设置虚拟为虚拟网盘,然后将其设置为标准大小1.44兆,同时将其命名为a.img
                9.通过dd命令将二进制代码写入虚拟盘起始位置,不间断的写入大小为512
                生成的a.img如图所示
                操作系统-Hello,DTOS!的创建
                c.在虚拟机上新建一个操作系统,对其进行设置完之后,对启动盘进行设置,将生成的a.img拷贝至新建的虚拟机下进行设置
                操作系统-Hello,DTOS!的创建
                d.设置完成之后启动该操作系统,可以得到我们需要的打印结果如图所示
                操作系统-Hello,DTOS!的创建
                小结1.主引导程序的代码量不能超过512字节2.主引导程序需要使用汇编语言开发3.主引导程序中可以通过BIOS中断使用硬件功能4.主引导程序运行于实模式(地址都是实际的物理地址)

                相关文章
                相关标签/搜索
                中彩堂XXyXCCXXyX·US