最近搞了下汇编。最初还是看了一本病毒的书,里面代码都是汇编的,很多看不懂,如int 21h等,于是乎就学了下汇编,收获颇大。建议想学内核的学下汇编先。
汇编有好几种,主要是格式的问题,有intel格式和AT&T格式的,各有自己的特点,很难说孰优孰劣。主要的环境有这么几种,masm、nasm、gas(gcc 的一部分)。后来看了一本write your own os 的书,照着做,写了个bootloader,boot部分也就是mbr(前512字节,即第一扇区),程序在在mbr中搜索loader.bin,在loader.bin中进入保护模式,完成分页,分段,及中断控制等工作,整个代码很简单,也很初级,下一步是实现进程。我想把前段时间工作总结下。
首先说.img文件格式,img文件为二进制格式,遵从fat12规范。 要介绍文件格式,首先从存储介质说起,存储介质通常都以 sector 的形式分块,通常一个 sector 为 512 字节,磁盘就是一块又一块的 sector 构成的。为了实现文件系统,即以文件的形式对磁盘进行操作,磁盘的第一个 sector 为引导扇区,存储一些启动信息及代码等,接下来的扇区为 FAT 表, FAT 表有两个,即 FAT1 和 FAT2 , FAT 表里面用到一种数据结构来表示文件。由于文件的大小不同,有的文件占用 1 个扇区,有的文件占用多个扇区,为了表示一个文件中的扇区数,在对文件进行描述时,给出其占用的第一个区块号,在 FAT 表区,在扇区对应的位置填入下一区块编号,若为最后一个区块,则填入 FFF ( fat12 ),在 FAT12 格式中,每一个扇区对应 FAT 表中的 12 位, FAT16 为 16 位, FAT32 为 32 位。 FAT12 文件描述采用 32 字节,存储在根目录区中。
(由于无法插入图片,图文版将以pdf出现)
汇编有好几种,主要是格式的问题,有intel格式和AT&T格式的,各有自己的特点,很难说孰优孰劣。主要的环境有这么几种,masm、nasm、gas(gcc 的一部分)。后来看了一本write your own os 的书,照着做,写了个bootloader,boot部分也就是mbr(前512字节,即第一扇区),程序在在mbr中搜索loader.bin,在loader.bin中进入保护模式,完成分页,分段,及中断控制等工作,整个代码很简单,也很初级,下一步是实现进程。我想把前段时间工作总结下。
首先说.img文件格式,img文件为二进制格式,遵从fat12规范。 要介绍文件格式,首先从存储介质说起,存储介质通常都以 sector 的形式分块,通常一个 sector 为 512 字节,磁盘就是一块又一块的 sector 构成的。为了实现文件系统,即以文件的形式对磁盘进行操作,磁盘的第一个 sector 为引导扇区,存储一些启动信息及代码等,接下来的扇区为 FAT 表, FAT 表有两个,即 FAT1 和 FAT2 , FAT 表里面用到一种数据结构来表示文件。由于文件的大小不同,有的文件占用 1 个扇区,有的文件占用多个扇区,为了表示一个文件中的扇区数,在对文件进行描述时,给出其占用的第一个区块号,在 FAT 表区,在扇区对应的位置填入下一区块编号,若为最后一个区块,则填入 FFF ( fat12 ),在 FAT12 格式中,每一个扇区对应 FAT 表中的 12 位, FAT16 为 16 位, FAT32 为 32 位。 FAT12 文件描述采用 32 字节,存储在根目录区中。
FAT12存在一个数据结构,叫做BPB(BIOS parameter block),其存在磁盘的第一扇区中。
(由于无法插入图片,图文版将以pdf出现)