查看完整版本: [-- [ZT]我和电脑亲密接触的心路历程 --]

Bay Area Chinese--灣區華人 -> 乱讲 -> [ZT]我和电脑亲密接触的心路历程 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

<<   1   2   3  >>  Pages: ( 3 total )

伍胥之 03-19-2010 12:30

[ZT]我和电脑亲密接触的心路历程

原题:[ZT]The Progamming career of a non-programmer ,P{mk%=9  
(卡拉注:可以译为“一个非程序员的编程生涯”)

liuliulover 03-19-2010 12:34
can't see anything

dah 03-19-2010 15:13
也看不见     

阿散 03-19-2010 22:49
用户被禁言,该主题自动屏蔽!

伍胥之 06-03-2010 08:25
挖了一个坑,一直没有填。今天翻出来,先填上一小段。人老了,就容易怀旧了。 (-0ePSO G  
f$.?$  
我不是一个程序员,计算机系的课,一天也没有听过。 aZ Xmlq  
*4S-z&,.c  
因为读高中的时候,没有听过计算机这个名词,考大学的时候,也不知道有计算机系。 ?^i1_v7 Bi  
}lP;U$  
从小玩到大,心思没怎么用在学习上。小学以玩为主,课也不怎么听;初中以后上课会听听课,但是作业是不做的。家里穷得连作业本也买不起,一般会用黑乎乎的草纸自己订个本子,但很少用。我有时会用物探公司(当时叫地质勘探调查指挥部,简称地调)扔掉的记录纸订个本子用。那种纸是他们放炮后记录地震波的,由此判断哪里可能有石油,在一面描满了各种各样的波形线。纸的质量非常好,但是也很难得到。(问一下蛐蛐同学,物探现在不会再用这种东西记录了吧?) 5!I4l1  
eujK4s  
初中看过电视,在地区运输公司汽车二队的一个大礼堂里,还专门为它树了一个近50米高的天线。电视有这样的待遇,可想而知能够看到的次数也不会多了。 xe4Oxo  
8'Z:ydj^,  
高中考上了县一中,年龄也比较小,在班上是最矮的,我们班所有的女生都比我高。很多同学想家,天天哭,最后转回当地学校了。而我觉得一切都新鲜,根本没有想家的念头。生活也比在家里好,虽然吃不饱,但毕竟是吃细粮;而在家里却是要吃糠咽菜的。尽管如此,也并不知道珍惜这样的学习机会。利用了学校有图书室而且可到县图书馆借书的机会,一个学期就把眼晴看到了0.4。高中两年时间,我大概玩了不少于一年。高考成绩当然是排在孙山同学后面了。 PRkS Q4  
z0%\OhuCcf  
复读一年,比上年用功多了一些。没有那么疯了,也有几个大哥约束着我。而且有几个同学会把从老家带来的玉米饼子每顿饭都分给我一块,所以个子长了一些,毕业的时候,终于超过165了。那时有预选制,不能通过预选的,连参加高考的资格也没有。而预选之后,我又被老师赶回宿舍了,因为别人上自习的时候,我在外面与另一个同学打闹。 -#In;~  
'm3t|:nMU  
高考成绩刚上重点线。那一年,我上的大学在前一年刚从学院改成大学,而在我的高考年,又出台了一个新政策:为了支持教育事业发展,每省都有一所省立师范大学(普通本科)按重点线招生。这样,我们一批重点线上十分左右的同学,被稀里糊涂地录取到了这个“吃饭大学”。而我的石油工人梦也就到此结束了。而我当年的志愿中,除了第二志愿是长春地质学院外,其它的全是石油大学、学院、学校etc. 。后来才知道,反而比我低几分的同学被录取到石油大学去了,因为石大(当年叫华东石油学院)虽然是重点,可录取成绩并不高,特别是一般人不愿意支的勘探与钻井专业。而这两个专业却是我从小的志愿。 #*9-d/K  
?YQPlv:<o.  
大学期间课业比较轻松,那年代我们学校连计算机也没有,无论互联网。周末就上山寻花问柳(我在上大学以前没有见过山),大学期间成绩不错,老师们也喜欢我。吃饭大学的饭在这个城市还真的小有名气,不同学校的老乡聚会常选我们学校。 大学期间还谈了唯一的一次恋爱。 Bj Wr5SJ  
hB9Ee@  
大学期间,总算听说过计算机这个词了,还不算孤陋寡闻。 %' $o"  
=w$tvo/  
大三下学期,有考研的想法了。而我们这一年,也第一次有了保送这一说。第一次保研,全系保送2个,系领导很重视也很认真,还很民主。按程序由同学讨论推荐出4人(每班2人)、老师推荐,最后系领导会同学术委员会确定。我们班推荐了我和另一名男同学,另一班推荐了2名女同学,老师们推荐结果也差不多是这样。可是到了系里,就出现难题了。最后系主任找我谈了一次话,原因是虽然同学老师都推荐了我,但是我的考试成绩并不突出,前面的同学家长有意见反映了,所以我将不会有保研资格。最后给我看了一下成绩单。原来我在年级只排第10名,第一名是我们班的另一位男同学,也就是我班推荐的另一位,后面是8位女同学。我注意到在我的名字和第9名(校工会主席的女儿,也在班级推荐之列)的名字上面,用铅笔画了很多圈圈。显然,我让领导着实为难了一番。最终结果确是谁也想不到的,那时代潜规则没有现在这么盛行。结果是我与那位女同学都没有获得保研资格,另一名女同学也没有。系里最后完全按学习成绩保送了前2名。第一自然是我班那位男同学,第二却是我们班另一位女同学,而她那时除了上课认真学习考前认真复习外,平时天天在宿舍给男朋友织毛衣,连考研这事都没有想过。 ,1oQ cC  
POAw M  
我猜想,那时的领导大概是觉得选择我别人会说我成绩差一点,而又不想接受潜规则选另一位女同学,所以既然强调成绩,就完全按成绩了。虽然开始推荐时,声明了要看成绩但不唯成绩。 fpWg R4__  
0* ;O?T  
我们系的一位前领导在位时就希望我能去学生态学,回来开设这个方向。为此,由我们系两位方向相关的老师(分类与生理)联合设了一个新方向中,叫植物生理生态,从此以后再也没有设过这个方向。领导的目的是从自己系招一个人送出去培养,送到他同学那里。后来,我直接考了系主任同学的研究生(委托培养)。从此才与计算机结下了不解之缘。  R'}95S<  
b| M3 `  
题外话,那个年代,研究生分配是炙手可热的,以前分配到我们学校的都是重点本科毕业。所以,在我的成绩超过统招录取线后,我们学校跟我签了合同,宁可拿1.8万培养费也要让我回来,而且,8年内不可以调动工作。谁曾想到,3年后,我回到母校,已经没有我的岗位,而且研究生留校已经比较困难了。而我是学校委培的,只能回来待岗,所以,在打杂工作中,慢慢变成了打字员、电脑维修工、程序员、计算机教师,反正我们系别人不上的课都给了我了,这是后话按下不表。 FOwnxYGVf  
|&3x#1A  
且说那年春天,俺坐上火车一路看着金黄的油菜花,来到了大城市上海,见了俺未来的导师,忐忑不安地坐在导师办公室里,满怀敬畏地看着一个确定要留校的大师兄在一台IBM-PC(俺后来才知道的)前敲敲打打,我心里在嘀咕:“这个像电视又不大像的东西,大概就是传说中的计算机了。”

伍胥之 06-13-2010 14:04
入学后,才知道,那台计算机是全校中两台具有CGA显示器的原装IBM-PC,而且具有高达640KB内存,8088CPU寻址能力高达1MB,因为它具有8位数据线和20位地址总线。而学校同期进的其它计算机都是大力神单显的(绿显,分辩率挺高,但拖尾很严重),因为我们办公室主任的老公是设备处的,所以沾了点光。 X(A.X:"  
Y^KTkS0D  
我读的专业是生态学,老师对计算机要求挺高的。可是我没有见过,更没有学过啊!当老师问我“小C,你学过计算机吗?”,俺老老实实回答:“”我们学校条件差,没有这门课,所以不懂,不过我想我入学以后会很快学会基本使用的。” x YfD()w<I  
l[Q:}y  
入学后,学校为理科研究生开了一门课,学习FORTRAN 77,老师叫王淦澄,在学校的计算中心的一台中型机上上机实习,那台富士通-FM340具有近50个终端,具有8MB内存。采用TTS方式为每个终端分配一个时间片,感觉就象自己用整个计算机一样。我的第一个ID就是FORTRAN 77的帐号,现在还一然在用,所以在所有的free email系统上都有这么一个帐号。 UlcH%pxTt1  
)yG"^Ulu  
课余时间就在老师的电脑上自己练习。那时候我们用MS-DOS3.30,编辑器是一个行编辑程序,叫edlin,就是一次只能编辑一行。另外有BASIC程序,我的大师兄已经留校,他会用BASIC编程,让我觉得很神奇。主要是处理样方资料,我有时会给他打个下手,也在边上偷学几招。 6"/WZmOp  
HOoPrB m  
另一个同届的师兄也是山东人,但是他是本校毕业的,学过BASIC语言。那年他们系有10个左右报考了我老师的研究生,可是只有他一个人过线。而我属于委培的,虽然过了线,但不需要分配。 59r_#(u o  
,CvG 20>  
入学成绩还是比较高的,没有阿散那么牛,敢自废一门武功。唯一的强项是外语,在考场里答了两个小时,算了半小时分,差不多有70分了,就出去在监考老师的眼皮下转了一圈。最后是73分。 g7\,{Bw#E  
-d+aV1n  
入学后参加一次过关考试,那时没有CET-46什么的,就是自己考试。没想到居然过了,获得了免修的资格。多年以后我才发现吃亏了,因为我从来没有上过听力课。读英语是山东口音,听力约等于0. 师兄要去上课,所以办公室有事的时候,老师会说,小W要去小课,那这事小C你来做吧! ^T5X)Nu{=C  
q%(EY M5Y  
那个年代的计算机不叫电脑,约一两年后普及了才叫微机。而且都是原装机,没有任何中文资料,随机资料除了DOS外,就是纸质的DOS3.30 Quick Guide, User's Mannual(DOS命令详解),还有一本厚厚的最珍贵的资料叫DOS Technical Reference. G7GZDi  
69m ;XdkKz  
老师为了方便我们学习,给了一把办公室的钥匙,晚上可以去上机。别的没学到,游戏却玩疯了。那时最热门的游戏是警察抓小偷,还有几个用加密盘的游戏,我们就用DiskCopy命令去复制,如果不成功就换CopyWriter等专门软件。 "{D6J8 09  
P 1XK*GZ  
最邪乎的一次是周六晚上三点,我玩得手心出汗开始粘键盘了,去洗手的过程中听到计算机里有动静,就跑回来了。不知道过了多长时间,感觉脚下也湿了。低头一看,水漫金山。 vI1i, x#i  
NTo!'p:s  
原来我没关水龙头,而且下水道又堵了。

沧桑 06-13-2010 14:39
老伍在写交代材料啊,而且写在一个ZT的贴下,哈哈。

阿辉 06-13-2010 15:51
顺便也交待一下你那大学里的唯一一次恋爱怎样?

菩提老祖 06-13-2010 21:14
伍sir,我们要听你唯一的恋爱史~ 5xCT~y/a  
tVuWVJ4M  
S! Rc|6y%  
]rehW}  
引用
引用第4楼伍胥之于06-03-2010 08:25发表的  : $ _j[2EU  
挖了一个坑,一直没有填。今天翻出来,先填上一小段。人老了,就容易怀旧了。 ;-P)m  
KRAcnY;u  
我不是一个程序员,计算机系的课,一天也没有听过。 ]z/Zq  
dU)]:>Uz  
因为读高中的时候,没有听过计算机这个名词,考大学的时候,也不知道有计算机系。 Ub1hHA*)  
.......

wenwendywen 06-13-2010 21:36
好文。。。。。。。。。赞。。。。 [s:93]

卡拉 06-13-2010 21:49
老伍,对不住,我把你原来的英文标题改了,太不吸引人眼球了,有些人还当是英文的都不会去点击。我通篇读了一下,改成了现在的标题。如果你不喜欢,可以改回来。

阿散 06-13-2010 22:03
用户被禁言,该主题自动屏蔽!

懒惰鬼 06-13-2010 22:06
我看到过最牛的一台工业电脑是在宝钢一期工程, CPU用小型IC拼出来,内存16k字节,带了十六台打印机,日夜地不停地打印,因为没有足够的外存去存这些数据.该机为日本三菱重工出品,占了整整一个控制室.

阿平 06-13-2010 22:15
晕头, te|? )j  
o+w;PP)+=  
是ZT, 还是你写的? r3E!dTDWq  
fyTAou6hI  
交待清楚啊 !pTJ./  
{8$=[;  
E`int? C!  
[s:94]

卡拉 06-13-2010 22:23
引用
引用第13楼阿平于06-13-2010 22:15发表的  : T>TWU:  
晕头, ]aP= Ks%  
[x= jH>Y  
是ZT, 还是你写的? 32DbNEk  
"Z Htr<+  
交待清楚啊 &|>S|  
.......
L`f^y;Y.  
依我对他的了解,应该是在说他自己。原创了。不过,我也不明白他为什么要用个英文标题,还标明是转贴来忽悠大家。

阿散 06-13-2010 22:24
用户被禁言,该主题自动屏蔽!

阿平 06-13-2010 22:25
哦, 打倒忽悠大家的家伙.  [s:94]  [s:94]  [s:94]

阿散 06-13-2010 22:29
用户被禁言,该主题自动屏蔽!

伍胥之 06-14-2010 12:30
TNND! T|J9cgtS  
Zl 9aDg  
天生没有作家的潜质。 kiUGZ^k\s  
]]7 mlQ  
在WebBrowser里打了很长一段,因为一个DEBUG命令,导致了严重的卷锁定错误,然后重启,然后就没有什么然后了。 ,B?~-2cCz  
- ;f*VM.a  
也没有心情再写了。 Volume Share Violation. glDcUCF3  
<,o>Wx*1C  
仅仅是一行 L 200 2  0 1嘛!不让读就不让呗!干嘛跟我过不去呢? oSiMpQu08  
0a8/B>  
Sigh!!!!! A.<H>=Z# O  
E_Z{6&r  
rX_@Ihv'  
fjvN$NgVs  
O~j> ?  
valtev0<  
8fA_p}wp  
'z76 Sa  
Z^ }mp@j>  
.

伍胥之 06-14-2010 12:33
引用
引用第17楼阿散于2010-06-14 12:29发表的  : J+rCxn?;g  
每个人的故事对其他人都是故事, fYKOJ5f  
自己的故事也是其中之一. Qt_dEl  
跳出来看, COH<Tj  
不过是众人中的一个人的故事. hxce\OuU0h  
:0Z^uuk`gq  
.......
mF` B#  
oFjIA!  
我平生唯一参加的计算机考试就是职称考试,任选4个模块。 n]8<DX99Q0  
;^t{Il'j  
我连一级也没有考过。 z/i+EE  
~l;[@jsw F  
小打小闹地玩而已。 dJ$"l|$$  
r0p w_j  
英语只是在当看考研中挫子拔将军算是强项,是跟自己比。因为一门专业课我没有学过,也是因为我们学校没有人开,领导才决定让我考完了回来开设这门课的。

newport93 06-14-2010 13:47
引用
引用第18楼伍胥之于06-14-2010 12:30发表的  : LYlDc;<A  
TNND! 3?Y2L  
O=u1u}CP?  
天生没有作家的潜质。 +P.+_7+:  
]Q[p@gLd  
在WebBrowser里打了很长一段,因为一个DEBUG命令,导致了严重的卷锁定错误,然后重启,然后就没有什么然后了。 *~w[eH!!  
.......
* #TUGfwy  
老五,I 服了U。 d,Y_GCZ7|W  
\*=7#Vd  
哪一天等俺退休了,也写一个The Non-Progamming career of an ex-programmer。哈哈哈。。。。。

阿散 06-14-2010 22:33
用户被禁言,该主题自动屏蔽!

伍胥之 01-20-2011 20:34
爱上DEBUG @?h/B=5 6  
N},n `Yl.  
对电脑的了解是始于游戏,这大概是男孩电脑水平普遍高于女孩的原因之一吧?多数男孩都爱玩游戏。 ?%H ):r  
$-[CG7VgX%  
那个时代已经有钥匙盘了,就是这个软件你复制到别的盘上不能玩,必需在这个母盘存在的情况下开始运行。有时,软件在B盘上,但母盘在A驱动器中,运行过程中的某个环节,它读一下A盘,就可以继续了,之后你可以把母盘取出来。 0uBl>A7qhn  
/x3/Ubmz~x  
道高一尺,魔高一丈。 JxyB(  
i<pk6rO1  
拷贝工具就应运而生了,DOS本身的DISKCOPY只可以复制系统、隐藏的文件,不能读非标准磁道与扇区,所以一般游戏盘它是复制不了的。我当时用过copyII、Copywriter等几个工具。 bH"hX  
T |tOTk  
可是游戏盘开发商也会与时俱进的。后来的游戏用这些东东就无法复制了。 3sd"nR?aX  
j0@[Br%7  
那个年代没有《电脑报》、《电脑爱好者》这样的交流攻略的地方,只能自己瞎琢磨。手头的资料就那么几本,还都是英文的。 GF3/RT9  
O%r;5kP  
我发现在DOS盘#2上有个DEBUG,不知道什么意思,但是看了简单说明,可以控制一个程序的运行。 uZ;D!2Q a  
b!M"VDj Q  
于是乎,我疯狂地爱上了debug. aZ\ UrV4 ,  
LM2TZ   
用debug加载一个游戏,跟踪它的运行。遇到一个CALL就直接过去,如果这时游戏程序检测到D盘片,就重新运行,直接运行到这个CALL的地方,再trace进行,如此循环往复,直到遇到某个判断的地方,可以通过修改这个指令,而让D版盘可以运行。中间不知道死机重启多少次。 >E*$ E  
.*elggM  
慢慢地,玩游戏的乐趣,已经不如跟踪游戏的过程好玩了。 sXNb}gJ  
?yh}/T\qp  
DOS水平那是大有长进,后来,我不在办公室,只要师弟们告诉我显示器上显示一句什么话,我就可以远程指挥他们该做什么了。 m rX^2SR  
*Q1~S]g  
话分两头,且说那FORTRAN语言学习,那可是课程任务呢!导师很重视,专门在计算中心开设了一个科研经费付款的帐号,让我们可以不受限制地上机学习。我真是如鱼得水啊!没课的时候,肯定是在机房里。跟机房的老师也熟悉了,他们都认识我。所以我经常早饭后去,中午他们关门时,值班老师并不赶我走,我会一直在那里直到晚上下班。最后的结果是把胃饿出毛病来了。 =y=cW1TG  
ayAo^q  
FORTRAN学得也不错,可是考试成绩却一般,没有预期的好。因为最后一个大题改程序,我把equivalence语句的含义弄错了。这个语句就是相当于C语言的union,可以用不同的变量名和数据类型访问同一个存贮区域,说实话,我没用过,上课时也没有弄懂。一个20分的题做错了。 z({hiVs  
#r3l[ bKK  
课程结束,回到办公室的PC上,FORTRAN的compiler太大了,勉强可以运行,而且编译在一张盘上,连接和库在另一张盘上,很不方便,调试更没办法。 ZJlEKib%2  
.^b;osAU  
所以还是玩BASIC吧! W_0>y9?  
^e+a  
语言总是相通的,学BASIC只是快速地读了一遍BASIC的英文随机资料,一个简单的教程,就可以编个小程序了。 k}~O}~-  
(Vo>e =q  
[插曲:]我们的电脑是个CGA 显卡的,但是分辨率低,从来都只显示白色。倒是人家的herculeus显卡显示绿色分辩率比我们的还高很多。我在BASIC中用color语句随便试了一下,原来它可经显示16种颜色呢!还有高亮、闪烁、反色等几种变化。后来,终于在320X240模式中显示出了256种颜色,当时真的很激动啊! Qt|c1@J  
GguFo+YeZ  
有人给我们送给我们一个很好的全屏编辑程序,叫WordStar,Microsoft WORD的DOS版就是收购了wordstar后才推出的。感觉真是太好用了。它帮了很多忙,也为我闯祸提供了条件。我在它的盘里找到了配置文件,把它调成了彩色的,可以显示出不同的字体(bold, italic, underlined, strikethrough)和不同的颜色。受到了老师和师兄的表扬。 np~~mdmRK  
.!JVr"8  
有了这个程序,我们的活就更多了。以前老师写文章都是纸版的,不用我们管。现在有了这个程序,我们就负责录入电脑,老师再修改。我们老师是个极其认真的学究型老夫子,对文章是一点点推敲,对每一种植物都反复核实。老师一辈子文章不多,不过篇篇是精品。我因为课少,所以经常被老师叫去改文章,我也很愿意做这种在电脑面前的工作。 ek&kv#G  

伍胥之 01-20-2011 20:45
[插曲:]我的老师其实在植物分类学上有很高的水平,记忆力也特别好,能记住绝大多数植物的拉丁学名。我面试的时候,老师给了我10种植物的学名,我只认识9种。当然这9种是华东常绿林的主要成分,是我背过的,多数植物我并没有见过。但那个不认识的学名,却是华北常见的也是我认识的,叫山楂。当然老师不是用这个名字考我的,而是用的学名Crataegus,我没有准备,所以不认识。老师语重心长地教育我说:“这个可以你们北方常见植物啊!你应该认识的。”我们老师的观点是,植物的中文名重名者异名者多,如果你没有从检索表上把它跟相近植物分开,你还是不认识这个植物。像前面的山楂,同属的多种植物都可以叫山楂,但是Crataegus pinnatifida才是其中一个种的唯一标识,所以如果不能确定学名,就等于不认识这种植物。 $+7`Dy!  
{[+2n]f_G  
受老师影响,我开始注意植物的学名,想想学名所代表的意思。后来,一个样方中上百种植物,我基本上能看到学名知道是哪一种了,但写不下来。所以在给导师打印完稿子后,我读一遍就能发现一些学名的拼写错误,如果觉得有问题再查一下书确定一下。这样,老师也喜欢把手稿交给我来处理了。我用电脑玩电脑的机会就更多了。 \W%UZs  

猪小秘 01-20-2011 20:46
>"Q@bQ:e  
J+f!Ar  
先坐位置!! w4fW<ISg  
好激动。。。 7==f\%,  
"]\+?  
植物英文名字,HO MY LADY GUAGUA, ,6r{VLN  
Zk[&IBE_  
不懂哇;; [xKd7"d/n  
i<(Xr  
电脑编程,哇咔咔,更是一片迷蒙呀

猪小秘 01-20-2011 20:51
伍SIR,再次抱拳佩服

伍胥之 01-20-2011 20:52
最终,我把自己差点玩死。 D$JHs4  
1 `KN]Nt  
话说有一周五的晚上,我在办公室玩游戏,需要一张盘来拷贝一下。 xzx$TUL  
#Z5}2soA  
找出一张盘,打入了一个命令:del *.* 5y?-fT]X  
M'!U<Y -  
电脑问我:Are you sure?[Y/N] c*R/]Dn   
[}fv  dW  
我想也没想就回答:Y LzCw+@-umw  
'FY JMIs  
然后,驱动器的红灯亮了一下,盘的文件都删除了。 ek N' k  
<EST?.@~+  
突然,我心中觉得那儿有点不对劲。“这盘上的文件是不是老师的文章啊?” y_.!!@,  
Zy09L}59P  
抽出盘一看,果然。 It75R}B   
h;jIYxj  
再去找找别的盘,看有没有备份。 oP4GEr  
Zc?ppO  
没有。 "kc/J*u-3  
2W$cFC  
背上的冷汗开始往下流了。 E#F/88(  
Yf[Qtmh]I  
发呆。 )*:`':_a  
-------------------------- N;+[`l  
那个年代我们的电脑连硬盘都没有,就两个360KB的5.25英吋的软盘。而且那3M盘贵得很,也没有养成备份的习惯啊! >fIk;6<{  
-------------------------- >,DbNmi  
5pn)yk~  
这可咋办哩?????那可是师兄弟几人改过多少次的文稿啊!如果让我再重新输入一遍,估计得几天,而且还要校对若干遍。咋向老师交待呢? B7z -7&TE  
;m2<eS`o'  
}Nb8}(6  

angela_whz 01-21-2011 16:40
雾里看花哦,惭愧

newport93 01-21-2011 17:06
老5从FORTRAN玩起的啊,那是相当的牛! _ A 0w[ n  
RW P<B0)  
现在玩什么了?

伍胥之 01-21-2011 22:11
用DEBUG恢复被误删除的文件 ./$cMaDJ  
U!m @DJj  
(继上节) B*gdgM*`  
|$7vI&m  
只流冷汗也不是办法啊!还得想辙。 q5 L51KP2  
%K]euEqs  
那个年代我们用的的PC没有硬盘,而且固化的BASIC(如果没有DOS盘引导,会自动进入ROM BASIC)还支持用录音机做外存贮器。我们用的Word Star在存贮文件时,那个盘要咯吱咯吱响半天才能存上。可是DEL *.*的命令执行时,驱动器的红灯亮了一秒种都不到啊!而且马上听到驱动器也停止了转动。 u~)`&1{%  
^S6u<,   
联想到录音机的原理,再想想用录音机的磁带做外存。显然,DOS并没有把盘上的内容重新擦写一遍,东西还应该在盘上的。 sp* Vqd  
pZU9^Z?~6  
可是,怎么找出来呢? @ps1Dr4s  
~l2aNVv;  
把盘藏好,找出DOS3.30的Technical Reference(全英文,3cm厚,有DOS命令的各个参数的详细说明,还有DEBUG功能、各子命令及常用汇编指令,8086体系说明,磁盘布局参考etc),连夜看吧! <ioO,oS'  
C^ )*Dsp  
一晚上看了一遍,头大啊!不懂、不太懂、似懂非懂。不管这个,硬着头皮看到底。已经熟悉的DOS命令跳过,仔细读DOS命令的功能,没用的参数的说明。 CwX Z  
|g3?y/l  
看不懂没关系,先看完后面的,再回头重读一遍。有了对后面内容模糊的理解,第二遍看前面的内容就容易多了。这一点成了我后来读别的书的诀窍。 O3CFme  
'u` .P: u?  
但是,DOS命令详解后面的部分,看起来跟我要完成的任务有关联了。我用了一个白天,把这部分读了两遍。明白了track(cylinder), side(head),sector这些术语,知道了BOOT sector, FAT(File Allocation Table), 根目录、子目录的存贮位置,分清了逻辑扇区与物理扇区,还明白了文件存贮是以cluster为单位而不是以sector为单位(DOS中软盘上每个cluster包括两个连续的logical sector),还知道了8086的寄存器(registers)、标志寄存器(flags),对stacks也有了一点印象。 R-:fd!3oQ  
95<EN (oUD  
晚上,找出一个没用的盘,先练练手再说。 >*wtbkU  
*~/ OOH$"  
用了两个小时,把一张格式化后的盘,写入一个文件,再删除。研究明白了磁盘文件在盘上存贮的位置及DOS如何通过FAT找到文件所在的方式。可以手工恢复出一个文件了。 Rml2"9"`  
LjU'z#  
信心大增,虽然已经两天一夜没睡了,此时反而更有精神了。既有了恢复文件的信心,更觉得这是一件很有趣的事了。 $\k0Nup}  
Q# IG;  
拿出来要恢复的盘,再找出几张确定是可以用的旧盘作为工作盘。这回我学精了,尽管我要恢复的那盘上面啥文件也显示不出来了,我还是给它做一个DISKCOPY,因为我已经明白这个命令根本不管文件,只是逐磁道逐扇区地读写复制,所以再复制出来的盘,跟我del *.*后的那盘是完全一样的,这样我万一失败了,还有个backup. nW|wY.  
DvM5 k  
一个小问题来了。那盘上其实都快满了,所以文件存贮得不连续。FAT已经被清空,通过根目录索引到文件的第一cluster(我毕业的89年,我见到中文版DOS参考,知道这个词被译为簇)与后面紧邻的或中间的某些簇不属于同一个文件。 VS&TA>  
)3(;tT,$}^  
这个就比较好办了,文件内容我自己是熟悉的,知要能读出这些扇区,我就能把它们正确地拼接在一起。 )3h^Y=43  
[2|kl l  
天亮了。我的活也干完了。 Iz[@^IUx=  
^3hn0DVQ  
----------------- d`1I".y  
后记:在我做完这个之后一年,我的师弟在植生所同学来访,给我带来了PCTOOLS 1.0版,里面有一个undelete功能,对于连续存贮的文件,可以做到一键恢复的。这个功能后来被DOS4.00以后的版本也收入了。可惜,我那时不知道有这个东东啊!可是,如果我有这样的工具,我还需要明白我还会弄明白DOS里面这些门道吗?可是的可是,我明白这些好像也没啥用啊! mYU9 trHV  

洋洋 01-21-2011 22:24
文盲我掩面羞愧!

伍胥之 01-21-2011 22:27
认识TSR程序 !yhh8p3  
$TI5vhQ  
上面那个朋友在给我PCTOOLS的同时,还给了我一个叫SK的东东,全名我都忘了[现在想起来了,叫SideKick,非常经典的TSR程度]。那是我接触的第一个TSR(Terminated and Stay Resident [in memory])程序。程序运行后,控制权又回到了前台的command interpretor(DOS的COMMAND.COM),但可以通过某种方式被唤醒或在后台执行。这是对单任务的DOS的一个补充。 X<R?uI?L   
K6ol YG>  
那个东东对我的朋友似乎没啥用,但是我觉得很好玩,而且找到了它的用武之地--玩游戏、学汇编。 ( 9]_ HW[  
>s`J5I!  
因为SK可以把在它里面编辑的内容,按某个功能键后,模拟DOS的键盘输入发送到前台来。这样,我过去跟踪修改游戏的过程可以记下来,存在SK中。当DEBUG加载某个游戏后,可以把跟踪执行和解密的过程变成自动化。 MfmACd^3$  
类似这样的东东: yObuWDA9  
jV8q)=}*)  
G 100 1E5 (从IP=100运行到0x1E5位置) t 5[[JD 1V  
T(单步运行) kapC%/6"  
E AX 200 (将AX寄存器的值修改为0x200) jP~Z`y f  
G(解除跟踪,继续运行) @JW@-9/  
smm]6  
只要一按这个功能键,就可以自动运行了。 *Y@nVi  
"YB** Y   
小试鸡刀,也很兴奋了一阵子。 }(<%`G6N  
Pm$q]A~  
那年代的游戏一是很有限,三是很难得。所以,手头上的游戏很快就玩腻了。再玩点啥呢? eznypY=  
1EyL#;k  
玩汇编! S(mF%WJ  

伍胥之 01-21-2011 23:03
瞎子摸象玩汇编 ai*f F  
@zgdq  
没有系统地读过8086指令,没有编译器,就靠对DEBUG的瞎琢磨,靠DEBUG的U(unassemble)和A(assemble)命令,我就莫明其妙地玩上了8086汇编。 # 6! 5 2  
R=T qj,6  
大体上知道8086的一些指令,但是我连补码、反码都不明白(现在也不太明白,就知道FFFF=有符号整数-1=无符号整数65535),我只会十进制、十六进制与二进制,别的进制都算不出来。基本上就是靠反汇编DOS外部命令、跟踪指令执行并观察寄存器与存贮器的变化,理解了8086的全部指令。 ,hVvve,j}  
^_ojR4  
唯一的参考还是DOS技术参考,上面有许多指令介绍,关键是有DOS功能调用详解(INT 21h),相当现在编程的API接口了。也有INT13h(磁盘操作功能调用接口)的基本说明。 apk4 j\i?5  
)(7&X45,k  
自己写个小程序玩玩怎么办呢?哪些跳转地址咋确定呢? '<0J@^vZ  
.6OgO{P:  
先在SK里面估摸着写出来,汇编后,根据实际地址改在SK中修改。如果我先写一个jne 120, 用A汇编后发现要跳转的地址不是120h,而是12Eh,再在SK中改成JNE 12E,再重新汇编一次。 9h0X&1u  
lH ZU iB  
利用这么笨的办法,我写出了我的第一个汇编程序,把它存贮为a.com。运行没有死机,没有导致DOS崩溃。当然,这个程序做不了什么事,也不是“Hello World!”,因为我不是程序员出身,没受过这样的专业训练。所以,我在任何语言中,都没有写过“Hello World!”。事实上,它只是读出了磁盘上的第一个扇区,并把引导失败的信息“disk boot failure”显示出来而已。 TT9z_Q5~  
M3~K,$@  
---------------------------- 2!Bd2  
等我进入研三的时候,我才拿到了MASM编译器,后来又有Turbo Assembler,才明白啥叫“宏汇编”和“宏”(Macros). |+$% kJR=  
所以,以前自己做的事,都是典型的瞎子摸象。 /\) a  
DD44"w_9  
6; Y0a4Ax  

伍胥之 01-21-2011 23:25
第一次见到硬盘 oBUxKisW  
(Y^X0yA/  
话说那时IBM-PC早已进入IBM-PC/XT时代,XT就是PC的eXTension,唯一的不同就是多了一块硬盘。仍然2万多一台。基本上同一时期,国产兼容机开始出现,长城0520啥的。兼容机的名词从此诞生,它意味着“100% compatible with IBM-PC”。 f7I{Wf Z\P  
\u&_sBLKV  
IBM当时为了推动PC的发展,开放了IBM-PC的标准、接口规范,用现在的词,叫架构(archetecture)。这个开放,促进了80x86系统的发展,为全世界创造了无数的硬件制造与软件编程就业机会。当然最后也把自己埋进去了,现在它的PC事业部都归联想了,叫Lenovo Thinkpad,在此之前,联想叫Legend. W(hMft%  
Cg616hyut  
可是咱学校穷啊!更新换代太慢。 (5Sivw*mP  
cVwbg[W]  
但是设备处不是有咱的亲戚嘛!而且俺系办周主任不仅老公在设备处,而且儿子也去了计算中心工作。结果研三刚开始的时候,人家不知从哪儿给找来一块外置硬盘。 }$\M{# C~  
#oJ5k8Wy  
这块硬盘啊!哪叫一个壮观!自己有单独的220V电源供电,个头跟后来的小型UPS差不多,硬盘主体是全高,盘面直径也是5 1/4英吋。两片盘,所以有4个住面,320条磁道, 每磁道有17个扇区,总容量高达10MB!牛吧?而同期的软盘才360KB,与它同时的苹果II只能读写单面软盘180KB. vS;1/->WD  
Va$Pi19 O  
海量存贮器啊!可以想像当时我们的兴奋了。 u0`%+:]0  
---------------------------- QORN9SY  
工作后,我们单位一台XT机的20MB硬盘坏了,听着主轴电机在转,但是驱动读写臂的步进电机就是没动作。我大着胆在我们的超净工作台上把它拆了,把读写臂来回拨了几回,居然就修好了。 hd 0 'u  
Z#.f&K )xX  

