zoukankan      html  css  js  c++  java
  • 实现一个简单的boot

    1.汇编语言。分别汇编器和链接as86和ld86。码如下面:

    .globl begtext,begdata,begbss,endtext,enddata,endbss
    .text
    begtext:
    .data
    begdata:
    .bss
    begbss:
    .text
    BOOTSEG=0x7c0
    entry start
    start:
    	jmpi go,BOOTSEG
    
    go:
    	mov ax,cs
    	mov ds,ax
    	mov es,ax
    
    	mov ax,#0x0600
    	mov cx,#0x0000
    	mov dx,#0xFFFF
    	int 0x10
    
    	mov cx,#20
    	mov dx,#0x0000
    	mov bx,#0x000c
    	mov bp,#msg1
    	mov ax,#0x1301
    	int 0x10
    loop0:jmp loop0
    
    msg1:
    	.ascii "Loading system..."
    	.byte 13,10
    .org 510
    	.word 0xAA55
    .text
    endtext:
    .data
    enddata:
    .bss
    endbss:

    BOOTSEG=0x7c00

    entry start

    start:

    jmpi go,BOOTSEG

    go:

    entry start告诉编译器程序入口是start,我们这段是引导代码。引导代码在引导盘的指定位置处,BIOS会读取引导盘的第一个扇区到内存0x7c00:0x00处。

    注意:程序执行在实模式以下。寻址方式段*16+偏移,要想在0x7c00初開始执行,要设BOOTSEG=0x7c0,而不是0x7c00。

    jmpi go,BOOTSEG是跳转到0x7c00:go处运行。前面我们说到BIOS会读取引导扇区到内存的0x7c00处。而jmpi 这条语句使得引导程序从0x7c00開始运行,也就是说。開始运行我们当前的引导区程序。

    mov ax,#0x0600

    mov cx,#0x0000

    mov dx,#0xFFFF

    int 0x10

    这段代码调用BIOS的0x10中断,功能是清屏。

    mov cx,#20

    mov dx,#0x0000

    mov bx,#0x000c

    mov bp,#msg1

    mov ax,#0x1301

    int 0x10

    上面代码调用BIOS的0x10中断,显示字符串msg1

    .org 510 

    .word 0xAA55

    启动扇区标志

    2.编译调试boot.s程序。

    前边说过使用as86汇编器和ld86链接器,使用bochs模拟器,bochs支持虚拟的软盘和硬盘。由于软盘简单一些,所以我们把程序编译后放到软盘上就可以启动了。

    (1)编译boot.s

    as86 -0 -a -o boot.o boot.s

    (2)连接boot.o

    ld86 -0 -s -o boot boot.o

    (3)制作虚拟软盘

    dd bs=32 if=boot of=boot.img skip=1

    由于boot前32字节是文件头,所以要跳过不写。把后边全部的内容写进boot.img,至此boot.img就是做好的可启动虚拟软盘了

    3.执行调试

    创建bochsrc.txt。输入bochs命令就可以调试boot程序


    4.linux的dd命令具体解释

    dd [option]

    语法:

     if=输入文件[STDIN] 

     of=输出文件[STDOUT]

     ibs=bytes 一次读取bytes字节

     skip=blocks,跳过输入文件开头的ibs*blocks块

     seek=bytes,跳过输出文件bytes*blocks块

     obs=bytes,一次写入bytes字节

     bs=bytes,等于同一时候设置obs和ibs


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    从函数作用域和块级作用域看javascript的作用域链
    基于vue实现一个简单的MVVM框架(源码分析)
    发布-订阅模式
    希尔排序
    直接插入排序
    选择排序
    React Fiber源码分析 第三篇(异步状态)
    React Fiber源码分析 第二篇(同步模式)
    React Fiber源码分析 第一篇
    数据结构 之 树总结
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4841396.html
Copyright © 2011-2022 走看看