第4章 进入保护模式(设置GDT全局描述符表)

本文详细介绍了进入保护模式的过程,特别是如何配置GDT(全局描述符表),以实现更高级别的系统安全和多任务处理。通过学习,读者将掌握保护模式的关键概念和C语言实现细节。
摘要由CSDN通过智能技术生成

进入保护模式的步骤是:

1、关中断;
2、打开A20地址线,使之能访问1M以上的内存;
3、设置GDT; GDT知识可查看《Intel微处理器 第8版》p541 也可以查看 Intel开发手册
4、加载GDT;
5、进入保护模式,跳转到setup.s


boot.s的源代码如下所示
    .text
    .global  start
    .include "kernel.inc"
    .code16
start:
    jmp $0x0, $code
msg:
    .string "1kos booting......\x0"
code:
    movw    $0xb800,%ax        #显存地址在0xb8000
    movw    %ax,    %es        
    xorw    %di,    %di        #es:di = 0xb8000
    xorw    %ax,    %ax
    movw    %ax,    %ds        #ds:si = msg
    movw    $msg,   %si
    cld                #si和di自增
    movb    $0x07,  %ah        #字符属性:黑底白字

    #打印msg信息
print_c:
    cmp        $0x0,   (%si)
    je        load
    lodsb            #ds:[si] -> al, ++si
    stosw            #ax -> es:[di], di += 2  #al=字符 ah=属性
    jmp        print_c


    #读取kernel到0x7e00上
load:
    #设置临时栈
    xorw    %ax,    %ax
    movw    %ax,    %ds        # ds = 0x0
    movw    %ax,    %ss        # ss = 0x0,栈基址
    movw    $KERNEL_STACK_BOT,%sp        # sp = 0x7c00,栈地址    
    
    #设置rd_kern的参数
    #设置ES:BX参数
    movw    $KERNEL_START_SEGMENT, %ax
    movw    %ax,    %es        # es = 0x7e0
    xorw    %bx,    %bx        # bx = 0x0,  es:bx = 0x7e00

    #读取的起始扇区号(逻辑扇区起始扇区号是0)
    movw    $0x1,   %si        # si = 0x1 ,是rd_sect的参数
    
    #读取1400个扇区,共700K
    movw    $KER
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值