伍胥之 01-21-2011 23:45
第一次在PC上看到汉字 eyp,y2Tz  
Zatf9yGD  
88上半年的时候,我已经在计算中心的富士通M340中型机上看到他们的汉字输入了。那太壮观了!有一个或几个写字台那么大的输入面板,上面印着5号字那么大的6000多个汉字符号,就是GB2312-80字符集,前半部分常用字按拼音排列,后半部分按笔画排列。有一支专用的笔,在那个面板上找到需要的字,点一下,就输入到系统中了。 B>Wu;a.:L  
^2wLxXO6  
下半年,周主任的儿子给我们拷贝来了中文系统,终于我们的CGA显示器上可以出现中文了,只能在640X480或320X240模式下显示汉字,每屏也只能显示10行字。而同时期的Herculeus显卡还不能显示汉字。 .`CZUKG  
+-B^Z On  
有了汉字显示还不行,没有编辑软件啊!因为Word Star没有汉化版,所以中文文件的编辑又回到了行编辑时代了。不要想当然地认为我解决了这个问题。我那时还没有这个能力,只是我已经明白汉字的编码原理了。我能在键盘上不用任何输入法敲出一堆汉字,按住ALT键,用小键盘上的数字打出两组161-255间的数字,就会出来一个汉字。 $v8l0JA *  
4:9KR[y/  
大约几个月后,我们有了中文版的Word Star。但是汉化得很蹩脚,经常在屏幕的右边显示半个汉字,因为wordstar是单字节处理的,不像后来的DBCS系统。我知道应该在程序中加入一组判断当前行最后一个字节是否属于一个汉字的第一字节的处理方法,不过程序不是反编译后重新改写的,而是在原有的可执行文件中做的修改,所以指令多了加不进去。 5 |/9}^T  

伍胥之 01-22-2011 00:02
第一个宏汇编程序 v=95_l  
Ix|~f1*%  
工作后不久,单位里我所在的小组有了一台浪潮0520(XT兼容机),有了硬盘,有了汇编编译程序,就开始玩汇编了。当然那时的主要工作是用dBASEIII,这个我已经在读研期间自学会了,读了一本关于dBASEIII plus的英文书,编个dBASE/FoxBASE程序已经是小菜一碟了。 p N\Vr8tJ  
N0>0z]4;q  
那时候的硬盘老出点问题,经常碰上个“Error reading data....” 啥的小毛病,但是换又不方便而且很贵。PCTOOLS与NORTON DISKEDIT扫描盘比较慢。我就自己写了一个磁盘扫描程序。算是用汇编写的第一个正式的有点用处的程序吧! AfC>Q!-w  
m4:^}O-#  
这也是我现在电脑里唯一一个汇编语言的程序了,其它都随着磁盘来回更换丢了。所以,还是在老大这里存一份留个纪念吧! >*$;  
1&:@  
比较长啊!所以可以自动跳过。 ESoAz o,u  
?m c%.Bt  
.286 B4XZko(  
.radix 16 3zT_^;:L  
data segment ;定义数据段 rfw-^`&{  
[j4v]PE  
VzJ5.mRQ  
msg  db 0dh, "Reading sector:$" !K? qgM  
msg1 db 0dh, "Writing sector:$" 8_K6 0eXz  
msgready db 0dh,0a,0dh,0a,"Reading/Writing completed!", 0dh,0a, "$" Tg3!Rq55  
B??J@+N f  
dsp         db "                $" U}$DhA"r"  
v_<2H' *Q  
;DAP *6BThvg|&X  
PacketSize db 16d; // 数据包尺寸(16字节) )f dE6  
Reserved   db 0; // ==0 1oKfy>ie  
BlockCount dw 63d; // 要传输的数据块个数(以扇区为单位) Qo = Kqv  
BufferAddr dw 0,0 ; // 传输缓冲地址(segment:offset) irk*~k ?  
BlockNumL  Dw 0,0; // 磁盘起始绝对块地址 $W;b{H=F  
BlockNumH  Dw 0,0; // 磁盘起始绝对块地址 Vpp;\  
I\ |  N  
;定位用DAP (复位到0磁道) t\v+ogbk)  
DAP0       db 16d ^h &I H|  
              db 0 j6(?D*x  
              dw 1 iBudmT8  
buff1          dw 0,0 %c)[ kAU!  
                        dw 0,0,0,0 xug)aE  
               7DlOW1|  
