我找到了一个叫史蒂夫·沃兹尼亚克的伟大程序员

曾几何时,当计算机很大而业务很无聊时,发生了意外的事情。 年轻的黑客已经找到了一种通过电传打字机和交通信号灯在廉价的微处理器上组装个人计算机的方法。 史蒂夫·沃兹尼亚克就是其中之一。 这些家伙以计算机的局限性为挑战,坐下来让这些微型芯片做出色的事情。 以下是多布博士 在1976年8月发表的日记



这是一组关于实数的算术过程。 微处理器(6502,与Apple I和II中的相同)只能使用字节,即0到255之间的整数。更糟糕的是,他只能加减它们。 但是有了这个库,你可以计算 1.26271099.56 ,甚至取pi的平方根。 令人惊讶的是,一个名为Steve Wozniak的程序作者将基本功能(加,减,乘和除)合计为239个字节,总共使用了127条指令。

这是一段令人印象深刻的程序。 看了几遍之后,我可以说他简直太聪明了。 例如,乘法和除法过程的周期被触发23次,结果中的每一位触发一次。 您是否认为Woz会花两个字节在两个地方写入常数23? 当然不是! 它将常量23加载到两个循环都使用的初步例程中:



作为另一个示例,算法应采用M1和M2的绝对值。 你能写吗

  M1 =绝对(M1);
 M2 =绝对值(M2); 

沃兹不会那样重复。 他编写了一个过程,该过程采用M1的绝对值,然后更改M1和M2。 然后,它两次调用此过程,因此用一半的代码量即可达到相同的结果。 此外,在其他地方也需要替换M1和M2,因此代码可以完成双重任务。

当然,这种密集的分解使跟踪流程变得困难,但是令人惊讶的是这段代码比它的时间提前了多远。 阅读1976年一期的其他文章,您会发现很多不那么写好的代码。 这是可以理解的:人们只是想出了如何利用新的微处理器。 在所有这些钻石之中,这很可能值得这个恶魔般的现代黑客入侵。 为了进行比较,这与30年后的这惊人的6502代码具有相同的总体创造力水平。

这个故事足够了。 为什么我要在2019年仔细研究这个古老的密码? 事实是,我正在为I²CDriverSPIDriver开发新的伴侣,他必须在我以前的项目中使用的8位Silicon Labs EFM8处理器(基于8051)上执行浮点运算。 现在它可以像6502库一样轻松地执行这些计算,而我不需要这么小的优化代码,但是现在它运行得非常快,比类似的Keil库要快一点。 伟大的代码永不消亡!

Source: https://habr.com/ru/post/zh-CN459584/


All Articles