x86汇编语言——程序动态加载

内核

此处的内核并非操作系统内核,而是用于加载用户程序的程序

内核分为四个部分,分别是初始化代码、内核代码段、内核数据段和内核例程段,主引导
程序也是初始化代码的组成部分。

基本逻辑

计算机首先从主引导程序开始执行,主引导程序负责加载内核,并转交控制权。然后,内核负责加载用户程序,并提供各种例程给用户程序调用。

  • 引导扇区仍然负责初始化,创建保护模式前的段描述符,创建内核段描述符,切换保护模式,并跳转到内核执行
    -在这里插入图片描述

  • 内核将引导扇区的逻辑再次做一遍,将用户程序加载到指定内存地址,创建用户程序的段描述符,回写用户程序使用到的公用例程地址,跳转到用户程序执行

  • 用户程序执行完毕后,执行TerminateProgram例程返回内核中

;内核头部
;以下常量定义部分。内核的大部分内容都应当固定 
         core_code_seg_sel     equ  0x38    ;内核代码段选择子
         core_data_seg_sel     equ  0x30    ;内核数据段选择子 
         sys_routine_seg_sel   equ  0x28    ;系统公共例程代码段的选择子 
         video_ram_seg_sel     equ  0x20    ;视频显示缓冲区的段选择子
         core_stack_seg_sel    equ  0x18    ;内核堆栈段选择子
         mem_0_4_gb_seg_sel    equ  0x08    ;整个0-4GB内存的段的选择子

;-------------------------------------------------------------------------------
         ;以下是系统核心的头部,用于加载核心程序 
         core_length      dd core_end       ;核心程序总长度#00

         sys_routine_seg  dd section.sys_routine.start
                                            ;系统公用例程段位置#04

         core_data_seg    dd section.core_data.start
                                            ;核心数据段位置#08

         core_code_seg    dd section.core_code.start
                                            ;核心代码段位置#0c


         core_entry       dd start          ;核心代码段入口点#10
                          dw core_code_seg_sel

;===============================================================================
         [bits 32]

参考
x86汇编语言:从实模式到保护模式,第13章

posted @ 2021-09-29 09:32  zhaojie10  阅读(9)  评论(0)    收藏  举报  来源