美文网首页
第二章笔记简单MBR程序

第二章笔记简单MBR程序

作者: mecury | 来源:发表于2018-05-10 23:29 被阅读30次

    软件接力的第一棒,BIOS

    • 实模式下的1MB内存布局
    起始 结束 大小 用途
    FFFF0 FFFFF 16B BIOS的入口地址,此地址也属于BIOS代码,同样属于顶部的640KB字节,只是为了强调其入口地址才单独贴出来的。此处16字节的内容是跳转指令jmp f000:e05b
    F0000 FFFEF 64kb-16b 系统BIOS范围是F0000~FFFFF共64B,为说明入口地址,将最上面的16字节从此处去掉,所以此处的终止地址是0xFFFFEF
    C8000 EFFFF 160KB 映射硬件适配器的ROM或内存映射式I/O
    C0000 C7FFF 32KB 显示适配器BIOS
    B8000 BFFFF 32KB 用于文本模式显示适配器
    B0000 B7FFF 32KB 用于黑白显示适配器
    A0000 AFFFF 64KB 用于彩色显示适配器
    9FC00 9FFFF 1KB EBDA(Extern BIOS Data Area)扩展BIOS数据区
    7E00 9FBFF 622080B约为608KB 可用区域
    7C00 7DFF 512B MBR被BIOS加载到此处,共512字节
    500 7BFF 30464B约30KB 可用区域
    400 4FF 256B BIOS Data Area
    000 3FF 1KB Interrupt vector Table 中断向量表
    • 由低地址看,0~0x9FFFF处是DRAM(Dynamic Random Access Memory),是会定时刷新。
    • BIOS的作用是检测,初始化硬件。硬件自己提供了一些初始化的功能调用,BIOS直接调用就好了,另外,BIOS还做了一个重要的事情,建立了中断向量表

    BIOS是如何苏醒的

    • BIOS是由硬件加载的,硬件就是只读存储器BIOS
    • BIOS本身是个程序,程序要执行,只要有个入口地址才行,此入口地址就是0xFFFF0
    • 在开机的瞬间,CPU的cs:ip寄存器被强制化初始化为:0xF000:0xFFF0
    • 0xFFFF0只有16字节的空间,BIOS的真正代码不在这里,此处是跳转代码,跳到0xF000:0xe05b,这是BIOS代码真正开始的地方

    初试MBR

    1. 如果报错为:
      NO bootable device.


      system03.png

    需要执行命令:

    bximage -hd -mode="flat" -size=60 -q hd60M.img
    

    显示这个就成功了。

    [haifei@localhost bochs-2.6.2]$ bximage -hd -mode="flat" -size=60 -q hd60M.img
    ========================================================================
                                    bximage
                      Disk Image Creation Tool for Bochs
              $Id: bximage.c 11315 2012-08-05 18:13:38Z vruppert $
    ========================================================================
    
    I will create a 'flat' hard disk image with
      cyl=121
      heads=16
      sectors per track=63
      total sectors=121968
      total size=59.55 megabytes
    
    The disk image 'hd60M.img' already exists.  Are you sure you want to replace it?
    Please type yes or no. [no] y  
    
    Writing: [] Done.
    
    I wrote 62447616 bytes to hd60M.img.
    
    The following line should appear in your bochsrc:
      ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
    
    
    1. 将MBR的程序写入到引导盘中
    dd if=/home/haifei/bochs2.6.2/bochs-2.6.2/systemCode/c2/a/boot/mbr.bin of=/home/haifei/bochs2.6.2/bochs-2.6.2/hd60M.img bs=512 count=1 conv=notrunc
    

    if:要读取的文件
    of:要写入的文件
    bs:指定块的大小
    count:指定拷贝的次数
    seek:输出到文件要跳过多少块
    conv:如何转换文件
    上面的含义是:
    将mbr.bin文件,输出到hd60M.img中,块大小为512,只操作一块,共1*512字节,以追加的形式

    1. 结果:


      system04.png

    简单MBR程序

    ;主引导程序
    ;------------------------------------------------
    SECTION MBR vstart=0x7c00
        mov ax,cs
        mov ds,ax
        mov es,ax
        mov ss,ax
        mov fs,ax
        mov sp,0x7c00
    ;清屏利用0x06号功能,上卷全部行,则可清屏
    ;------------------------------------------------
    ;INT 0x10 功能号:0x06 功能描述
    ;------------------------------------------------
    ;输入
    ;AH 功能号=0x06
    ;AL=上卷的行数,如果为0,就为全部
    ;BH=上卷的行属性
    ;(CL,CH)窗口左下角的(x,y)位置
    ;(DL,DH)窗口的右下角的(X,Y)位置
    ;无返回值
        mov ax,0x600
        mov bx,0x700
        mov cx,0    ;左上角(0,0)
        mov dx,0x184f   ;右下角(80,25) 0x18=24 0x4f=80
        
        int 0x10
    ;;;;;;;下面这三行获取光标的位;;;;;;;;;;
    ;.get_cursor获取当前光标的位置,在光标位置处打印字符
        mov ah,3    ;输入:3号子功能是获取光标位置,需要存入ah寄存器
        mov bh,0    ;bh寄存器存储的是待获取光标的页号
        
        int 0x10    ;输入:ch=光标开始行,cl=光标结束行
                ;dh=光标所在行号,dl=光标所在列号
    ;;;;;;;;;获取光标的位置结束;;;;;;;;;;;;;;;
    
    ;;;;;;;;;打印字符串;;;;;;;;;;;;;;;;;;;;;;
        ;还是使用10h中断,不过这次调用13号子功能打印字符串
        mov ax,message
        mov bp,ax   ;es:bp为串首地址,es此时同cs一致
                ;开头已经为sreg初始化
        ;将光标位置用到dx寄存器内容,cx中的光标位置可以忽略
        mov cx,5    ;cx为串长度,不包括结束的0的字符个数
        mov ax,0x1301   ;子功能号13显示字符及其属性,要存入ah寄存器
                ;al设置写字符的方式al=01:显示字符串光标跟随移动
        mov bx,0x2  ;bh存储要显示的页号,此处为第一页
                ;bl中是字符属性,属性黑底绿字bl=02h
        int 0x10    ;执行BIOS,0x10号中断
    ;;;;;;;;;;打印字符串结束;;;;;;;;;;;;;;;;;;
    
    jmp $
    
    message db '1 MBR'
    times 510-($-$$) db 0
    db 0x55,0xaa
    
    

    相关文章

      网友评论

          本文标题:第二章笔记简单MBR程序

          本文链接:https://www.haomeiwen.com/subject/wivbrftx.html