汇编和c语言混合实现操作系统.doc

实验三 一、实验目的 1. 掌握TASM汇编语言与TURBO C语言汇合编程的方法。 2. 实现内核与引导程序分离,掌握软盘上引导操作系统方法。 3. 设计并实现一种简单的作业控制语言,建立具有较友好的控制命令的批处理原型操作系统,掌握操作系统提供用户界面和内部功能的实现方法。 二、实验内容 在实验二的基础上,进化你的原型操作系统,增加下列操作系统功能: (1)将原型操作系统分离为引导程序和MYOS内核,由引导程序加载内核; (2)内核由汇编语言kernal.asm和c语言kernal.c二个模块生成; (3)利用C语言实现作业控制语言mJCB,原型操作系统在当前行显示一个指示符(可以是简单的一个字符或你的学号之类),允许用户输入一行命令(回车结束,语法由你设计),操作系统解释命令并完成相应的功能(3个以上的内置功能,如time、date、asc等,而且能执行软盘上的某个用户程序),并在你的实验报告中详细介绍你的mJCB语言的语法格式和功能。 三、实验报告 1、涉及的基础知识和实验环境工具综述、你的解决方案包括程序算法原理或流程图、程序模块说明、变量定义与作用说明、数据结构组织等 实验环境工具综述: 本次试验环境为VMware9平台上搭建的8086虚拟机,编译器为tasm,tcc,链接器为tlink,通过Winhex剪辑2进制文件,并用DiskWriter工具将主程序写入虚拟软盘,通过虚拟机加载软盘实现裸机运行。 算法原理: 计算机启动后,通过引导扇区加载软盘上余下的有效扇区。 引导扇区安装必要的中断,如8号中断用以动态显示时间,21号中断用以用户程序的返回,设置栈指针,数据段指针,建立c语言运行环境,设置计数器,用以动态显示时间。配置完成后,转入基于c语言的控制程序的运行。 基于c语言的控制程序无限重复向输入端请求命令,解析命令,跳转调用对应程序,但接收到重启命令时重启,接到关机命令时进行关机。 系统总的实现为引导程序(osa.asm),汇编实现的c语言函数库(clib.asm),汇编实现的中断程序库(oslib.asm),c语言实现的控制台程序(osc.c)。 由于系统已搭建c语言运行环境,并提供了相应的库,再提供一个供用户用于链接c语言程序的启动程序,用户程序即可完全由c语言实现。启动程序指定用户程序的偏移(如c9000.asm指定了用户的c程序偏移为9000h,可更改启动程序中的org来更改目标程序的偏移),并能够返回控制台(通过调用自己安装的int 21H返回)。 程序模块说明: clib.asm中汇编实现的c函数库 extern char cls(); 功能:清屏,清空第0页的显存 输入:无 返回:无 extern int puts(const char * str); 功能:向当前光标位置输出字符串 输入:字符串首地址 返回:输出字符个数 extern char* gets(char* str); 功能:读取字符串 输入:字符串首地址 返回:字符串首地址 extern int strlen(const char *str); 功能:求以0结束的字符串的长度 输入:字符串首地址 返回:字符从长度 extern int getchar(void); 功能:读取字符 输入:无 返回:字符的ascii码 extern int putchar(int c); 功能:输出字符 输入:字符c 返回:字符c extern unsigned int port_in8(unsigned int port); 功能:从port端口读入8位数据 输入:端口号 返回:读取的数据 extern unsigned int port_in16(unsigned int port); 功能:从port端口读入16位数据 输入:端口号 返回:读取的数据 extern void port_out8(unsigned int port, unsigned int value); 功能:向port端口输出8位数据value 输入:端口号和数据 返回:无 extern void port_out16(unsigned int port, unsigned int value); 功能:从port端口输出16位数据value 输入:端口号和数据 返回:无 extern void setp_cursor(unsigned int bh, unsigned int dh, unsigned int dl); 功能:将第bh页的指针置于dh行dl列 输入:页号bh,行号dh,列号dl 返回:无 extern void run_pro(int ord); 功能:运行程序地址表中第or

文档评论(0)

1亿VIP精品文档

相关文档