标签:
上传字库与图片
新建目录: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 |
标签:
原文地址:http://www.cnblogs.com/ya20151015/p/5033168.html