30天自制操作系统日志第5天.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验日志 学号 520 姓名 甘昆禄 专业年级班级 智能1601 实验日期 实验项目 第5天:结构体、文字显示与 GDT/IDT初始化 、实验主要内容 1、接收启动信息和结构体 在上一章中,xsize和ysize的值都是直接赋值为320*200,但实际上我们需要从先前保 存下来的值中去。即: 匚YL5 EQU OjcOffO H LEDS EQU OjcOff 1 VMODE EQC QxOffS 1 5CRNX a SCRNY OxOffc ■ VkAM 5QU OJtOfta ■ ORG ■ ;画面七一F HOV ALr Gx.^3 INT uxlO MQV 〔VMOI■唱] rS ,? MOV WORD :SCRNX] ,320 MOV W^RD [5CRNY] r200 MOV DWORD [ VRA14] r lx. 不然的话,当画面模式改变时系统就不能正确运行。所以试着用指针取得图像模式: void HariMa in(v oid) { char *vram; int xsize, ysize; short *bi nfo_scrnx, *bi nfo_scrny; int *bi nfo_vram; ini t_palette(); /* ini t_palette(); /* 设定调色板*/ 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 *) *bi nfo_vram; for(;;) {io_hlt(); /* for(;;) { io_hlt(); /* 執行n askfu nc里的」o_hlt*/ } 诶这样是不是说就可以改变画面模式了于是天真的我: MOV 0X12 MOV AH,jxGO INT 0x10 MOV BYTE [VMOm MOT WORD [吕匚ECQC]# 总40 MOV WORD [SCRNY],480 保存运行一下,以为画面会显示坐标在左上角的 320*200,结果发现画面显示错误,forget about it 。诶然后发现结构体里这个在汇编里没有定义,可能作者以后讲 ;BOOT__INFO関嚓CYLSEQU0x01fO ;BOOT_ _INFO関嚓 CYLS EQU 0x01fO LEDS ECU OlOff ■-T-50EE ECU 0t0^f2 —, SCRNX ECU QQfL 弓 SCRMY EOU OxOffC 廿RAM EQU OzOffa ORG 0xc200 哦先说结构体 B 37 38 39 struct BOOTINFO char cylsj short scrnx char *viram; { / leds^ vmode,|j reserve^ ,scrny; 41 可以看做结构体是将一堆变量集中声明,然后作为新的变量用于其他场合 结构体的运用: 先声明结构体: 如上图 后定义结构体变量: struct BOOTINFOabc;或者定义结构体指针变量: struct BOOTINFO*binfo; 这里binfo 表示指针变量后应该首先给指针赋值,可写成: Binfo = (struct BOOTINFP *)OxOffO; 加上(struct BOOTINFP *) 是对数字进行强制类型转换,告诉编 译器这个数字是一个BOOTINF类型的指针变量。 info指针指向地址0x0ff0是结构体的起始地址,结构体内的地址则依次按其类型增加。 所以可以不用直接使用内存地址,而是使用*binfo来表示这个内存地址上12个字节的结构体。 在表示结构体内变量的时候,使用“.”表示:xsize = (*binfo).scrnx; 因为binfo是指向结构体地址的指针变量,它表示其内部变量的形式很多,可以用箭头表 示: Xsieze = binfo-scrnx ,或者用 binfo-scrnx 直接代替 xsize 2、显示字符 终于到写字了,诶果然有定义好的哪个字母让具体哪个像素指定颜色, 比如A的显示如下:00011000000110000 0 II 0 0 1 000 0 10 0 1 0 0 0111111 0 1 11111 0 0 1 0 0 0 0 II 0 0 1 0 0 0 01 0 0 1 0 0 001 0 1 1 10011 100000000 用 8x16 的长方形像素点阵来

文档评论(0)

dingfulaowang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档