晚上十一点多。《微型计算机系统原理与应用》,我是直接拍在桌上的。指尖蹭了蹭书脊,纸边摩擦出的糙劲儿,全糊在手上。翻开一页,好家伙,寄存器、内存地址、汇编指令,全挤在一块儿喘不过气。看久了,太阳穴直跳。8086这老家伙,脾气是真轴。时钟一敲,指令就得乖乖排队往下走。内存里的字节?钉死在格子里,连挪个地儿都不行。不跟你扯什么“差不多就行”,更不讲情面。你敲下一行MOV AX, [1000H],它就得老老实实扒到那个地址,把数据原封不动抠出来。多一个字节?跑飞。少一个周期?硬件直接罢工。
说实话,一开始看,真觉得枯燥。可翻着翻着,嘿,心里反倒踏实了。就冲这股子死磕精确的轴劲儿。
我常琢磨,咱们这代人过日子,是不是都在偷偷后台跑代码?日程表硬生生切成十五分钟一块的碎片。交个朋友,先在心里扒拉扒拉投入产出比。连发脾气,都得先寻思个明确的触发条件。大伙儿心里都憋着股劲,盼着能像底层架构那样,把生活里那些鸡毛蒜皮、破事儿烂事,全映射到死死的内存地址上。总觉得吧,指令下得够明白,系统就不崩,人生就能踩着鼓点,稳稳当当往前走。听着挺悬,对吧?可谁没这么硬扛过呢?
可惜啊,现实哪是规规矩矩的IA-32架构。
书里专门腾出一章,讲“中断”。CPU正吭哧吭哧跑主程序呢,外头冷不丁递个信号,立马就得停。先保存现场,跑过去处理那个破请求,办完了,再原路返回,接着往下走。刚瞅见这设计,我直嘀咕:这算哪门子妥协?老被打断,效率不得腰斩?后来咂摸出点味儿来。中断,压根不是bug。它是这系统能喘气、能灵活拐弯的命门。真没这玩意儿,处理器就只能傻盯着死循环死磕。窗外的闷雷砸下来,键盘敲得噼里啪啦,甚至突然跳闸断电,它全当瞎了聋了,照跑不误。
生活里那些不按套路出牌的破事儿,说白了,全他妈是“中断请求”。
项目说停就停。聊了多年的朋友某天突然玩消失。加班到凌晨推开门,外头只剩下一片空荡荡的楼群。咱们精心搭的“主程序”,冷不丁卡壳。焦虑感?立马涌上来。这时候人干嘛?总急着“保存现场”。翻来覆去扒原因,恨不得立马敲段补丁,让系统快点重启。可有时候呢?这些中断压根没返回值。没标准流程。它们就那么干挂着。逼着你先把手里那套指令集扔地上,给自己硬留出段空白。
说句掏心窝子的话,我以前特怕失控。总觉得人生就该像写汇编,字字斟酌,步步踩实,错一步都睡不着觉。后来才咂摸过来,把精确度拉到满格,系统反倒僵成一块死板砖。就像书里白纸黑字写的,8086的寻址方式再花里胡哨,也塞不进一个活人身上那些变数。咱们老觉得自己踩准了节拍,其实呢?不过是在反复调用那些早就封装好的“高级语言”。不过话说回来,真怪那高级语言封装得好吗?未必。多半是咱们习惯了拿忙碌当遮羞布,掩盖那些根本没想透的事。那些咱们拼命挡在门外的疲惫、犹豫,还有突然冒出来的感动,才是真能托住咱们往下走的硬件底子。
现在要是Plan B彻底砸了,我早就不急着去翻调试日志了。
我就停下手里的活儿,瞅两眼窗外。不急着把“主线程”拽回来,也不硬给这中断扯什么合理说辞。有时候,系统肯让自己短暂挂起,真不是出故障了。是它在悄悄回血。汇编指令写得再精密,CPU不也得喘口气?人的底层逻辑再透亮,也得给那些没法被编译的模糊地带,留个坑。
书合上。屏幕暗下去。屋里静得能听见自己的呼吸。没时钟滴答,也没数据在总线上瞎跑。明天肯定还有新指令等着执行。但今晚,不敲了。就当个允许自己暂时宕机的普通人吧。