练习题

🟢 基础练习

练习1:修改启动信息

修改 msg_boot 和 msg_loaded 的内容,显示你自己的启动信息。

练习2:打印十六进制值

编写 print_hex 函数,将DX寄存器的值以十六进制打印(如 0x1234)。

提示: 需要逐个nibble(4位)提取并转换为ASCII。

练习3:读取不同数量的扇区

修改 disk_read 的调用,只读取5个扇区而不是15个。验证程序仍然正常运行。

🟡 进阶练习

练习4:磁盘读取重试

修改 disk_read 函数,当读取失败时自动重试3次(而不是立即停止)。

提示:

mov cx, 3       ; 重试次数
.retry:
    ; ... 尝试读取 ...
    jnc .success  ; 成功则跳过重试
    dec cx
    jnz .retry
    ; 3次都失败,报错

练习5:打印加载进度

在磁盘读取前后打印消息,让用户看到进度:

Loading sector 1... OK
Loading sector 2... OK
...

🔴 挑战练习

练习6:实现LBA到CHS的转换

编写函数将LBA(逻辑块地址)转换为CHS(柱面-磁头-扇区),支持读取更大范围的磁盘。

公式:

Sector   = (LBA % sectors_per_track) + 1
Head     = (LBA / sectors_per_track) % heads
Cylinder = (LBA / sectors_per_track) / heads