没有合适的资源?快使用搜索试试~ 我知道了~
lab4-19335074 -黄玟瑜1
需积分: 0 4 下载量 175 浏览量
2022-08-04
17:06:06
上传
评论
收藏 1.17MB PDF 举报
温馨提示
试读
36页
本 科 生 实 验 报 告实验课程中山大学 2021 学年春季操作系统课程实验名称中断专业名称计算机科学与技术(超算)学生姓名黄玟瑜学生学号任课教师陈鹏飞实验地
资源详情
资源评论
资源推荐
本 科 生 实 验 报 告
实验课程 中山大学 2021 学年春季操作系统课程
实验名称 中断
专业名称 计算机科学与技术(超算)
学生姓名 黄玟瑜
学生学号 19335074
任课教师 陈鹏飞
实验地点
实验成绩
二〇二一年四月十一日
目录
1 混合编程的基本思路 1
1.1
复现
Example 1
:混合编程
. . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 关键代码解释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 使用 C/C++ 来编写内核 7
2.1
复现
Example 2
:内核的加载
. . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.3 run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.4 src . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 输出学号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 中断的处理 16
3.1 复现 Example 3:初始化 IDT . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 修改中断处理函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4 时钟中断 23
4.1 复现 Example 4:8259A 编程 . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 时钟中断处理程序:跑马灯显示学号 . . . . . . . . . . . . . . . . . . . . 31
Assignment 1: 混合编程的基本思路
复现 Example 1,结合具体的代码说明 C 代码调用汇编函数的语法和汇编代码调
用 C 函数的语法。例如,结合代码说明 global、extern 关键字的作用,为什么 C++ 的
函数前需要加上 extern ”C” 等,结果截图并说说你是怎么做的。同时,学习 make 的使
用,并用 make 来构建 Example 1,结果截图并说说你是怎么做的。
1.1 复现 Example 1:混合编程
我们需要做的工作如下:
• 在文件 c_func.c 中定义 C 函数 function_from_C;
• 在文件 cpp_func.cpp 中定义 C++ 函数 function_from_CPP;
• 在文件 asm_func.asm 中定义汇编函数 function_from_asm,在 function_from_asm
中调用 function_from_C 和 function_from_CPP;
• 在文件
main.cpp
中调用汇编函数
function_from_asm
。
打开 VSCode,在主目录下新建文件夹 lab4,在 lab4 下新建文件夹 ex1。
在目录 ex1 下依次创建以下文件:
• c_func.c
• cpp_func.cpp
• asm_func.asm
• main.cpp
• Makele
我们首先在文件 c_func.c 中定义 C 函数 function_from_C
1
然后在文件 cpp_func.cpp 中定义 C++ 函数 function_from_CPP
接着在文件 asm_func.asm 中定义汇编函数 function_from_asm,在 func-
tion_from_asm 中调用 function_from_C 和 function_from_CPP
最后在文件 main.cpp 中调用汇编函数 function_from_asm
我们首先将这 4 个文件统一编译成可重定位文件即.o 文件,然后将这些.o 文件链
接成一个可执行文件,编译命令如下,将它们写到 Makele 中
2
其中,-f elf32 指定了 nasm 编译生成的文件格式是 ELF32 文件格式,ELF 文件
格式也就是 Linux 下的.o 文件的文件格式。
使用 make main.out 生成 main.out 文件并执行
1.2 关键代码解释
1 #include <ios tre am >
2
3 extern ”C” void function_from_CPP( ) {
4 std : : cout << ” This i s a fu n c t i on from C++.” << std : : endl ;
5 }
函数名前加上了 extern ”C”,加上 extern ”C” 后,会指示编译器这部分代码按 C
语言的进行编译,而不是 C++ 的,从而实现 C++ 代码调用其他 C 语言代码。
extern ”C” 的主要作用就是为了能够正确实现 C++ 代码调用其他 C
语言代码。加上 extern ”C” 后,会指示编译器这部分代码按 C 语言(而不
是 C++)的方式进行编译。由于 C++ 支持函数重载,因此编译器编译函数
3
剩余35页未读,继续阅读
IYA1738
- 粉丝: 23
- 资源: 270
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0