学习笔记

在路上

导航

Linux源码学习--bootsect.s启动

Posted on 2008-09-10 10:39  An Shi  阅读(164)  评论(0编辑  收藏  举报

今天看bootsect.s,有些代码不甚理解,查阅资料后,终于释然,特记录如下:

 

代码:     movw    $BOOTSEG, %ax 
    movw    %ax, %ds      //置移动源段地址,此处为0x07C0
    movw    $INITSEG, %ax
    movw    %ax, %es      //置移动目的段地址,此处为0x9000
    movw    $256, %cx    //循环计数器,位移256次,共移动512字节的数据
    subw    %si, %si         //源地址:   ds:si = 0x07C0:0x0000
    subw    %di, %di       //目的地址:es:di = 0x9000:0x0000
    cld                             //置方向标志位为正向,即地址增长复制
    rep
    movsw                      //移动数据,字方式,且每次地址自动加2
    ljmp    $INITSEG, $go
以上代码的作用是:当bootsect.s 被 bios启动子程序加载至 0x7c00 (31k)处后,再将自己移到地址 0x90000 (576k)处,并跳转至那里。