关灯 字号:小

第四十八章:十岁的小老师

章节报错(免登陆)

一秒记住【笔趣阁】biquge5678.com,更新快,无弹窗!


    他像一块乾燥的海绵,疯狂吸收着关于这两台机器的知识。
    苹果II上,他用BASIC写简单的图形程序,画会动的星星丶跳动的音符;8086上,他学DOS命令,用DEBUG工具看内存,甚至尝试用汇编语言写几行小程序(虽然语法生涩,但逻辑清晰)。
    他的进步快得惊人。
    两周后,他就能用苹果II的BASIC写一个贪吃蛇游戏——用方向键控制小方块移动,吃到随机出现的食物后变长,撞到边界或自己身体则游戏结束。
    虽然画面是粗糙的字符和简单图形,但逻辑完整,运行流畅。
    本书由??????????.??????全网首发
    张老师看到后,惊讶得半天说不出话:「这……这得学多久才能写出来?」
    「三天,每天放学后练两小时。」陆沉说。
    张老师沉默了。
    他知道陆沉没说谎,但三天写出一个可运行的贪吃蛇,在任何一本编程教材里都是进阶案例,而这个十岁的孩子,只用了三天。
    陆沉的计算机能力很快在实验班传开。
    孙鹏缠着他教怎麽改游戏参数,陈浩想了解硬体原理,刘宇则和他讨论算法优化。
    陆沉从不藏私,但也不会主动炫耀。
    他帮孙鹏修改了贪吃蛇的移动速度,给陈浩解释了8086的寄存器结构(用修农机时齿轮传动打比方),和刘宇一起用数学公式优化了图形绘制效率。
    ——
    特权带来的意料之中的副作用,就是学霸三人组的请教越来越频繁。
    每天下午放学后,陆沉钻进里间机房没多久,外间就会响起试探性的敲门声,或者乾脆是孙鹏那标志性的大嗓门隔着门板传来:「沉子!开门!救命!」
    这天周四,陆沉正在8086PC机上,尝试用DEBUG工具查看一段简单的汇编程序在内存中的加载情况。
    门又被敲响了,节奏急促。
    陆沉保存好进度,起身开门。
    门口站着三个人:一脸苦相的孙鹏,眉头紧锁的陈浩,还有抱着本厚厚《数学物理方法》的刘宇。
    「沉子,江湖救急!」孙鹏率先挤进来,指着外间一台中华学习机,「我的坦克大战,好不容易改了参数,坦克跑得飞快,可一开火就死机!肯定是哪个数据溢出搞崩了!」
    陈浩则递过来一张手绘的草图,上面画着8086CPU的方块图,用箭头标注着数据流,旁边写着密密麻麻的问题:「你上次说AX丶BX这些寄存器像齿轮箱里的不同齿轮,负责传递不同力道的的数据。那如果同时有多个力道要处理,CPU怎麽知道先转哪个齿轮?还有这个时钟周期,是不是就像柴油机的曲轴转一圈,完成一个动作?」
    刘宇没说话,只是把手里那本《数学物理方法》翻到某一页,指着上面一个用级数展开近似计算积分的公式,又指了指里间那台苹果II:「我在想,如果要用计算机数值求解这个积分,是不是得把这个连续过程离散化?离散的步长怎麽取,才能在精度和计算量之间取得平衡?我用BASIC写了个循环试算,但结果不太对,感觉是舍入误差累积了。」
    陆沉看着眼前三位同学,一个游戏崩溃,一个刨根问底钻研硬体原理,一个试图用计算机解决高阶数学问题。
    他忽然觉得这场面有点熟悉,仿佛回到了前世的实验室,同事们拿着各自的问题来找他讨论。
    「一个个来。」陆沉把门完全打开,让三人进来。
    里间空间不大,一下子显得有点拥挤。
    他先走到孙鹏的机器前。
    孙鹏的坦克大战是他用BASIC模仿的,图形极其简陋,用字符表示坦克和墙壁。
    陆沉调出原始码,快速浏览。
    「你这里,」陆沉指着一行代码,「BULLETX=TANKX+DIRX*3,子弹初始位置用坦克坐标加上方向向量乘以3。你想让子弹发射位置靠前一点,想法没错。但你没检查TANKX+DIRX*3会不会超过屏幕边界。当坦克贴边时,这个计算值可能为负或超过最大值,导致数组越界,访问了不该访问的内存地址,程序就崩了。」
    「边界检查……」孙鹏恍然大悟,「我光想着让坦克跑得快,忘了子弹出生点也可能出界!那怎麽办?每发一颗子弹都判断一下?」
    「加个IF语句判断计算后的坐标是否在有效范围内,如果非法,就修正到边界值,或者乾脆不允许发射。」陆沉说着,接过键盘,快速加了四行条件判断。
    运行,坦克贴边开火,子弹稳稳出现在边界处,不再死机。
    「神了!」孙鹏一拍大腿,「就这麽简单?我怎麽就没想到!」
    「经验问题。多写多崩几次,就有感觉了。」陆沉笑了笑。
    这确实是经验,前世调试程序时,边界条件是最容易出错的角落之一。
    接着是陈浩。
    陆沉拿过他那张手绘的CPU图,看了几眼,发现陈浩的理解已经相当深入,甚至画出了简单的数据通路。
    「你的比喻很对,时钟周期就像曲轴转一圈,指挥所有齿轮(寄存器丶运算器)同步动作一次。但CPU内部不是只有一个曲轴,它有多级流水线,可以像工厂的流水线一样,同时处理多条指令的不同阶段。」陆沉尽量用陈浩能懂的比喻,「比如第一条指令在取齿轮(取指),第二条指令就可以同时在转齿轮(解码),第三条在咬合齿轮(执行)。这样总的效率就高了。至于哪个力道优先,由控制器根据指令本身的依赖关系和流水线状态动态调度,有点像码头调度员指挥不同货船装卸,要避免拥堵和冲突。」
    为了让陈浩更直观地理解流水线,陆沉乾脆在草稿纸上画了一条简易的丶分为取指-解码-执行-访存-写回五个阶段的流水线图,用箭头表示指令流动,并标出可能发生的数据冲突(比如下条指令需要上条指令的结果,但结果还没写回)和控制冲突(遇到跳转指令)。
    这些都是计算机体系结构课程的内容,但他用齿轮卡壳丶传送带改道这样接地气的说法解释,陈浩听得眼睛发亮,连连点头。
    「我好像有点明白了!就是说,CPU不是傻乎乎地干完一件事再干下一件,而是像……像几个老师同时批改不同班级的卷子,虽然每个老师只负责一道题,但整体批改速度飞快!」陈浩兴奋地总结。
    「这个比喻好。」陆沉赞道。
章节报错(免登陆)
验证码: 提交关闭
猜你喜欢: 凡人修仙:我百世轮回只杀不渡 深渊负累 废材修仙,开局契约一条祖龙 诸天:一切从拜师石坚开始! 魔法学校小学妹,沙雕搞事啥都会 60年代,为护着妹妹被迫下乡 盗墓笔记:原来是故人没死 我一保安,娶个总裁老婆很合理吧 天魔道圣 反派大皇子 随母改嫁,我带全家上青云 从废土崛起横扫诸天! 茅山祖师爷 水浒第一狠人 影视:不知道啊!反正人生很曼妙 逆天邪卡:我制卡修仙主打社死 从演戏开始,长生不死! 人在美利坚,我在美国当神父 春风骤