




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验日志学号520姓名甘昆禄专业年级班级智能1601实验日期实验项目第5天:结构体、文字显示与 GDT/IDT初始化、实验主要内容1、接收启动信息和结构体在上一章中,xsize和ysize的值都是直接赋值为320*200,但实际上我们需要从先前保 存下来的值中去。即:匚YL5EQUOjcOffOHLEDSEQUOjcOff 1VMODEEQCQxOffS15CRNXaSCRNYOxOffcVkAM5QUOJtOftaORG;画面七一FHOVALr Gx.3INTuxlOMQVVMOI唱rS ,MOVWORD :SCRNX,320MOVWRD 5CRNYr200MOVDWORD VRA1
2、4r lx.不然的话,当画面模式改变时系统就不能正确运行。所以试着用指针取得图像模式:void HariMa in(v oid)char *vram;int xsize, ysize;short *bi nfo_scrnx, *bi nfo_scrny;int *bi nfo_vram;bin fo_scrnx = (short *) 0x0ff4;bin fo_scrny = (short *) 0x0ff6;bin fo_vram = (int *) 0x0ff8;xsize = *bin fo_scr nx;ysize = *bin fo_scr ny;vram = (char *) *
3、bi nfo_vram;for(;) io_hlt(); /*執行n askfu nc里的o_hlt*/诶这样是不是说就可以改变画面模式了于是天真的我:MOV0X12MOVAH,jxGOINT0x10MOVBYTE VMOmMOTWORD 吕匚ECQC# 总40MOVWORD SCRNY,480保存运行一下,以为画面会显示坐标在左上角的 320*200,结果发现画面显示错误,forgetabout it 。诶然后发现结构体里这个在汇编里没有定义,可能作者以后讲;BOOT_INFO関嚓CYLSEQU0x01fOLEDSECUOlOff-T-50EEECU0t0f2,SCRNXECUQQfL 弓S
4、CRMYEOUOxOffC廿RAMEQUOzOffaORG0xc200哦先说结构体36 B373839struct BOOTINFO char cylsj short scrnx char *viram;41 /leds vmode,|j reserve ,scrny;可以看做结构体是将一堆变量集中声明,然后作为新的变量用于其他场合结构体的运用:(1) 先声明结构体:如上图(2) 后定义结构体变量:struct BOOTINFOabc;或者定义结构体指针变量:structBOOTINFO*binfo; 这里binfo 表示指针变量后应该首先给指针赋值,可写成:Binfo =(struct BO
5、OTINFP *)OxOffO; 加上(struct BOOTINFP *) 是对数字进行强制类型转换,告诉编 译器这个数字是一个BOOTINF类型的指针变量。info指针指向地址0x0ff0是结构体的起始地址,结构体内的地址则依次按其类型增加。 所以可以不用直接使用内存地址,而是使用*binfo来表示这个内存地址上12个字节的结构体。在表示结构体内变量的时候,使用“.”表示:xsize = (*binfo).scrnx;因为binfo是指向结构体地址的指针变量,它表示其内部变量的形式很多,可以用箭头表 示: Xsieze = binfo-scrnx,或者用 binfo-scrnx 直接代替
6、xsize2、显示字符终于到写字了,诶果然有定义好的哪个字母让具体哪个像素指定颜色,比如A的显示如下:00000000 00011000 00011000 00011000 00011000 0 0 II 0 0 10000100100 0 0 10 0 10 001111110010 0 0 0 II0010 0 0 010010 0 001011100111000000000000000000100100用 8x16 的长方形像素点阵来表示, 8 位是一个字节, 1 个字符是 16 个字节,然后将字体主句写入主程序:static char font_A16 = 0x00, 0x18, 0x
7、18, 0x18, 0x18, 0x24, 0x24, 0x24,0x24, 0x7e, 0x42, 0x42, 0x42, 0xe7, 0x00, 0x00;程序里就会有A的信息了,当然放在程序里总是不好的,后面就有改了。显示字符的函数是这样:void putfont8(char *vram, int xsize, int x, int y, char c, char *font)int i;char *p, d;/* data */for (i = 0; i vram, bi nfo-scrnx, 30, 30, COL8_FFFFFF, HariboteOS.);for(;) io_hl
8、t(); /*執行 naskfunc 里的 _io_hlt*/这里调用了三次,后面两次先显示的黑色,再在不同但临近坐标显示一次白色,达到 立体效果。效果如下:di QEMUABC 123Haribote OS.然后这里作者说,要自制操作系统,现在就能自由显示变量很重要。因为这里没用 debug可以用,如果出现错误就会很麻烦,就迫切需要知道变量有没有弄错。这里用到一 个sprintf函数。sprintf 函数和printf函数的区别在于它不是按指定格式输出,只是将 输出内容作为字符串卸载内存中。sprintf函数的使用办法是:sprintf (地址,格式,值,值,值,)这里的地址指定所生成字符串
9、的存放地址。格式基本上只是单纯的字符串,如果有%的这类标记,就置换成后面的值的内容。除了d(将数值作为十进制数转化为字符串)还有%s %x(将数值作为十六进制转化为字符串)等符号。这里看来,spri ntf 函数的效果不过是将相应格式的内容存到相应地址罢了,要显示 输出还是靠putfont8 。3、显示鼠标指针显示指针跟显示字符思路一样,也是先准备16*16=256字节的内存,然后往里面写入指针的数据。将这个程序写在函数里面:*OOOOOOOOOO*,*OOOOOOOOO*,*OOOOOOOO*,*OOOOOOO*,*OOOOOOO*,*OOOOOOOO*,*OOOO*OOO*,*OOO*.*
10、OOO*,*OO*.*OOO*.*O*.*OOO*.,*.*OOO*.,*.*OOO*,II.*OO*,II.*; int x, y;for (y = 0; y 16; y+) for (x = 0; x 16; x+) if (cursoryx = *) mousey * 16 + x = COL8_000000;if (cursoryx = O) mousey * 16 + x = COL8_FFFFFF;mousey * 16 + x = bc;return; 课本说什么要将上面背景色显示出来,还要做下面这个函数,搞得我差点误解,看了 半天,这个不就是将整个鼠标显示出来吗。这里分开的合理
11、之处我猜应该是方便以后鼠标 所到之处颜色的改变。void putblock8_8(char *vram, int vxsize, int pxsize,int pysize, int px0, int py0, char *buf, int bxsize)int x, y;for (y = 0; y pysize; y+) for (x = 0; x vram, binfo-scrnx, binfo-scrny);/ 2;mx(bi nfo-scrnx16)2. 段的起始地址在哪里3. 段的管理属性(禁止写入,禁止执行,系统专用等)CPU用8个字节的数据来表示这些信息。但是,用于指定段的寄存器
12、只有16位。魔方 图像调色板的做法:现有一个段号,存放在段寄存器里,然后预先设定好段号与段的对应 关系。段寄存器低三位不能用,能够处理的就只有位于08191的区域。因为能够使用08191的范围,即可以定义 8191个段,设定这么多段就需要8192x8=65536字节(64KB。这 64KB的数据就称为 GDT “global ( segment) description table ”的缩写,意思是全局短号记录表。将这些数据整齐地排列在内存的某个地方, 然后 将内存的起始地址和有效设定个数房子啊 CPU内被称作GDTR勺特殊寄存器中。IDT是“interruptdescription tabe
13、l ”的缩写,表示“中断记录表”,用来执行CPU的中断功能。各个设备有变化是就产生中断,中断发生后,CPU暂时停止正在处理的任务, 保存现场,转而执行中断程序,执行完毕之后恢复现场。断号码与调用函数的对应关系,其设定方法与 GDT很相似。、遇到的问题及解决万法1、尝试更改画面模式失败。刚用结构体的时候说如果直接代入 320*200的值,改模式会错,然后我看用了结构体,直接引用存在汇编里的再改,失败了,目前没有找到原因::lude ,io_hlt(void)j:_/-Im叭Imiib忖WwihEil.if JF吴逊 E)S(N T旦住乔 0金筍齣I n i 11 九:阳日.帕引;HOTF&JCt
14、 JUUKUO20ICOUCEQUOCQMOMl-5KC7lGE2UQO:CTIL3中zo*roLEDSEQUQk01VMaK5LSOStZ3CRNXEQU0x0scrny); tfonts8_asc(binfOvram binfo-scrnx, 8*8COL8_FFFFFFjt*Qi 阿id pjtfantsSasc (eMr vram, int xsizev lmt x int y, char unsigned ctwr J殂tfonts8_asc(binfo-vramr binfOscrnXj 36 36j COL8_FFFFFFjABC i 123iii iHaribote OS.ni
15、t_palette(void)我的确是在字体里看见这个的,输出却是乱码:char 0x0c+*+.,札串*+要显示真没办法,只能逐个输出,这个字符对应0x0c即十进制12.hankaku + 1 ; hankaku + 2 * 16);hankaku + 12 * 16); hankaku + 64 16);hankaku + 125 16); hsnkaku + 246 * 16);init_scrn(binfa-vram, bin-fo-scrnxj binfo-scrny); putfont8(thinfq-vrair, binfo-scrnx, 3,呂# COLSFFFFFFj putfont3(binfo-vrarrf binfo-scrnxj 168, COLS FFFFFFj putfonts(binfo-vran, binfo-9crflx 24, S COL8_FFFFFFI wid puHcinitB (cher flvr0Hj int int 町 int ys. chr j ctwr *i-ipnit) 8 F F F F F F put-fontBfbino-vrarti, binfo-scrnKj 43, 8, COLS FFFFFF, putfont8(tinfq-vrair, bin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年江西省金溪县事业单位公开招聘医疗卫生岗笔试题带答案
- 2024年河北省文安县事业单位公开招聘医疗卫生岗笔试题带答案
- 2024初级注册安全工程师笔试考前冲刺必刷题附答案
- 2025机械设备租赁合同范本
- 2025销售代理合同范本
- 2025商业店铺转让合同范本(简易版)
- 新质生产力主导
- 2025年机械设备采购合同范本
- 2025年中级银行从业资格之中级公司信贷押题练习试题A卷含答案
- 人教版语文四年级上册《去年的树》教学设计
- 2025年杭州市高三语文二模作文题目“科技与相互理解”写作指导
- 第四届“魅力之光”知识竞赛初赛题库
- 《旅行社经营与管理》电子教案 5-3 旅行社接待业务3
- 2025年浙江路桥中国日用品商城股份有限公司招聘笔试参考题库附带答案详解
- 2025年三力测试题模板及答案
- 餐饮行业企业战略管理论文4000字范文
- 第37届(2020年)全国中学生物理竞赛预赛试题及参考解答
- 老年康体指导-职业教育-1740155892240
- DG-TG08-12-2024 普通中小学建设标准
- 2025年第六届美丽中国全国国家版图知识竞赛题(附答案)
- 五星级酒店餐饮部管理制度大全
评论
0/150
提交评论