30天自制操作系统day28

alloca

C语言编译器规定, 如果栈的大小超过4KB,则会调用__alloca()这个函数来获取栈的空间。为了能够使用更大的栈空间,我们需要简单地实现这个函数。

__alloca:
        ADD     EAX,-4
        SUB     ESP,EAX
        JMP     DWORD [ESP+EAX]

EAX是要分配的栈大小。因为call这个函数会push返回地址,导致ESP-4,所以只需要另外分配EAX-4的空间,最后JMP到返回地址。

文件操作API

文件操作包括打开,关闭,定位,读取等。在TASK结构中添加一个FILEHANDLER的数组,相当于为每个进程分配的文件打开表。FILEHANDLER结构包含文件在内存中的buffer,当前读取位置等信息。
文件的打开直接把文件在磁盘上所有内容复制到buffer中了。文件读取则是从buffer复制到传入的参数指向的地址。注意文件的buffer在系统空间,要复制到的目标地址是应用程序空间,复制时需要加上dsbase。

显示文字

如果要显示日文或者中文文字,一个字需要两个字节表示,且一个全角字由左右两个部分组成,刚好是半角字大小的两倍,两个部分需要分别绘制。
字符的显示还是用字库文件,每个全角字符由16×16bit组成。这个字库文件相对于之前的英文字库大得多。之前的字库直接在启动时读入内存了,现在改为以打开文件的方式读入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值