自己编写操作系统的笔记7
2009-04-17 18:09
148 查看
时隔如此多天,终于有了新进展。前两天不是一直不能正确输出吗?今天终于弄明白了,原来在gdt计算地址的时候ds没有指向gdt的段。就这么简单,居然耗费了如此长的时间,不得不说我对于dos下的debug还是不了解这回还是请出了turbo debugger,通过下边实时更新的数据才发现了这个简单的错误。可是现有的debugger都在lgdt的时候瞬间down掉,之后的调试该怎么办?又不是在dos虚拟机上运行,boch没有一点用,其它的又不能用……据说用一个微软的ice可以,今晚回去试一试。
此外有些错误就不能称之为错误。保护模式的程序在dos710是不能运行的,而手边没有dos622,最后用dosbox才能看到结果。关于veido的描述符也试验了很久,80x86上边基地址是0,偏移是b8000h。自己动手写操作系统的应该是VIDEOBUFF DESCRIPTOR <0FFFFH,08000H,0BH,0F00H+ATDW,0>,这个应该是正确的,事实证明也是正确的。
另外还看到一个人用的是VIDEOBUFF DESCRIPTOR <0FFFFH,0b800H,0,0F00H+ATDW,0>,居然也输出了让人丈二和尚摸不着头脑了。
老惯例,代码放上:
今晚还要继续奋斗!
此外有些错误就不能称之为错误。保护模式的程序在dos710是不能运行的,而手边没有dos622,最后用dosbox才能看到结果。关于veido的描述符也试验了很久,80x86上边基地址是0,偏移是b8000h。自己动手写操作系统的应该是VIDEOBUFF DESCRIPTOR <0FFFFH,08000H,0BH,0F00H+ATDW,0>,这个应该是正确的,事实证明也是正确的。
另外还看到一个人用的是VIDEOBUFF DESCRIPTOR <0FFFFH,0b800H,0,0F00H+ATDW,0>,居然也输出了让人丈二和尚摸不着头脑了。
老惯例,代码放上:
Title Example.asm ;功能:演示任务内无特权级变换的转移 INCLUDE 386scd.lib .386P GDTSEG SEGMENT PARA USE32 'GDT' ;全局描述符表数据段(32位) GDT LABEL BYTE ;全局描述符表 DUMMY DESCRIPTOR <0,0,0,0,0> ;空描述符 NORMAL DESCRIPTOR <0FFFFH,0,0,ATDW,0> ;规范段描述符 NORMAL_SEL =NORMAL-GDT CODEP DESCRIPTOR <0FFFFH,0,0,ATCE,0> ;代码段k的描述符 CODEP_SEL =CODEP-GDT VIDEOBUFF DESCRIPTOR <0FFFFH,08000H,0BH,0F00H+ATDW,0> VIDEO_SEL =VIDEOBUFF-GDT GDTLEN =$-GDT ;全局描述符表长度 VGDTR PDESC <GDTLEN-1,> GDTSEG ENDS RCODESEG SEGMENT PARA USE16 ASSUME CS:RCODESEG START: ASSUME DS:GDTSEG MOV AX,GDTSEG MOV DS,AX MOV BX,16 MOV AX,RCODESEG MUL BX MOV CODEP.BASEL,AX MOV CODEP.BASEM,DL MOV CODEP.BASEH,DH MOV AX,GDTSEG MUL BX MOV WORD PTR VGDTR.BASE,AX MOV WORD PTR VGDTR.BASE+2,DX CLD LGDT FWORD PTR VGDTR CLI in al,92h or al,00000010b out 92h,al MOV EAX,CR0 OR EAX,1 MOV CR0,EAX JUMP16 <CODEP_SEL>,<OFFSET PROTECT> PROTECT: MOV AX,VIDEO_SEL MOV GS,AX MOV EDI,(80*10+0)*2 MOV AH,0CH MOV AL,'P' MOV GS:[EDI],AX JMP $ RCODESEG ENDS END START
今晚还要继续奋斗!
相关文章推荐
- 自己编写操作系统的笔记5
- 自己编写操作系统的笔记6
- 自己编写操作系统的笔记3
- 《自己动手编写操作系统》笔记
- 自己编写操作系统的笔记1
- 自己编写操作系统的笔记2
- 自己编写操作系统的笔记4
- 自己写操作系统 笔记1
- IOS开发笔记 (3)---objective c 自己编写测试示例
- 【学习笔记】自己动手写操作系统--pmtest3
- 《30天编写自己的操作系统》 关于如何让虚拟机从U盘启动
- 【学习笔记】自己动手写操作系统--pmtest1
- 遗传算法与直接搜索工具箱学习笔记 二-----编写自己的目标函数
- 自己动手写操作系统--笔记之安装DOS
- 自己动手写操作系统之第一部分笔记
- 操作系统编写视频教程(自己写操作系统)
- 自己动手写操作系统 笔记
- 自己动手编写操作系统
- Servlet学习笔记(七)—— 自己定义过滤器的编写改进:自己定义实现FilterChain
- 【学习笔记】自己动手写操作系统——pmtest2