上传字库与图片
新建目录:D:\GX\ya\charpic
存放asc16英文字库,hzk16f汉字字库,图片ya.bmp,faya.bmp
文件hzk16f和文件asc16分别为16*16的汉字点阵文件和8*16的英文点阵文件
对应的我们将用到int 13h功能:
功能02H
功能描述:读扇区
入口参数:AH=02H
AL=扇区数
CH=磁道
CL=开始扇区
DH=磁头
DL=驱动器号,00H~7FH:软盘;80H~0FFH:硬盘 这里我们的DL是0
ES:BX=缓冲区的地址 也就是我们要写入的地址
asc16 大小4096字节 /512=8(占8扇区合4096字节,读写盘以此为根据)
hzk16f大小261696字节/512=511.1(占512扇区合262144字节,读写盘以此为根据)
ya.bmp大小94178字节/512=183.9(占184扇区合94208字节,读写盘以此为根据)
faya.bmp大小31930字节/512=62.3(占63扇区合32256字节,读写盘以此为根据)
在磁盘中存储顺序这样:ASCII->HZK16F->ya.bmp->faya.bmp->空白扇区XX个->kernel.bin放在最后。
三个相关值
程序 |
write_in_img 起始字节 |
存入软盘 磁头.磁道.扇区 |
内存物理地址 及 es:bx |
boot.bin |
0 (占512) |
0.0.1 (占512) |
7c00 计算机自动载入 |
kernelloader.bin |
0+512=512 (占1024) |
0.0.2 -0.0.3 (占1024) |
0x10000 0x1000:0x0000 |
asc16 |
512+1024=1536 (占4096) |
0.0.4 (占4096) |
0x10400 0x1000:0x0400 |
hzk16f |
1536+4096=5632 (占262144) |
0x11400 |
|
ya.bmp |
5632+262144=267776 (占94208 ) |
0x51400 |
|
faya.bmp |
267776+94208=361984(占32256) |
0x68400 |
|
空白XX |
|||
前面合计52个磁道 |
|||
kernel.bin |
479232 (52X18X512) |
0.26.1 |
0x80000 es=0x8000 |
文件字节数 |
字节,读写盘以此为根据 |
开始于 |
占 |
结束于 |
asc16 大小4096 |
占4096 |
0x10400 |
0x1000 |
0x11400 |
hzk16f大小261696 |
占262144 |
0x11400 |
0x40000 |
0x51400 |
ya.bmp大小94178 |
占94208 |
0x51400 |
0x17000 |
0x68400 |
faya.bmp大小31930 |
占32256 |
0x68400 |
0x7e00 |
0x70200 |
英文字库+中文字库+图片 = 4096 + 262144 + 94208 +32256 = 392704
一个扇区512=0x200 一个磁道=9216 一个段=65536
一个段等于7磁道加2扇区,在下面计算中用到6磁道20扇区,同一段上下两个读扇区数和为20,而紧接着的下一段与上一段读扇区数和为18
三个表示磁头.磁道.扇区 两个表示磁头.磁道
比如0.0.4表示0磁头.0磁道.4扇区,1.0表示1磁头.0磁道
开始 |
读入内存物理地址 |
动作 |
备注 |
es:bx起始值 |
0.0.4 |
0x10400 |
读入15个扇区 |
读入同一磁道剩余的扇区 |
0x1000:0x0400 |
1.0 |
计算得出 |
读入6个磁道 |
1.0 0.1 1.1 0.2 1.2 0.3 |
|
1.3.1 |
计算得出 |
读入3个扇区 |
写完0x1000段 |
|
上面读入64512 |
||||
1.3.4 |
0x20000 |
读入15个扇区 |
读入同一磁道剩余的扇区 |
0x2000:0x0000 |
0.4 |
计算得出 |
读入6个磁道 |
0.4 1.4 0.5 1.5 0.6 1.6 |
|
0.7.1 |
计算得出 |
读入5个扇区 |
写完0x2000段 |
|
上面读入65536 |
||||
0.7.6 |
0x30000 |
读入13个扇区 |
读入同一磁道剩余的扇区 |
0x3000:0x0000 |
1.7 |
计算得出 |
读入6个磁道 |
1.7 0.8 1.8 0.9 1.9 0.10 |
|
1.10.1 |
计算得出 |
读入7个扇区 |
写完0x3000段 |
|
上面读入65536 |
||||
1.10.8 |
0x40000 |
读入11个扇区 |
读入同一磁道剩余的扇区 |
0x4000:0x0000 |
0.11 |
计算得出 |
读入6个磁道 |
0.11 1.11 0.12 1.12 0.13 1.13 |
|
0.14.1 |
计算得出 |
读入9个扇区 |
写完0x4000段 |
|
上面读入65536 |
||||
0.14.10 |
0x50000 |
读入9个扇区 |
读入同一磁道剩余的扇区 |
0x5000:0x0000 |
1.14 |
计算得出 |
读入6个磁道 |
1.14 0.15 1.15 0.16 1.16 0.17 |
|
1.17.1 |
计算得出 |
读入11个扇区 |
写完0x5000段 |
|
上面读入65536 |
||||
1.17.12 |
0x60000 |
读入7个扇区 |
读入同一磁道剩余的扇区 |
0x6000:0x0000 |
0.18 |
计算得出 |
读入6个磁道 |
0.18 1.18 0.19 1.19 0.20 1.20 |
|
0.21.1 |
计算得出 |
读入13个扇区 |
写完0x6000段 |
|
上面读入65536 此时还剩392704 - 64512 -5*65536 =512 合1个扇区 |
||||
0.21.14 |
0x70000 |
读入1个扇区 |
读入同一磁道剩余的扇区 |
0x7000:0x0000 |
表格变形了,大家凑合着看吧
时间: 2024-11-01 06:22:45