他像一块乾燥的海绵,疯狂吸收著关於这两台机器的知识。
    苹果ii上,他用basic写简单的图形程序,画会动的星星、跳动的音符;8086上,他学dos命令,用debug工具看內存,甚至尝试用汇编语言写几行小程序(虽然语法生涩,但逻辑清晰)。
    他的进步快得惊人。
    两周后,他就能用苹果ii的basic写一个贪吃蛇游戏——用方向键控制小方块移动,吃到隨机出现的食物后变长,撞到边界或自己身体则游戏结束。
    虽然画面是粗糙的字符和简单图形,但逻辑完整,运行流畅。
    张老师看到后,惊讶得半天说不出话:“这……这得学多久才能写出来?”
    “三天,每天放学后练两小时。”陆沉说。
    张老师沉默了。
    他知道陆沉没说谎,但三天写出一个可运行的贪吃蛇,在任何一本编程教材里都是进阶案例,而这个十岁的孩子,只用了三天。
    陆沉的计算机能力很快在实验班传开。
    孙鹏缠著他教怎么改游戏参数,陈浩想了解硬体原理,刘宇则和他討论算法优化。
    陆沉从不藏私,但也不会主动炫耀。
    他帮孙鹏修改了贪吃蛇的移动速度,给陈浩解释了8086的寄存器结构(用修农机时齿轮传动打比方),和刘宇一起用数学公式优化了图形绘製效率。
    ——
    特权带来的意料之中的副作用,就是学霸三人组的请教越来越频繁。
    每天下午放学后,陆沉钻进里间机房没多久,外间就会响起试探性的敲门声,或者乾脆是孙鹏那標誌性的大嗓门隔著门板传来:“沉子!开门!救命!”
    这天周四,陆沉正在8086 pc机上,尝试用debug工具查看一段简单的汇编程序在內存中的加载情况。
    门又被敲响了,节奏急促。
    陆沉保存好进度,起身开门。
    门口站著三个人:一脸苦相的孙鹏,眉头紧锁的陈浩,还有抱著本厚厚《数学物理方法》的刘宇。
    “沉子,江湖救急!”孙鹏率先挤进来,指著外间一台中华学习机,“我的坦克大战,好不容易改了参数,坦克跑得飞快,可一开火就死机!肯定是哪个数据溢出搞崩了!”
    陈浩则递过来一张手绘的草图,上面画著8086 cpu的方块图,用箭头標註著数据流,旁边写著密密麻麻的问题:“你上次说ax、bx这些寄存器像齿轮箱里的不同齿轮,负责传递不同力道的的数据。那如果同时有多个力道要处理,cpu怎么知道先转哪个齿轮?还有这个时钟周期,是不是就像柴油机的曲轴转一圈,完成一个动作?”
    刘宇没说话,只是把手里那本《数学物理方法》翻到某一页,指著上面一个用级数展开近似计算积分的公式,又指了指里间那台苹果ii:“我在想,如果要用计算机数值求解这个积分,是不是得把这个连续过程离散化?离散的步长怎么取,才能在精度和计算量之间取得平衡?我用basic写了个循环试算,但结果不太对,感觉是捨入误差累积了。”
    陆沉看著眼前三位同学,一个游戏崩溃,一个刨根问底钻研硬体原理,一个试图用计算机解决高阶数学问题。
    他忽然觉得这场面有点熟悉,仿佛回到了前世的实验室,同事们拿著各自的问题来找他討论。
    “一个个来。”陆沉把门完全打开,让三人进来。
    里间空间不大,一下子显得有点拥挤。
    他先走到孙鹏的机器前。
    孙鹏的坦克大战是他用basic模仿的,图形极其简陋,用字符表示坦克和墙壁。
    陆沉调出原始码,快速瀏览。
    “你这里,”陆沉指著一行代码,“bulletx = tankx + dirx * 3,子弹初始位置用坦克坐標加上方向向量乘以3。你想让子弹发射位置靠前一点,想法没错。但你没检查tankx + dirx*3会不会超过屏幕边界。当坦克贴边时,这个计算值可能为负或超过最大值,导致数组越界,访问了不该访问的內存地址,程序就崩了。”
    “边界检查……”孙鹏恍然大悟,“我光想著让坦克跑得快,忘了子弹出生点也可能出界!那怎么办?每发一颗子弹都判断一下?”
    “加个if语句判断计算后的坐標是否在有效范围內,如果非法,就修正到边界值,或者乾脆不允许发射。”陆沉说著,接过键盘,快速加了四行条件判断。
    运行,坦克贴边开火,子弹稳稳出现在边界处,不再死机。
    “神了!”孙鹏一拍大腿,“就这么简单?我怎么就没想到!”
    “经验问题。多写多崩几次,就有感觉了。”陆沉笑了笑。
    这確实是经验,前世调试程序时,边界条件是最容易出错的角落之一。
    接著是陈浩。
    陆沉拿过他那张手绘的cpu图,看了几眼,发现陈浩的理解已经相当深入,甚至画出了简单的数据通路。
    “你的比喻很对,时钟周期就像曲轴转一圈,指挥所有齿轮(寄存器、运算器)同步动作一次。但cpu內部不是只有一个曲轴,它有多级流水线,可以像工厂的流水线一样,同时处理多条指令的不同阶段。”陆沉儘量用陈浩能懂的比喻,“比如第一条指令在取齿轮(取指),第二条指令就可以同时在转齿轮(解码),第三条在咬合齿轮(执行)。这样总的效率就高了。至於哪个力道优先,由控制器根据指令本身的依赖关係和流水线状態动態调度,有点像码头调度员指挥不同货船装卸,要避免拥堵和衝突。”
    为了让陈浩更直观地理解流水线,陆沉乾脆在草稿纸上画了一条简易的、分为取指-解码-执行-访存-写回五个阶段的流水线图,用箭头表示指令流动,並標出可能发生的数据衝突(比如下条指令需要上条指令的结果,但结果还没写回)和控制衝突(遇到跳转指令)。
    这些都是计算机体系结构课程的內容,但他用齿轮卡壳、传送带改道这样接地气的说法解释,陈浩听得眼睛发亮,连连点头。
    “我好像有点明白了!就是说,cpu不是傻乎乎地干完一件事再干下一件,而是像……像几个老师同时批改不同班级的卷子,虽然每个老师只负责一道题,但整体批改速度飞快!”陈浩兴奋地总结。
    “这个比喻好。”陆沉赞道。

章节目录

1978:从婴儿开始增加智商所有内容均来自互联网,御书屋只为原作者佚名的小说进行宣传。欢迎各位书友支持佚名并收藏1978:从婴儿开始增加智商最新章节