zoukankan      html  css  js  c++  java
  • 学习笔记——1.1自己写操作系统 引导程序相关知识

    (进一步了解:http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

    1.ORG 07c00H

    将引导程序定位到07c00H,因为BIOS会从此处加载引导程序。

    2.512字节

    引导扇区大小。

    times 510-($-$$) db 0将引导程序大小填充到510字节,加上结尾的aa55,正好512。

    3.0xaa55

    引导程序终结标识,无此标识的不会被认为是引导程序。

    4.BIOS中断

    使用int 10H中断来向显示器写字符。

    BIOS中断向量

    I/O ADDR
    INT TYPE(16进制)
    FUNCTION
    40 ~43
    10
    视频显示 I/O
    44 ~ 47
    11
    设备检验
    48 ~ 4B
    12
    测定存储器容量
    4C ~ 4F
    13
    磁盘 I/O
    50 ~ 53
    14
    54 ~ 57
    15
    系统描述表指针
    58 ~ 5B
    16
    键盘 I/O
    5C ~ 5F
    17
    打印机 I/O
    60 ~ 63
    18
    ROM BASIC 入口代码
    64 ~ 67
    19
    引导装入程序
    68 ~ 6B
    1A
    日时钟

    示例:在显示器上依次添加字符显示,最后显示出“Hello”。

    org 07c00h
    
    mov ah,0x0e
    
    mov al,'H'
    int 10H
    
    mov al,'e'
    int 10H
    
    mov al,'l'
    int 10H
    
    mov al,'l'
    int 10H
    
    mov al,'o'
    int 10H
    
    
    times 510-($-$$) db 0
    
    dw 0xaa55

     5.其他

    org 07c00h
    mov ax,cs
    mov ds,ax
    mov es,ax
    call DispStr
    jmp $
    DispStr:
        mov ax,BootMessage
        mov bp,ax
        mov cx,8
        mov ax,01301h
        mov bx,000ch
        mov dl,0
        int 10h
        ret
    BootMessage: db "Hello,OS"
    times 510-($-$$) db 0
    dw 0xaa55

    说明:

    mov ax, BootMessage
    mov bp, ax ;这条指令与上一条指令合二为一,应该写成:lea bp,BootMessage
    mov cx, 8 ;要显示的"Hello,os"字符数
    mov ax, 01301h ;AH=13h,int 10h,即视频中断13h号功能:写字符串;AL=01H,表示写完字符串后,更新光标位置
    mov bx, 000ch ;BH=0,页号(视频缓冲区分页的);BL=0CH,字符显示属性,以黑底亮红显示字符
    mov dl, 0 ;DH、DL=写串的光标位置,DH=行号,DL=列号
  • 相关阅读:
    Java内部类与异常类
    Java 继承和接口
    134. 加油站
    P1567 统计天数
    P2141 珠心算测验
    P1428 小鱼比可爱
    P1427 小鱼的数字游戏
    python中使用xlrd、xlwt操作excel表格详解
    同步机制
    CSS学习
  • 原文地址:https://www.cnblogs.com/dev2007/p/3564971.html
Copyright © 2011-2022 走看看