:“16337233王凯祺实验三1”指的是一个关于操作系统内核开发的实验报告,作者是王凯祺,实验编号为16337233。 :实验的目标是掌握引导操作系统内核、C与汇编语言的交叉调用以及汇编程序与C程序的链接方法。实验要求编写一个引导程序来加载操作系统内核,并设计一个内核,可以处理多个用户程序。内核分为汇编模块和C模块,C模块需要实现的功能包括管理用户程序的存储信息、显示程序信息以及执行用户程序的命令机制。 【部分内容】:实验者使用NASM编写引导程序,TASM和TCC编写操作系统内核。在引导程序中,通过设置段寄存器确保数据段DS正确设置,以便访问内核数据。内核部分,汇编代码负责设置数据段、链接到C程序的入口点。实验者遇到了数据段访问问题,通过调整段值和偏移量解决了问题。 **知识点详解:** 1. **引导程序设计**: - BIOS加载:引导程序通常由BIOS加载到内存的特定地址0:7C00h开始执行。 - 段寄存器设置:在实模式下,CPU通过段寄存器和偏移地址访问内存,如CS(代码段)、DS(数据段)、ES(附加段)和SS(堆栈段)。 - 读扇区到内存:使用INT 13H中断调用来从磁盘读取扇区到指定内存地址,涉及AH功能号、AL扇区数、DL驱动器号等参数。 2. **交叉调用C与汇编**: - `extrn`声明:在汇编程序中,`extrn _main:near`声明了一个名为_main的C程序函数,表明它在其他模块中定义。 - 段组织:`_TEXT`段用于存放代码,`_DATA`段用于初始化的数据,`_BSS`段用于未初始化的数据。 3. **内存布局**: - 内核加载位置:操作系统内核被加载到0xA100H地址。 - 数据段设置:通过`mov ax, 0a00h`和`mov ds, ax`将数据段设置为0A00H,以确保内核数据的正确访问。 4. **汇编程序设计**: - 段寄存器的使用:`mov ax, cs`和`mov ds, ax`用于将代码段CS的值复制到数据段DS,确保段值相同。 - 程序流程控制:`jmp OffSetOfUserPrg1`跳转到内核的入口点开始执行。 5. **C程序接口**: - C模块在汇编程序中通过`call near ptr _main`调用,这表示调用名为_main的C函数作为内核的入口点。 6. **错误调试**: - 段值和偏移量的校正:通过检查和调整段值和偏移量,解决了无法访问内核数据段的问题,例如,设置DS为0A00H使得数据段能够正确访问。 这个实验不仅涵盖了操作系统基础的引导加载过程,还涉及了汇编语言与C语言的交互,以及内存管理和程序执行的细节,对于理解操作系统的基本原理和实践操作具有重要意义。
剩余12页未读,继续阅读
- 粉丝: 32
- 资源: 347
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0