# OSLabs
使用NASM汇编以及C++(内嵌MASM)编写的实模式操作系统,以及一个汇编编写的QQ堂图形化游戏
## 前言
这是我大二下学期的操作系统课以及汇编课的实验项目,觉得做得比较有趣,所以就整理了一下。我花了比较多的时间做这两门课程的实验,我还挖了一个大坑,用16位NASM+32位G++编写操作系统,遇到的问题实在太多了。可以举一个比较奇怪的Bug: [kernel.asm](lab8/source/kernel.asm)的第400行,当时的NASM如果不加上nop语句,就会丢失之后的一条pop语句。我想把我的解决方法分享出来。
同时也感谢教我这两门课程的凌应标老师!谢谢!
有什么问题欢迎Issue,我一定会回答的:-)
## 实验特色
NASM汇编(16位) + g++(32位,内嵌MASM)编写的*实模式*操作系统,以及NASM汇编(16位) + gcc(32位)编写的实模式图形化游戏。
坑点在于如何解决16位NASM与32位g++的兼容问题,比如:
由于32位g++生成的栈操作汇编指令是32位的,必须将C++的函数参数放在寄存器中;如果要用C++实现中断功能,需要在C++中使用内嵌汇编进行栈操作命令调整。
## 内容说明
### lab1 接管裸机的控制权
设计IBM_PC的一个引导扇区程序,程序功能是:用字符‘A’从屏幕左边某行位置45度角下斜射出,保持一个可观察的适当速度直线运动,碰到屏幕的边后产生反射,改变方向运动,如此类推,不断运动;在此基础上,增加你的个性扩展,如同时控制两个运动的轨迹,或炫酷动态变色,个性画面,如此等等,自由不限。还要在屏幕某个区域特别的方式显示你的学号姓名等个人信息。将这个程序的机器码放进放进第三张虚拟软盘的首扇区,并用此软盘引导你的XXXPC,直到成功。
![](lab1/pic/frame.png)
### lab2 加载用户程序的监控系统
设计四个(或更多)有输出的用户可执行程序
设计四个有输出的用户可执行程序,分别在屏幕1/4区域动态输出字符,如将用字符‘A’从屏幕左边某行位置45度角下斜射出,保持一个可观察的适当速度直线运动,碰到屏幕相应1/4区域的边后产生反射,改变方向运动,如此类推,不断运动;在此基础上,增加你的个性扩展,如同时控制两个运动的轨迹,或炫酷动态变色,个性画面,如此等等,自由不限。还要在屏幕某个区域特别的方式显示你的学号姓名等个人信息。
![](lab2/report/3.png)
### lab3 用 C 和汇编实现操作系统内核
1. 该系统为分时系统,同时支持批处理
2. 在内存允许下, 该分时系统支持动态创建进程
3. 可以根据进程的 ID 值杀死进程, 也可以一次杀死全部进程
4. 有良好的控制台界面, 方便的命令行, 用户界面切换方式
5. 支持检查指令, 判断正确性
6. 使用了 g++ 和 nasm 交叉编译, 运行的环境为 16 进制实模式
7. 使用了 C++ 内嵌汇编(MASM)
8. 支持函数互调
![](lab3/pic/2.png)
![](lab3/pic/4.png)
### lab4 在 FAT12盘结构中引导操作系统
1. 另建一个段, 专门存放 PCB, 分时系统管理的进程数可达16个!
理论上, 最大进程数为: 0xFFFF / PCBSize 向下取整.
同一程序可以有多个进程.
2. 自行创建 int 20h 中断, 模拟 DOS 从用户程序返回 Shell
3. 使用内嵌汇编 + C++结构比较完美读取 BPB, EBPB 信息
4. 使用 C++结合内嵌汇编加载用户程序
5. 模拟 Linux Shell, 如输入 ls 命令后, 在当前的命令行窗口输出对应信息
6. 同时支持分时运行与批处理运行
7. 良好的 C++ IO 接口, 可以10进制, 16进制输出
8. 基本解决了 gcc + nasm 交叉编译的问题, 能够很容易编写 C++程序.
9. 从磁盘加载文件时,可以指定段地址和偏移量
![](lab4/pic/ls.png)
![](lab4/pic/bpb.png)
![](lab4/pic/bs.png)
### lab5 中断机制编程技术
1. 实现进程的多个状态: 就绪态, 运行态, 挂起态, 阻塞态, 终止态,能方便地完成有效状态的切换
2. PCB 表基本完全由 C++管理
3. 实现了 top 指令, 能够显示全部进程及其详细信息
4. 能够通过用户指令唤醒, 挂起, 结束单个进程
5. 实现 int 20h 中断, 可以在用户程序中调用此中断, 结束该程序, 返回 Shell,不会影响其他程序.
6. 实现 clock()函数, 使计时精确到秒.
7. 支持用户指令调用中断(有权限管理)
8. 使用了加锁机制管理共享变量.
9. 实现了 fork()函数
10. 使用端口机制实现了进程间的通信,并且带有信号量
11. 32 位 G++与 16 位 NASM 交叉编译时中断处理程序的实现
![](lab5/pic/54.png)
![](lab5/pic/51.png)
### lab6 多进程和多线程模型
1. 多线程模型的实现: thread_create, thread_join
2. 进程优先级的实现
3. 正确的 fork()函数(更正返回值了)
4. 进程通信(在上一个实验中已实现, 这里再提一下)
5. 中断分支使用跳转表
![](lab6/pic/1.png)
![](lab6/pic/2.png)
![](lab6/pic/3.png)
### lab7 信号量与动态内存管理
1. 信号量的实现 semWait(P 操作), semWait(V 操作)
2. 信号量的手动与自动释放机制
3. 动态内存管理(内核为用户程序申请释放内存空间, 用户程序内部申请释放内存资源(实现了 C++的 new 和 delete) )
4. 完善了 C++实现中断程序的机制
![](lab7/pic/1.png)
![](lab7/pic/2.png)
### lab8 多终端、文件读写与操作
1. 实现了多用户(终端)
2. 实现了文件读写(open, write, read, seekp, seekg)
3. 实现了文件操作(rm,cp,mv)
![](lab8/pic/1.png)
![](lab8/pic/2.png)
![](lab8/pic/3.png)
## 欢乐QQ堂汇编版
实现了汇编版的 QQ 堂,使用了 VGA 320x200 256 色视频显示, FAT12 文件系统、时钟中断,nasm + gcc 联合编译,通过端口设置调色板。其中除了 AI,游戏界面、逻辑等均由汇编实现。游戏具有良好的图形界面,流畅的操作性,令人愉快的玩法,并且有AI与你作战!
![](game/pic/title2.png)
![](game/pic/2.png)
![](game/pic/3.png)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备
资源推荐
资源详情
资源评论
收起资源包目录
使用NASM汇编以及C++(内嵌MASM)编写的实模式操作系统,以及一个汇编编写的QQ堂图形化游戏.zip (274个子文件)
title.asm 374KB
mappic.asm 200KB
boss.asm 152KB
huoying.asm 152KB
people.asm 24KB
kernel.asm 24KB
win.asm 14KB
lose.asm 14KB
power.asm 14KB
loadknl.asm 13KB
loadknl.asm 13KB
loadknl.asm 13KB
loadknl.asm 13KB
loadknl.asm 13KB
kernel.asm 11KB
kernel.asm 11KB
disk.asm 10KB
kernel.asm 10KB
football.asm 8KB
kernel.asm 7KB
kernel.asm 6KB
keyboard.asm 5KB
box.asm 4KB
box.asm 4KB
box.asm 4KB
14348134os.asm 3KB
wkcn4.asm 3KB
wkcn2.asm 3KB
wkcn4.asm 3KB
wkcn2.asm 3KB
wkcn4.asm 3KB
wkcn2.asm 3KB
wkcn4.asm 3KB
wkcn2.asm 3KB
wkcn4.asm 3KB
wkcn2.asm 3KB
wkcn4.asm 3KB
wkcn2.asm 3KB
wkcn1.asm 2KB
wkcn3.asm 2KB
wkcn1.asm 2KB
wkcn1.asm 2KB
wkcn1.asm 2KB
wkcn1.asm 2KB
wkcn1.asm 2KB
wkcn3.asm 2KB
wkcn3.asm 2KB
wkcn3.asm 2KB
wkcn3.asm 2KB
wkcn3.asm 2KB
wkcn.asm 2KB
wkcn.asm 2KB
wkcn.asm 2KB
kan.asm 2KB
kan.asm 2KB
kan.asm 2KB
kan.asm 2KB
kan.asm 2KB
toShirley.asm 2KB
map0.asm 1KB
map3.asm 826B
loader.asm 769B
color.asm 313B
rand.asm 276B
header.asm 266B
header.asm 261B
header.asm 236B
header.asm 205B
inttest.asm 66B
testint.asm 66B
bochsrc.bxrc 56KB
bochsrc.bxrc 56KB
bochsrc.bxrc 56KB
bochsrc.bxrc 56KB
bochsrc.bxrc 56KB
bochsrc.bxrc 56KB
ai.c 4KB
counter 12KB
counter 12KB
shell.cpp 14KB
os.cpp 13KB
os.cpp 10KB
os.cpp 7KB
os.cpp 6KB
os.cpp 6KB
bpb.cpp 3KB
bpb.cpp 3KB
bpb.cpp 3KB
bpb.cpp 3KB
mem.cpp 3KB
ls.cpp 3KB
ls.cpp 3KB
ls.cpp 3KB
ls.cpp 2KB
key.cpp 2KB
key.cpp 1KB
key.cpp 1KB
key.cpp 1KB
readfat12.cpp 1KB
fruit.cpp 1KB
共 274 条
- 1
- 2
- 3
资源评论
普通网友
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 第一章内容有关源码(Bayesian Analysis with Python 3rd Edition)
- X-Anylabeling 数据标注工具
- 基于matlab实现的声纹识别功能完整项目代码.zip
- Python基础学习-02转义、输入、函数
- cisco AP 3600系列 Recovery 包
- 基于stm32的智能家居系统设计+答辩ppt和论文资料+完整源代码(高分毕设)
- 基于jetsonagxorin-linux的opencv的相机测试仓库
- m3u8下载器 下载M3U8格式的视频
- 项目名称:大学食堂人事管理系统 软件环境:intellij IDEA + maven + SpringBoot+ mybati
- 基于C++的可跨平台(主要针对win平台)的支持多线程的分布式缓存,兼容redis command,目前正在开发中
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功