pG"5!42M!  
;DiskParameters !6}O.Nu  
infosize     dw 26d;                        WORD InfoSize; // 数据包尺寸 (26 字节) xmGk*W)P  
falgs         dw 0;                        WORD Flags; // 信息标志 _ IeU+tS  
Cylinders DW 0;                        DWORD Cylinders; // 磁盘柱面数 -A-tuyIsh"  
Heads            DW 0;                        DWORD Heads; // 磁盘磁头数 gw _$  
SPT                Dw 0,0;                                                 DWORD SectorsPerTrack; // 每磁道扇区数 =:+0)t=ao  
Sectors        Dw 0,0,0,0;    QWORD Sectors; // 磁盘总扇区数 /# <pVgN  
SectorSize    DW 0;                        WORD SectorSize; // 扇区尺寸 (以字节为单位) D7 "p}PD>~  
DF{OnF  
cmpsect  dw 0 T#Z%y!6  
\C 5%\4  
msgcyl  db 0dh,0a,"Disk Parameters",0dh,0a,"Total Cylinders:$" YK{a  
msgHds  db 0dh,0a,"Heads:$" /+e~E;3bO  
msgspt  db 0dh, 0a,"SectorsPerTrack:$" Iak0 [6Ey  
msgTotal db 0d,0a, "Total Sectors:$" NcCvm#  
msgSS     db 0dh,0a, "Sector Size:$" %PJhy2  
6Fy@s  
msgReadErr db 0dh,0a,"Error Reading Sectors:$" f f7(  
msgWriteErr db 0dh,0a, "Error Writing Sectors:$" $<p8TtI=YQ  
msgReset db 0dh,0a, "Reseting drive to Cyl 0" @DC)]C2  
0J~Qq]g  
YRlDX:oX~  
buffer  db 32768d dup(0); :c8n[+5  
^nVl (^{  
data ends ;数据段结尾 _7a'r</@  
Y\2|x*KwvF  
stack segment 7~M<cD  
db 400 dup(?) ESb ]}c:  
stack ends 8[ry |J  
$j)hNWI  
code segment ;定义代码段 l.nH?kK<  
assume cs:code ;规定cs的内容 fE,9zUo  
assume ds:data ;规定ds的内容 9SMiJad<  
assume ss:stack ]TstSF=  
hnWo|! ,O$  
start: A"Q@W<.  
pusha 0uCT+-  
=l<iI*J. M  
2i|B=D(  
mov ax,data ;程序从start开始 Q+i\8RJ  
mov ds,ax ;ds置初值,data的段地址 9N[EZhW  
c<+;4z  
;设置缓冲区 6#A:}B<?  
lea bx, buffer 8&V_$+U  
mov bufferaddr,bx @U -$dw'4  
mov buff1,bx ) uP\>vRy  
mov bx,ds X5g[ :QKP7  
mov bufferaddr+2,bx +CM7C%U   
mov buff1,bx SK$Vk[c]  
~YCuO0t  
lea di,infosize VhEMk\  
mov dl,80h N_75-S7Cm  
mov ah,48h Fl>]&x*~  
int 13h [&Hkn5yq  
^%y`u1ab  
lea bx,msgcyl dRvin[R8  
mov dx,bx >uJ/TQU  
mov ah,09 r+<{S\ Q  
int 21h ;1DdjETr  
mov dx,cylinders rsa&Oo D>  
call dispdx uHNpfKnZ  
f+vVR1  
lea bx,msghds jw6Tj;c  
mov dx,bx 8cHE[I  
mov ah,09 zGc(Ef5`M6  
int 21h u1K\@jlw  
mov dx,heads ix Z)tNz  
call dispdx p2x [p  
0"[`>K~7a8  
lea bx,msgspt w?csV8ot  
mov dx,bx 6gOe!m m  
mov ah,09 !.fw,!}hOD  
int 21h ;LJ3c7$@lf  
mov dx,spt+2 O_K_f+7  
call dispdx 6@4n'w{"  
mov dx,spt d`Q7"}uZ  
call dispdx *Zd84wRSj  
|dadH 7  
lea bx,msgtotal LZ*R[  
mov dx,bx (fo Bp  
mov ah,09 |Y_ -  
int 21h /&ygiH{^  
lea bx,sectors e,A)U 5X  
call dispqword :46h+?   
}1+%_|Y-E  
lea bx,msgss |)_-Bi;MW`  
mov dx,bx \)m"3yY  
mov ah,09 ! d9AG|  
int 21h >CgO<\  
mov dx,sectorsize 'PdmI<eXQ  
call dispdx K^%-NyV  
GO5~!g  
sbb word ptr sectors, 63d !D.0 (J  
jnc subok ? )3jqQ.  
sub word ptr sectors+2,1 TA}UY7v  
jnc subok E@ h y7X  
sub word ptr sectors+4,1 o4=Yu7L  
jnc subok R_D c)  
sub word ptr sectors+6,1 hv)7H)|l~]  
1K|@ h&@  
subok: 6&2LWaWMo$  
POU}/e!Ua  
%Ny) ?B  
G5]1s  
xor ax,ax lj&>cScC  
mov blocknumL, ax =?0QqCjK)  
mov blocknumL+2, ax KO]N%]:&~  
mov blocknumL+4, ax +lO'wa7|3  
mov blocknumL+6, ax dYOF2si~%  
i~qfGl p6)  
startread: A~-#@Z  
i+M*J#'  
call rwsect 2Eh@e([PMs  
d GgP_ S  
adc word ptr blocknuml,63d 4f1D*id*`#  
jnc addok =;c_} VY  
adc word ptr blocknuml+2,1 HW7FP]NH  
jnc addok 9EF~l9`'U  
adc word ptr blocknuml+4,1  YRB%:D@u  
jnc addok F'J [y"~_  
adc word ptr blocknuml+6,1 ACBQ3   
jnc addok g{pQ4jKF  
{w`:KR6o7  
addok: r>qA $zD^  
mov ax, word ptr sectors+6 _ py2kjA6  
cmp ax, blocknuml+6 nJ3vi}`  
jg complete heD,& OX  
jl startread <6N_at3  
mov ax, word ptr sectors+4 =g@9>3~{!  
cmp ax, blocknuml+4 !}&" W,,0  
jg complete q"aPJ0ni'  
jl startread {`.O|_b  
mov ax, word ptr sectors+2 +AQDD4bu  
cmp ax, blocknuml+2 nx4P^P C  
jg complete iH)Nk^   
jl startread >mIg@knE  
mov ax, word ptr sectors {^RG% &S  
cmp ax, blocknuml !eD+GDgE]  
jg complete )@:l^$x  
jl startread @eQld\h'  
, &' Y  
complete: ,9/5T:2  
u39FN?<^  
lea bx,msgready Q 2~5"  
mov dx,bx %]Cjhs"v  
mov ah,09 ?9U:g(v  
int 21 K%,$ V,#  
<lFY7' aY  
popa [wcA.g*F  
mov ax,3100h dhR(_  
int 21h ~LE[, I:q  
Z}cIA87U  
; .L;",E  
dispdx  proc near RLKj u;u  
pusha lg/sMF>z\f  
lea bx, dsp+3 P%o44|[][  
mov cx,4 C*wdtEGq  
A1JzW)B  
repeat0: 8l xY]UT  
mov al,dl Mz|L-62  
and al,0fh s j 9D  
cmp al,09h ! sYf<  
jg  add40 -gKpL\  
add al, 30h x% XT2+  
jmp okadd B7 "Fp  
add40: 3;BvnD7  
add al,37h |"}4*V_*  
okadd: ?ei%RWo  
mov byte ptr [bx],al jL4>A$  
dec bx I5pp "*u  
shr dx,4 XNmQ?`.2'  
loopnz repeat0 P%GkcV  
lea bx,dsp <lld*IH  
mov dx,bx m<fA|9 F#  
mov ah,09h ch,|1}bi  
int 21h <NQyP{p  
\C\gn]Z  
popa  ?f2G?Y  
ret E#h~V5Tf  
dispdx  endp { R*Y=Ie  
^L O]Z  
dispqword proc near 3&J&^O  
    pusha ZC\mxBy  
    mov cx ,4 5 ;vC(Go  
    add bx,6 Fd !iQ  
repeatdecbx:  ~u/@rqF  
    mov dx,[bx] e(\Q)re5Q  
    call dispdx H%.zXQ4}n  
    sub bx,2 ic~Z_?p  
    loopnz repeatdecbx 9A;6x$s  
    popa Wu{&;$  
    ret 9.Ap~Ay.  
dispqword endp *h,3}\  
3hJH(ToO  
rwsect proc near #Go(tS~o  
@6%gIsj<H  
lea bx,msg Y. TYc;  
mov dx,bx <3#<I)#  
mov ah,09h }GRMZh_8  
int 21h tBl#o ^  
utd:&q|}  
lea bx,BlockNumL jyjQzt >\  
call dispqword w4OW4J#  
rdI]\UH  
lea di, packetsize G `Izf1B`I  
mov dl,80h YmCbxYa7  
mov ah,42h +2O=s<fp  
int 13h ?N#[<kd  
jnc readok 4[l^0  
Es:6  
mov cx,5 g3a/;wl  
;出错后重试(定位0道后再重读) !1-&Y'+  
retryrd: jT"r$""1d  
lea bx, msgReadErr i ^S2%qz  
mov dx,bx FU]4oKx  
mov ah,09 |4xo4%BQ>  
int 21h P dM*5g4  
}vsO^4Sjc  
aiR5/ ZD  
lea di,dap0 ]piM /v\  
mov dl,80h &l!$Sw-u;  
mov ah,44h 6~:+:;  
int 13h t,?,F4 j  
;vUxO<cKFq  
lea bx,BlockNumL \L#QR  
call dispqword z+6QZQk  
<[8@5?&&  
lea di, packetsize 5vGioO  
mov dl,80h NTVHnSoHh  
mov ah,42h :C}Hy  
int 13h xK!DtRzsA  
jnc readok nhT;b,G.Z  
loopnz retryrd BA`:miH<  
Mryn>b`cB  
readok: 3B"7VBK{  
lea di, packetsize #L1>dHhat  
mov dl,80h T:n< db,Px  
mov ah,43h u[mY!(>nQ  
int 13h x)\V lR  
8}K"IW  
rwsect endp g =x"cs/[  
5\?3$<1 I  
code ends ;代码段结尾 4f jC  
end start ;结束汇编 V(I7*_ZFl  
^teaJy%  

伍胥之 01-22-2011 01:55
1989年上半年,迎来了那场有名的春夏之交的“风波”。 9i[4"&K  
u7(];  
俺那时也是热血青年,也自然而然地“围观”了那场运动。你懂的。 ,]U[W  
^hysCc  
接下来该写毕业论文了,我该发愁了。 h+xA?[ c=  
n>T:2PQ3  
所愁为何?那时的论文都是油印的,没有激光照排,都是工人手工拣铅字排版油印。可是我写得字太乱太草,印刷厂的工人不认识,排完版后就极难修改了,不像现在可以随便修改插入删除啥的。 4[_L=zD  
ULTNhq R*n  
没办法,自己打吧! r+TK5|ke  
AJ4r/b }  
可是,那时的输入法那叫一个烂啊!只有拼音码、区位码两种,别说联想,连词组都不支持。 \AJS,QD  
;&7,7 3!  
幂思苦想半天,自己写个程序吧! ]F_r6*<  
=?+w)(*0c  
当然,我那时写不了底层的键盘hooker程序,不能写真正的输入法。那就用BASIC语言自己连个联想库,把论文输入到一个文本文件中,再去word star中排版吧! %6Rp,M9=  
Uir*%*4:  
利用BASIC语言的定长文件记录功能(这样运行速度比较快),为每个汉字留下了20个字的联想空间,创立了一个Random Access的文件。用标准输入法输入一个字后,我的程序根据其编码算出它对应的记录号,读出这20个字,下一个字如果输个0-9的数字或[SHIFT]0-9的符号(如果是字母,会被传入底层输入法),则从我的联想字中选出对应的字,输入我自己的文本文件,同时调整它到该记录的第一个字(动态调频),如果新输入的是汉字,则将它加入记录中,作为新的联想字。然后根据新字找出它对应的联想字记录,以此类推。 E4i@|jE~)  
_]Ey Ea  
那个年代连办公用激光打印机都没有,我所有的只是80列宽或120列宽的针式打印机,EPSON-LQ1700K,当时算好的了,24针呢!也没有A4/B5纸可以用。最后,我的论文用80列打印纸打印出出来6份。除了答辩委员外,只留了一份给学校存档。我自己手中只有电子版。 mLULd}g/o  
w #<^RKk  
------------------------ To^# 0  
我不知道那时是否已经有联想输入法了。因为我跟计算机圈内的人接触很少,所以一切都是我自己在瞎摸索。在0530(80286)开始普及的时代,汉字输入法才有了明显的改进。 kyK'  

