字体:大 中 小
护眼
关灯
上一章
目录
下一章
第667章 灵魂的第一行代码!
第(2/3)页
上,一行又一行的二进制代码,如同瀑布般倾泻而下。
`10110001 00000000 00000001` (MOV R1, #256 - 设置PCB区域的起始大小)
`10110010 00000000 00000000` (MOV R2, #0 - 初始化任务计数器)
`11100001 10000010 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)
他长长地吐出一口气,感觉整个身体都快要虚脱了。
仅仅是一个最基础的创建任务的函数,就耗费了他整整五个小时,编写了超过三百行纯粹的机器码。
“
(本章未完,请翻页)
记住手机版网址:m.lewenwx.cc
上一章
目录
下一章