操作系统实验之系统引导
知识引导:
实验目的:
-
目的一:完成对liunx1.0的bootset.s的改写,使操作系统启动时能够再屏幕上打印出一行字。
-
目的二:完成对liunx1.0的setup.s的改写,使操作系统启动时能够获取一个硬件参数,并显示到屏幕。
实验步骤:
-
修改bootset.s文件:
entry _start _start: ! 首先读入光标位置 mov ah,#0x03 xor bh,bh int 0x10 ! 显示字符串 “Hello OS world, my name is ZXH” ! 要显示的字符串长度 mov cx,#36 mov bx,#0x0007 mov bp,#msg1 mov ax,#0x07c0 mov es,ax mov ax,#0x1301 int 0x10 !设置一个无限循环 inf_loop: jmp inf_loop !msg1 处放置字符串 msg1: !回车+换行 .byte 13,10 .ascii "Hello OS world, my name is ZXH" !2对回车+换行 .byte 13,10,13,10 .org 510 boot_flag: ! 设置引导扇区标记 0xAA55 ! 必须有它,才能引导 .word 0xAA55
-
编译运行
-
使用下列命令编译和链接bootset.s
$ as86 -0 -a -o bootsect.o bootsect.s $ ld86 -0 -s -o bootsect bootsect.o
-
可以发现同级目录下多了一个bootsect 的文件大小是 544 字节,而引导程序必须要正好占用一个磁盘扇区,即 512 个字节。造成多了 32 个字节的原因是 ld86 产生的是 Minix 可执行文件格式,所以执行下列命令:
$ dd bs=1 if=bootsect of=Image skip=32
-
我们将其生成的Image文件拷到linux1.1目录下,然后执行:
./run
-