linux 0.11_boot启动详解2

2、setup.s详解

一、总述

setup.s 主要作用是利用BIOS中断读取机器系统数据,并将这些数据保存在0x90000开始处,即覆盖bootsec地方;

setup将system系统模块从0x10000移到绝对地址0x0000处,接下来加载中断描述符表寄存器IDT和全局描述符表寄存器GDT,开启A20地址线,重置两个中断控制器芯片8259A,将硬件中断号重新设置为0x20-0x2f。最后控制CPU的寄存器CR0,进入32位保护模式运行,并跳转到位于system模块最前面部分的head.s程序继续运行。

 

二、代码详解

INITSEG  = 0x9000    ! we move boot here - out of the way     #boot起始位置
SYSSEG   = 0x1000    ! system loaded at 0x10000 (65536).   #系统起始问题
SETUPSEG = 0x9020    ! this is the current segment               #setup当前段

#数据段、代码段、未初始化代码段

.globl begtext, begdata, begbss, endtext, enddata, endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text

#开始

entry start
start:

#使用BIOS中断INT10获取屏幕当前光标位置,并保存在内存0X90000处(2个字节)
#再设置一下DS段
    mov    ax,#INITSEG    ! this is done in bootsect already, but...
    mov    ds,ax
    mov    ah,#0x03    ! read cursor pos
    xor    bh,bh
    int    0x10        ! save it in known place, con_init fetches
    mov    [0],dx        ! it from 0x90000.

#取扩展内存的大小值
#利用BIOS中断0x15功能号ah=0x88获取系统所含扩展内存大小并保存在0X90002处
#返回:AX=0x100000处开始扩展内存大小KB
    mov    ah,#0x88
    int    0x15
    mov    [2],ax

#获取显示卡当前显示模式
#调用BIOS中断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值