• 引导扇区汇编代码解释


    1 org 07c00h
    2 mov ax, cs
    3 mov ds, ax
    4 mov es, ax
    5 call DispStr
    6 jmp $
    7 DispStr:
    8 mov ax, BootMessage
    9 mov bp, ax
    10 mov cx, 16
    11 mov ax, 01301h
    12 mov bx, 000ch
    13 mov dl, 0
    14 int 10h
    15 ret
    16 BootMessage: db “Hello, OS world!”
    17 times 510-($-$$) db 0
    18 dw 0xaa55

    这个代码段是存于磁盘引导扇区的系统引导(自举)程序。若存于硬盘第一个扇区,则这段代码称为:硬盘主引导记录;若存于硬盘某个分区的第一个扇区,则称为:分区引导记录;若存于软盘的第一个扇区,则称为:软盘引导记录。称为磁盘引导记录的重要标志是:

    dw 0xaa55

    磁盘的一个扇区是512字节,标志0xaa55存于这个扇区的最后一个字(两字节,偏移地址为:1FEH),其余空间用于存储指令代码和一些参数、 提示信息等。磁盘引导记录由ROM BIOS的INT 19H(引导加载程序,相当于热启动系统,对应的快捷键为:Ctrl+Alt+Del),固定装入内存的0000:7C00H,然后将控制权交给磁盘引导 程序,相当于开始执行下面的程序段。下面详细解答一下这个程序段的功能:

    org 07c00h ;调整偏移量伪指令ORG,指定下面的指令从7c00h处开始,因为BIOS一旦发现引导扇区,就会将这512字节装载到内存0000:7c00处
    mov ax, cs ;数据传送指令,将代码段寄存器cs的内容赋给通用寄存器ax
    mov ds, ax ;ax→ds,使数据段与代码段在同一个段
    mov es, ax ;ax→es,使附加段与代码段在同一个段
    call DispStr ;调用子程序DispStr,显示字符串信息:Hello, OS world!
    jmp $ ;$表示当前地址,实现死循环
    DispStr: ;子程序:显示字符串
    mov ax, BootMessage ;BootMessage的首地址给ax
    mov bp, ax ;BootMessage首地址给基数指针寄存器BP
    mov cx, 16 ;要显示的字符数

    接下来是在调用视频中断之前,需要对各寄存器参数进行设置,详见说明请参考http://www.cnblogs.com/JohnShao/archive/2011/06/13/2079638.html
    mov ax, 01301h ;AH=13h,即视频中断13h号功能:写字符串;AL=01H,表示写完字符串后,更新光标位置
    mov bx, 000ch ;BH=0,页号(视频缓冲区是分页的);BL=0CH(00001100),字符显示属性,以黑底亮红显示字符(0000:黑色背景色; 1100:淡红色前景色)
    mov dl, 0 ;DH、DL=写串的光标位置,DH=行号,DL=列号
    int 10h ;调用视频中断
    ret ;子程序返回指令,返回调用者
    BootMessage: db “Hello, OS world!” ;要显示的字符串信息
    times 510-($-$$) db 0 ;$是当前地址,$$是首地址,总体意思就是从此处一直到510都用0填充
    dw 0xaa55 ;磁盘引导记录重要标志 ,最后2个字节代表这是引导扇区。

    trackback: http://www.ourys.com/post/simple-boot-img.html

  • 相关阅读:
    linux 基础笔记(一)
    wysiwyg加ckeditor加 代码高亮
    将html转换为Drupal模板文件的一般步骤
    最重要的7个Drupal内核模板文件
    drupal模板命名规则
    mysql存储过程和事件
    阿里云图片压缩上传代码
    BeanUtils No value specified for Date的解决方法
    mysql SQLyog导入导出csv文件
    mysql去除重复查询的SQL语句基本思路
  • 原文地址:https://www.cnblogs.com/JohnShao/p/2079561.html
Copyright © 2020-2023  润新知