练习题
🟢 基础练习
练习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