西北工业大学操作系统实验实验报告
一、实验目的
熟悉GeekOS实验环境。
二、实验要求
编译运行操作系统的启动代码。
三、实验过程及结果
1、编写第一个“操作系统”,代码如下:
org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,00aeh
mov dl,0
int 10h
ret
BootMessage: db "hello,OS world!"
times 510-($-$$) db 0
dw 0xaa55
结果如图:
修改boot.asm,修改文字颜色,代码如下:
org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,00aeh //在此处修改BL的值,可以修改颜色mov dl,0
int 10h
ret
BootMessage: db "hello,OS world! "
times 510-($-$$) db 0
dw 0xaa55
结果如图:
2.在bochs中运行geek OS,结果如图:
四、实验分析
思考:引导扇区的标志是0x55AA,为何代码中写入的却是dw 0xAA55?
答:因为存储时低位在前,高位在后,所以代码中高低位反过来写。
五、所遇问题及解决方法
答:实验过程中,最大的困难就是理解geek OS的代码。
一个原因是我们没有学过有关汇编的知识,导致代码中有关汇编的部分一头雾水,难以理解;另一方面是之前自己接触的源码比较少,第一次见到geek OS这么大的工程代码,感觉理解起来很困难,不过,在老师花费了几个小时的讲解下,我最终还是勉强理解了一部分。
这次实验收获有很多,首先是在老师的帮助下掌握了一些有关汇编语言的知识,让我对硬件的一些操作有了初步的了解;其次是初步阅读geek OS源码之后,我对一些系统底层的实现有了更深的了解,让我对操作系统的基本原理和实现方式有了更直观的认识。