第667章 灵魂的第一行代码!(2 / 3)

加入书签

0  00010001`  (STR  R1,  [R2]  -  将PCB大小存入第一个任务的控制块)

站在他身后的孙立国,手里拿着一本厚厚的手写的“盘古之心指令集”,嘴里飞快地念着,为黄建功进行人工的“语法检查”。

“指令MOV  R1,  #256,机器码10110001  00000001  00000000,黄总工,你这里写的是#256,但指令集里定义,立即数寻址的高八位应该在后,你写反了!”

黄建功的手指一顿。

他立刻在屏幕上删掉了刚才的代码,重新敲了一遍。

`10110001  00000001  00000000`

“不对!”孙立国急得满头大汗,“是`10110001  00000000  00000001`!”

黄建功看着屏幕,又看了看孙立国手里的指令集,这才发现,因为三天三夜没睡,他的大脑已经出现了一丝混乱,把高低字节的顺序记反了。

他深吸一口气,删掉错误的代码,这一次,他放慢了速度,一个数字一个数字地敲击。

`10110001  00000000  00000001`

“正确!”孙立国长舒了一口气。

周围的专家们,看得心惊肉跳。

仅仅是一个最简单的赋值操作,就如此凶险。一个不留神,整个程序的逻辑就会谬以千里。

而黄建功要写的,是一个包含成千上万行这种指令的,无比复杂的调度核心!

这简直不是人能干的活!

时间一分一秒地过去。

黄建功的额头上,渗出了细密的汗珠。他的后背,早已被汗水浸透。

他正在编写“天枢”内核的第一个函数:`task_create()`。

这个函数的功能,是在内存中,按照PCB的规范,开辟一块空间,并对其进行初始化,相当于“创造”一个新任务。

他需要精确计算每一个字节的偏移量。

PCB的第一个字节,是任务ID。

第二个字节,是任务状态。

从第五个字节开始,是16个通用寄存器的备份空间,每个寄存器占4个字节,一共64字节。

……

他就像一个最精密的雕刻家,用0和1这把刻刀,在内存这块璞玉上,小心翼翼地雕琢着“灵魂”的模样。

一个小时。

两个小时。

五个小时。

当天色再次暗下来的时候,黄建功终于敲下了`task_create()`函数的最后一行代码。

那是一条返回指令。

`11100001  00101111  11111111`  (RET)

他长长地吐出一口气,感觉整个身体都快要虚脱了。

仅仅是一个最基础的创建任务的函数,就耗费了他整整五个小时,编写了超过三百行纯粹的机器码。

“第一阶段,完成。”他声音沙哑地宣布。

实验室里,响起一阵压抑的、低低的欢呼。

没有人敢大声,生怕惊扰了这位正在“创世”的神。

短暂的休息后,黄建功没有停歇,立刻投入了第二个函数的编写。

`task_yield()`。

这个函数的功能,是“任务切换”。

它将是整个“天枢”内核中,最复杂,也是最核心的部分。

它需要将当前所有寄存器的值,一个不漏地,全部保存到当前任务的PCB中。

然后,它需要从“任务队列”里,找到下一个应该运行的任务。

最后,再将下一个任务PCB里保存的寄存器值,重新加载到CPU的每一个寄存器中。

这个过程,繁琐、凶险,不容许任何一点差错。

黄建功的表情,变得前所未有的凝重。

他再次深吸一口气,手指落在了键盘上。

这一次,他编写的不再是简单的内存操作指令。

`11100010  01000001  00000000`  (PUSH  {R0-R15,  LR}&nb

↑返回顶部↑

温馨提示:亲爱的读者,为了避免丢失和转马,请勿依赖搜索访问,建议你收藏【188小说网】 www.188xs.com。我们将持续为您更新!

请勿开启浏览器阅读模式,可能将导致章节内容缺失及无法阅读下一章。

书页/目录