伍胥之 01-22-2011 02:35
有了硬盘为媒介,病毒也开始流行了。 v<+4BjV!J}  
CnQg*+  
等到我毕业的时候,国内的大专家对DOS研究就比较深入了,我在福州路书店买到了一本DOS3.00分析,把DOS的IBMBIO.com、IBMDOS.com和COMMAND.com都反汇编出来来了。 6mAB(X^+  
'oCm.~;_  
在我家门口,原来有个书店,叫黄河书店。后来有一次偶然进去,发现变成了电脑公司,叫LQ电脑,就是组装电脑的小店。我从这里买到了一本求伯君编写的《DOS高级编程参考》,虽然主要是编译的,但我认为那是我所读到的水平最高的电脑中文专业书籍了。我后来一直用金山毒霸而从不考虑其它,想来跟这个有莫大关系。 -+ko}He  
|I/,F;'  
然后,我就开始DEBUG病毒了。 *k!(ti[  
;fkSrdj  
跟踪病毒可真长见识啊!看病毒如何利用DOS或DOS的后门(undocumented DOS functions)给自己分配一块内存,如何驻留内存,如何在DOS打开并运行时来感染这个文件。觉得那比玩游戏可有趣多了。 - &NQ \W  
a.CF9m5]c  
启动型病毒就简单多了,仅仅在常规内存的顶端预留1-2KB,使系统向DOS报告的内存比原来少一点,然后修改INT 13的入口地址,监控对磁盘的读写。对付这种病毒那就简单多了,在病毒活动的情况下,只要找出它所保存的原始入口地址,覆盖掉就让病毒立马失活。再恢复一下磁盘的引导扇区就可以了。 Wv NI=>  
# hZQ >zcF  
但是,说归说做归做,我可以写出一个引导型病毒,也可以清除任意引导型病毒,但是从来没有写过杀毒软件,因为清除文件中的病毒比较麻烦。只是从病毒中学习了一些东西而已。 5Fr;  
qlEFJ5;  

伍胥之 01-22-2011 02:55
话说有一天周末,来到了家门口的LQ电脑,那里有许多计算机方面的书。我拿了一本就坐在那里看。 uNg'h/^NZ|  
m1i4,  
期间进来一人,言谈中知道这是国泰君安证券公司刚到我们这小城准备开张,公司里的一台笔记本坏了,放进软件格式化后盘仍然不能读写。那是我第一次见到笔记本电脑,Compaq 386级的,用的是3.5"软盘。  /+N|X  
!4pr{S  
来人很急,也不差钱,问能不能先换一个软驱。OMG!好几万的本本,换个软驱得多少钱? fIH#  
ennR@pg  
店里没有这样的配件,也不知道需要多少钱。 uX98iJ  
\P5>{ 2i  
我在旁边听着,感觉应该没有问题,格式化过程中并没有报错,说明写盘是没问题的,最大的可能是一个比较傻容易暴露的病毒。所以凑过去看了看。 |""=)-5N  
?^Pq/VtZ  
硬盘启动是没问题的。插上一张盘,dir显示盘未格式化。请出DEBUG来,输上几条指令,就把软盘0道0面1-12扇区读出来了。 }!=gP.Zu^  
mov dx,0 3)xbnRk  
mov ax,0200 Y.(v{l  
mov bx,1000 p}&Md-$1  
int 13 Z/n3aYM  
读盘正确!只是从读出的内容看,没有建立DOS正确的文件格式,果然是个傻病毒!再看磁盘中断地址,也不对。 6#O#T;f)  
99a \MH`^  
我心里有了数,示意店老板这机器没硬件问题。 S$\.4*_H\  
=9fEv,Jk  
老板会意,示意我别出声,跟国泰来的人说:“问题不大,可以修好,先交200元钱,下午就可以来取。” ^pN 5NwC5  
`i9N )3 X  
来人走后,我两分钟就把病毒清除了。再启动,软盘工作一切正常。  2aFT<T0  
6SV7\,2M  
店里的两人看到我没有任何工具,只用DEBUG就把这病毒清除了,当然觉得很惊讶! PE|PwqX  
#>" }q3RO  
聊了一会后,说:“咱店里的书你随便拿回家看,看过了如果不想留下,只要不影响卖,就拿回来,想自己留下就自己留下,钱的事好说!” >eRZ+|k?N  
5^b i 7J  
然后打电话通知国泰来取电脑,无非是做了简单的维修之类。 ]L$4P y  
x'zihDOI  
由此,俺有了一个小图书馆,可以借书看了。 :b <KX%g  
B% 2L1T=  
俺拿走的第一本书,叫磁盘加密详解。 u7n[f@Eg,%  

suehan234 01-22-2011 08:00
佩服,玩也玩得这么专业!

伍胥之 01-23-2011 07:35
从LQ电脑拿到那本《磁盘机加密原理》后,又让我读得入迷了。 8H7O/n  
Y+5"uq<'  
感觉过去加密盘的东西,一下子弄明白了。 !5 ? m  
rNZO.qij z  
1. 额外的磁道:5吋盘正常是40道,0-39,但是所有的软驱都可以读写第41道,42就不可靠了。3.5吋盘是80道,但是都可以读写82道,83就极不可靠了。因此,有些程序会将部分数据写在标准磁道外(实际上0道是最外圈,额外的都在最内部)。 \hrrPPD1z  
B(8mH  
2. 非标准扇区:正常的扇区都是512字节,用代码02表示,但是也可以格式化为1024、2048、256etc,甚至可以将整条磁道格式化为只有一个超级大的扇区(太大了读错的机会会更大)。这也是一种常用的方式。 5cgo)/3M@}  
{ v,{x1  
3.道缝/扇缝加密:这应该是软盘加密的终极方案。实际上没有道缝,因为步进电机是固定的。它都本质上都是扇缝。当格式化时,需要提供一个DAP表,表示了格化化条件参数,每道多少扇区,每扇区多大。格式化时,每条磁道上的所有扇区都是定长的。诀窍在于:每个扇区还有自己的参数表需要写入扇区数据区前面的信息块,这里面的数据包括[道号、面号、扇区号],还有一个最特别的数据是扇区长度。不是都是定长吗?为何还需要这个?怪就怪在这里!这个扇区实际大小是在磁道参数表中固定的,但是在扇区信息块中这个值是可以任意填写的。读这个扇区时,必须提供跟这个信息块完全相同的数据块,否则“Sector not found”会等着你。 所以这种加密方式是:格式化时在磁道参数表中提供了一个标准数据,但在扇区信息块中却给出了一个不同的数据。e.q. DAP中声明02(512字节),但是扇区信息块中却声明为03(1024字节)。当读该扇区时,如果指定用02读,扇区找不到,如果用03读,可以读出1024字节,可是实际上只有512啊!于是乎,它读出了下一扇区的信息块,所以会100%地出现CRC校验错误。这就是它的原理。 XzW7eO ,A  
!e&rVoA  
磁道的真正格式如下: -.^3;-[  
5Yn{?r\#F  
Sect1 信息区[标志-同步信息[n个F6]-CRC校验值]--扇区数据区[标志-同步信息[n个F6]-数据开始标志-数据区[2^n 格式化为F6]-CRC校验值]-Sect2[....] ---Sect n[.....] ,%[LwmET  
{:,_A  

伍胥之 01-23-2011 08:48
终极解决方案:INT 0E mF}c-  D  
B~WK)UR  
如果明白了这个机理,用汇编写个程序就可以轻易而举地破解了。 xv^Sh}\}  
:Jjw"}SfK#  
江民杀毒的DOS版都是用这种方式加密的。金山毒霸DOS版也是这样。 6NzBpur 2H  
pXve02b1B  
INT 0Eh是一个硬件中断,只为软驱操作服务。只要是软盘操作,最后都会产生这个中断通知系统操作结束。 AvyQ4xim+  
eN2dy-0  
所以,可以写一个INT 0Eh的服务程序,记录所以的非标准软盘操作。记下它的位置,保留在内存中某个地方(该中断响应过程中不可以进行磁盘操作,最好也不要调用任何DOS功能,否则可能会引起重入)。 TF%3uH  
C1KfXC*|L  
所以,当里的DOS杀毒出一个版本我就可以破解一个版本。不论是什么加密办法。把程序复制到硬盘运行,它一定会读钥匙盘,记录下来所有的非标准操作。不用修改程序,也不必跟踪它。然后根据钥匙盘的磁盘参数,在标准格式化完成后,再用自己的格式化程序,格式化出一条跟钥匙盘一样的磁道。也就是说,自己配钥匙盘。 {=s:P|ah  
6k:y$,w  
我用这种办法,复制出很多盘给朋友。可惜那时没有经济送脑,否则可以自己卖这种盗版盘了。 ix^gAot  
sr ;:Dvx~  
当KV2000Q版出现后,我突然觉得这技术上没有新意,就不玩了。也不再给他们解密了。除非是我自己用。  oHOW5  
VccM=w% *  
{> wI8  
KS b(R/T  

伍胥之 01-23-2011 08:56
硬盘加密 i3D<`\;r  
gxI&f  
软盘结构比较简单,编程也简单。所有的软驱都是在端口级兼容的。 ';&0~[R[  
J6eJIKK  
硬盘则不同,每个厂家都有自己的特别东西,所以访问硬盘只能通过INT 13h。这就限制了加密的方法。 r}ZLf  
kkT3 wP  
我见过的方法很少,一种是写在DOS分区外的某个地方一点东西。另一种是在安装时记录个别文件在盘上的物理位置。因为复制文件到硬盘时,OS根据当前盘上空余情况,选一个地方存这个文件。所以不同的机器上两个文件在同一个地方的概率为无穷小。所以它可以写一个文件,把它标记成隐藏与系统。这样就不比担心磁盘整理程序把它搬家。 g})6V  
L{Q4=p,A  
解密方法也简单,记录文件的物理位置,再复制时,检测一下该位置是否已被占用,如果被占用,把文件搬开。把那个特殊文件写入硬盘的指定位置,然后修改目录与FAT。 #FEa 5  
3R'.}^RN  
这个方法,比破解文件本身的算法要简单。

伍胥之 01-25-2011 06:55
这个坑是前几天在武汉期间没啥事填的。 ,.[.SU#V  
cES;bwQ  
我知道,其实多数同学都不太懂我写了些啥,因为太老了。 Cy<T Vk8  
"\4]X"3<+  
主要是人老了,有怀旧情结。 {d^Q7A:`  
~B<97x(X  
总结一下自己不务正业的过程,给部分同学一点点教训。 4sb )^3T  
`'*F 1F  

伍胥之 01-27-2011 08:12
日子不咸不淡地过着,我也不紧不慢地玩着。 T~s&)wD  
V_Xy2<V  
参加工作两年后,我教过的第一届学生中的一个,读研到了我所在的实验室。他是个很聪明的学生,跟我也很谈得来。 D*CIE\ +  
kNRyOUy  
他有一天下课后,把他自己上计算机课的课本带到了实验室---C语言。 JOJh,8C) 6  
yQ8M >H#J  
我拿起来顺手一翻,发现这个东东对初学者来说是太难了,但是我觉得很有趣。 Z "-ntx#  
$U~=.!_du  
把工作丢到一边,坐下专心致志地看一半个下午,看出味道来了,因为有汇编的基础,所以理解C的东西还是非常容易的。到了下班时间,仍然舍不得放下。于是拿回家接着看,居然看上瘾了,没有吃晚饭,也不睡觉了。到天亮的时候刚好看完。 r|l53I 5  
aF,j J}On  
我居然连续读了18个小时! l8er$8S}  
m{vT_ei  
再回到实验室,找来学生装上Turbo C 2.0,就开始下手编程序了。而且TC2.0 有非常好的联机帮助系统,需要啥函数看看说明就可以了。 ^I@ey*$  
Tku /OG'  
那个学生也非常聪明,我用电脑的时候,他就在旁边看,也不用问啥问题,我们随意地边聊边写程序。到最后,凡是我在电脑上用过的东东,他自己都学会了。 $[j-C9W  
==nYe { 2  
我们一起写了几个程序,把他上的生物统计学课程的各种检验方法都分别写出了一个个程序。据说,十多年后,我们学院的部分学生仍然用那个程序进行显著性检验。 ~l(G6/R  
s`;0 t YG  
|^Y*~d<H  

伍胥之 03-03-2011 14:21
VB+Win32 API N )'8o}E  
Y_$ ^:LG  
ASP

清水 03-03-2011 14:50
引用
引用第46楼伍胥之于03-03-2011 14:21发表的  : `x2fp6  
VB+Win32 API =>HIF#jU  
w/qQ(]n8  
ASP  yQ<6p3  
DhY;pG,t  
介个真的看不懂。 }/_('q@s\  
你说你老啦,喜欢怀旧了,才想起来填坑。 hm*Th  
提醒我也想想,是不是也老啦,是不是也有坑没填呢。

伍胥之 04-16-2012 13:43
又有点想学ASP.NET了。谁可以教我啊?

newport93 04-16-2012 20:02
引用
引用第45楼伍胥之于01-27-2011 08:12发表的 认识C语言 : hCU)W1q#  
日子不咸不淡地过着,我也不紧不慢地玩着。 FI3sLA  
;~}- AI-  
参加工作两年后,我教过的第一届学生中的一个,读研到了我所在的实验室。他是个很聪明的学生,跟我也很谈得来。 :X3rd|;kc  
d 8xk &za  
他有一天下课后,把他自己上计算机课的课本带到了实验室---C语言。 \7|s$ XQ\  
....... [ P.@1mV  
NFdJb\  
能搞得定C,还怕什么?网上很多sample, 看看你应该就会了吧。

伍胥之 08-29-2015 06:18
[attachment=78334]


查看完整版本: [-- [ZT]我和电脑亲密接触的心路历程 --] [-- top --]


Powered by PHPWind v7.5 SP3 Code ©2003-2010 PHPWind
Time 0.016564 second(s),query:2 Gzip disabled

You can contact us