上个学期,看到于渊的《自己动手写操作系统》,所以一下来兴趣借来看看。由于需要汇编基础,故本人又借来王爽的《汇编语言》看,开始看的是清华大学那本《IBM-PC汇编语言》发现一点也不适合新手入门。王爽这本书很平易近人,通俗易懂。由于本人最终目标是自己实现一个小型的操作系统或者叫shell,由于基础问题,遇到问题是在所难免的,是不是我学习进度太跨越的,但今年会有‘计算机组成原理’这门课,正好和汇编相辅相成。现贴出一些小问题,我知道这些问题很低级,网上随便一搜就可以搜到,但希望诸位大侠给予一下指点。
1.《自己动手写操作系统》第三章有一个从实模式进入保护模式的例子。通过实模式16位的段跳入保护模式下32位的段,但为什么在16位的段用到得一个32位eax这个寄存器,我用MS-DOS下debug发现它里面只能显示16寄存器,没错调试根本没有跳入保护模式就结束的。在MS-DOS下敲pmtest.com运行很快闪屏就没了,明明后面有个jmp $死循环。
代码如下:
。。。。
[SECTION .s16]
[BITS 16]
LABEL_BEGIN:
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0100h
; 初始化 32 位代码段描述符
xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word [LABEL_DESC_CODE32 + 2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32 + 4], al
mov byte [LABEL_DESC_CODE32 + 7], ah
。。。。。
2.这里不能插图,电子版本《自己。。》144,讲FAT12文件格式时,有个FLOWER.text该文件由30个单词flower组成,文件大小应该为30*6个字节,而《自己动手写。。》该书的贴图中文件头最后表示文件大小的值为0x00000724这怎么回事?
另外,若有朋友对操作系统感兴趣,现在也在看《自己写操作系统》这本书的,可以一起相互学习...
------解决方案--------------------------------------------------------
纯dos才可以。CMD命令提示符是不行的。
------解决方案--------------------------------------------------------
MS-DOS下的Debug是不支持32位的
建议楼主可以装一个vmplayer,这个软件是免费使用的。然后在上面装一个DOS6 或者 DOS7。
于渊已经出了一本新书叫做《Orange'S:一个操作系统的实现》,这本书使用的环境已经改为了Linux。
而且介绍了使用bochs工具进行debug的方法,你可以参考这个链接http://www.osfromscratch.org/。
------解决方案--------------------------------------------------------
我建了一个群,一个操作系统的实现(146026798),有意者请加,一起讨论比独自研究学习的会快些哦,呵呵