哈工大操作系统实验1-操作系统引导

哈工大操作系统实验1-操作系统引导

实验内容:

1. 改写 bootsect.s 主要完成如下功能:
bootsect.s 能在屏幕上打印一段提示信息“XXX is booting...”,
其中 XXX 是你给自己的操作系统起的名字,例如 LZJos、Sunix 等
2. 改写 setup.s 主要完成如下功能:
2.1 bootsect.s 能完成 setup.s 的载入,并跳转到 setup.s 开始地址执行。
而 setup.s 向屏幕输出一行"Now we are in SETUP"2.2 setup.s 能获取至少一个基本的硬件参数,如内存参数、显卡参数、
硬盘参数等.将其存放在内存的特定地址,并输出到屏幕上。
2.3 setup.s 不再加载 Linux 内核,保持上述信息显示在屏幕上即可。

本实验主要是为了说明开机上电之后,计算机的如何启动的过程:(全部是汇编代码)

  1. 从磁盘第一扇区读取bootsect.s,通过bios中断,读取setup.s和system模块。
  2. setup.s从bios读取基本系统参数(光标位置、内存大小等)进入保护模式。
  3. 设置IDT表和GDT表,调用main函数,进而进入C语言相关系统代码。
    实验

注意:BIOS 0X10中断:显示字符串;BIOS 0X13中断:读取磁盘内容。
实验之前请参考我的博客,实验0,进行linux内核文件的解压缩。
实验(1):bootsect.s修改,即显示自己定义的字符串:
1.a首先一种简单的修改方法:
直接修改bootsect.s中98行和246行的内容:
246行修改为自己想改的字符串之后,修改98行cx寄存器的数值即可
1.b按照实验说明重写bootsect.s和setup.s 文件:

cd ~/oslab/linux-0.11/boot/
rm -f bootsect.s     #进入文件夹删除bootsect.s,重写bootsect.s
vim bootsect.s

新的bootsect.s内容:

entry _start
_start:
    mov ah,#0x03
    xor bh,bh
    int 0x10
    mov cx,#20        //显示的字符长度
    mov bx,#0x0007
    mov bp,#msg1
    mov ax,#0x07c0
    mov es,ax
    mov ax,#0x1301
    int 0x10
z_loop:
    jmp z_loop
msg1:
    .byte   13,10
    .ascii  "zzy say hello!"    //显示的字符
    .byte   13,10,13,10
.org 510
boot_flag:
    .word   0xAA55

在这里插入图片描述
修改之后进行编译:

$ as86 -0 -a -o bootsect.o bootsect.s
$ ld86 -0 -s -o bootsect bootsect.o
$ dd bs=1 if=bootsect of=Image skip=32 //删除刚开始的32个byte,使其正好为520 byte,即一个扇区大小

运行:

# 当前的工作路径为 /home/shiyanlou/oslab/linux-0.11/boot/

# 将刚刚生成的 Image 复制到 linux-0.11 目录下
$ cp ./Image ../Image

# 执行 oslab 目录中的 run 脚本
$ ../../run

运行示意图:
在这里插入图片描述
实验(2)修改setup.s
修改setup.s内容为:

entry _start
_start:
    mov ah,#0x03
    xor bh,bh
    int 0x10
    mov cx,#29        //显示的字符长度
    mov bx,#0x0007
    mov bp,#msg2
    mov ax,cs
    mov es,ax
    mov ax,#0x1301
    int 0x10
z_loop:
    jmp z_loop
msg1:
    .byte   13,10
    .ascii  "now we are in zzy SETUP"    //显示的字符
    .byte   13,10,13,10
.org 510
boot_flag:
    .word   0xAA55

bootsect.s改为:

SETUPLEN=2
SETUPSEG=0x07e0
entry _start
_start:
    mov ah,#0x03
    xor bh,bh
    int 0x10
    mov cx,#20
    mov bx,#0x0007
    mov bp,#msg1
    mov ax,#0x07c0
    mov es,ax
    mov ax,#0x1301
    int 0x10
load_setup:
    mov dx,#0x0000
    mov cx,#0x0002
    mov bx,#0x0200
    mov ax,#0x0200+SETUPLEN
    int 0x13
    jnc ok_load_setup
    mov dx,#0x0000
    mov ax,#0x0000
    int 0x13
    jmp load_setup
ok_load_setup:
    jmpi    0,SETUPSEG
msg1:
    .byte   13,10
    .ascii  "zzy say hello!"
    .byte   13,10,13,10
.org 510
boot_flag:
    .word   0xAA55

修改tools/build.c: 根据实验指导注释掉最后的内容。编译运行:
在这里插入图片描述

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值