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章


浙公网安备 33010602011771号