30天自制操作系统day18&day19

实现命令行

第18章实现了命令行任务,且实现了几个命令。主要是dir命令可以讲一讲。dir命令用于显示目录下的文件信息。
由于磁盘的数据已经全部读取到内存中了,所以这里可以直接访问到。由前面可知,磁盘数据放在0x00100000~0x00267fff,根目录的文件信息存放在磁盘开始的0x2600处。FAT文件目录项的格式为:

struct FILEINFO {
    unsigned char name[8], ext[3], type;
    char reserve[10];
    unsigned short time, date, clustno;
    unsigned int size;
};

文件信息最多可以存放224个。如果name[0]为0xe5,表示文件已被删除。如果为0x00,表示不包含文件信息。type=0x10代表目录,0x08代表非文件。从0x102600开始遍历,当读到0x00时终止,便可以读出目录下的文件信息。

对FAT的支持

19章中实现的type命令需要显示文件中的所有内容。一个扇区的大小是512B。文件的第一个扇区的位置可以在目录下的文件信息中找到。当文件大小大于512B时,可能放在不连续的扇区。这时需要使用FAT表查找下一个扇区的位置。FAT表在磁盘的0x200~0x13ff,它记录文件在磁盘中存放的位置。
FAT表是经过压缩的。三个字节,将中间的字节高位放到第三个字节的最低位,低位放到第一个字节的最高位,变成两个数字。如:

ab cd ef -> dab efc

将第一个扇区的扇区号作为index,可以从FAT表中找到下一个扇区号。当找到FFF时,表示结束。

执行应用程序

可以读取文件之后,接下来尝试执行磁盘上的应用程序。应用程序不知道自己会被加载到哪个内存位置,但是不需要知道。在程序中ORG 0,加载程序的时候,给它分配一个段,[段号:0]就是起始地址了。
在命令行程序中,输入应用程序名后,先分配内存,将应用程序复制到这一段内存,然后set_setmdesc()注册段号,然后farjump()跳转过去。这时已经开始运行应用程序了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值