查看完整版本: [-- [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 'oEFNC9V  
(卡拉注:可以译为“一个非程序员的编程生涯”)

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

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

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

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

菩提老祖 06-13-2010 21:14
伍sir,我们要听你唯一的恋爱史~ \e'>$8%T  
rm3 ~]  
s( Kf%ZoE  
@YpA'cX7  
引用
引用第4楼伍胥之于06-03-2010 08:25发表的  : Eto0>YyZ  
挖了一个坑,一直没有填。今天翻出来,先填上一小段。人老了,就容易怀旧了。 8C4 Tyms  
 A3'i -  
我不是一个程序员,计算机系的课,一天也没有听过。 ZwO&G\A^  
lP9a*>=a  
因为读高中的时候,没有听过计算机这个名词,考大学的时候,也不知道有计算机系。 Om>6<3n  
.......

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
晕头, qUpMq:Uw  
Y/gVyQ(  
是ZT, 还是你写的? IO^O9IEx,  
7:M%w'oR  
交待清楚啊 -BQM i0  
6],5X^*Y  
0Lc X7gU>  
[s:94]

卡拉 06-13-2010 22:23
引用
引用第13楼阿平于06-13-2010 22:15发表的  : Fo?2nQ<  
晕头, a}jaxGy  
w:M faN*  
是ZT, 还是你写的? Sw'DS  
N1#*~/sXh  
交待清楚啊 .~W7{SY[  
.......
Q$kSK+ q!  
依我对他的了解,应该是在说他自己。原创了。不过,我也不明白他为什么要用个英文标题,还标明是转贴来忽悠大家。

阿散 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! P-^Z7^o-bX  
!i)?j@D  
天生没有作家的潜质。 $G*$j!  
jew?cnRmd  
在WebBrowser里打了很长一段,因为一个DEBUG命令,导致了严重的卷锁定错误,然后重启,然后就没有什么然后了。 >K50 h  
@*%5"~F  
也没有心情再写了。 Volume Share Violation. oh& P Q{  
qr<5z. %  
仅仅是一行 L 200 2  0 1嘛!不让读就不让呗!干嘛跟我过不去呢? I!# 42~\  
'ky'GzX,  
Sigh!!!!!  De4+4&  
lpSM p  
*QjFrw 3  
UnW,|n8  
J]N-^ld\\  
 U]e;=T:3  
+(cs,?`\  
dx  Mz!  
*<Qn)Az  
.

伍胥之 06-14-2010 12:33
引用
引用第17楼阿散于2010-06-14 12:29发表的  : n~K_|  
每个人的故事对其他人都是故事, 1S.nqOfx  
自己的故事也是其中之一. 17<\Q(YQ=  
跳出来看, ZL1[Khr,s  
不过是众人中的一个人的故事. hz\7Z+$L_  
-I4@` V  
.......
lg1?g)lv  
~2rZL  
我平生唯一参加的计算机考试就是职称考试,任选4个模块。 ?LvZEiJ  
93o}vy->  
我连一级也没有考过。 8#7z5:_  
Dyt}"r\  
小打小闹地玩而已。 HlI*an  
h\D y(\  
英语只是在当看考研中挫子拔将军算是强项,是跟自己比。因为一门专业课我没有学过,也是因为我们学校没有人开,领导才决定让我考完了回来开设这门课的。

newport93 06-14-2010 13:47
引用
引用第18楼伍胥之于06-14-2010 12:30发表的  : \'E%ue_<9  
TNND! ,/o<OjR  
`+]4C+w  
天生没有作家的潜质。 _Y}(v( (;  
#p=/P{*  
在WebBrowser里打了很长一段,因为一个DEBUG命令,导致了严重的卷锁定错误,然后重启,然后就没有什么然后了。 AX]lMe  
.......
a8Ci 7<V  
老五,I 服了U。 <K4'|HU/  
roW8 4x  
哪一天等俺退休了,也写一个The Non-Progamming career of an ex-programmer。哈哈哈。。。。。

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

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

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

猪小秘 01-20-2011 20:46
g9'50<|J  
V ,*YM   
先坐位置!! -Ufd+(   
好激动。。。 k]ptk^  
[$OD+@~A2  
植物英文名字,HO MY LADY GUAGUA, L8/o9N1  
>bEH&7+@_'  
不懂哇;; Pm%ZzU  
\SA5@ .W  
电脑编程,哇咔咔,更是一片迷蒙呀

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

伍胥之 01-20-2011 20:52
最终,我把自己差点玩死。 ATk>:^n  
P[% W[E<  
话说有一周五的晚上,我在办公室玩游戏,需要一张盘来拷贝一下。 dkLc"$( O  
#@ 3RYx  
找出一张盘,打入了一个命令:del *.* Rfeiv  
O&E1(M|*>  
电脑问我:Are you sure?[Y/N] W>bhSKV%  
qYGnebn@\  
我想也没想就回答:Y 9k&lq$  
%* vYX0W"  
然后,驱动器的红灯亮了一下,盘的文件都删除了。 Xr6lYO_R  
Uk6Y6mU V  
突然,我心中觉得那儿有点不对劲。“这盘上的文件是不是老师的文章啊?” ^md7ezXL  
ZQsE07  
抽出盘一看,果然。 P/,7CfyPd  
8/Z JkI  
再去找找别的盘,看有没有备份。 :-ax5,J>q  
^['%wA%  
没有。 `-qSvjX  
o T5?*3f  
背上的冷汗开始往下流了。 2W$c%~j$2  
&CCB;Oi%  
发呆。 )}]<o |'  
-------------------------- !94& Uk(O  
那个年代我们的电脑连硬盘都没有,就两个360KB的5.25英吋的软盘。而且那3M盘贵得很,也没有养成备份的习惯啊! T{{J' _s5L  
-------------------------- U$ _?T-x  
<!-8g!  
这可咋办哩?????那可是师兄弟几人改过多少次的文稿啊!如果让我再重新输入一遍,估计得几天,而且还要校对若干遍。咋向老师交待呢? o8H<{D13  
KFCuv15w,3  
;)u}`4~L  

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

newport93 01-21-2011 17:06
老5从FORTRAN玩起的啊,那是相当的牛! fn&gM\<-+(  
>"5^]o2?~l  
现在玩什么了?

伍胥之 01-21-2011 22:11
用DEBUG恢复被误删除的文件 3!Rb {  
--Dw8FR9  
(继上节) :_p3nb[r  
:BC 0f9  
只流冷汗也不是办法啊!还得想辙。 s~IOc%3  
%*oz~,i  
那个年代我们用的的PC没有硬盘,而且固化的BASIC(如果没有DOS盘引导,会自动进入ROM BASIC)还支持用录音机做外存贮器。我们用的Word Star在存贮文件时,那个盘要咯吱咯吱响半天才能存上。可是DEL *.*的命令执行时,驱动器的红灯亮了一秒种都不到啊!而且马上听到驱动器也停止了转动。 R^f~aLl  
D3HE~zkI  
联想到录音机的原理,再想想用录音机的磁带做外存。显然,DOS并没有把盘上的内容重新擦写一遍,东西还应该在盘上的。 ^qIp+[/'  
|hiYV  
可是,怎么找出来呢? {!o-y=  
x,5$VLs\+  
把盘藏好,找出DOS3.30的Technical Reference(全英文,3cm厚,有DOS命令的各个参数的详细说明,还有DEBUG功能、各子命令及常用汇编指令,8086体系说明,磁盘布局参考etc),连夜看吧! 9K Ih}Q@P  
p%]* I?  
一晚上看了一遍,头大啊!不懂、不太懂、似懂非懂。不管这个,硬着头皮看到底。已经熟悉的DOS命令跳过,仔细读DOS命令的功能,没用的参数的说明。 />FrMz8;(  
HJ !)D~M{  
看不懂没关系,先看完后面的,再回头重读一遍。有了对后面内容模糊的理解,第二遍看前面的内容就容易多了。这一点成了我后来读别的书的诀窍。 4ME8NEE  
|t4k&Dkx`  
但是,DOS命令详解后面的部分,看起来跟我要完成的任务有关联了。我用了一个白天,把这部分读了两遍。明白了track(cylinder), side(head),sector这些术语,知道了BOOT sector, FAT(File Allocation Table), 根目录、子目录的存贮位置,分清了逻辑扇区与物理扇区,还明白了文件存贮是以cluster为单位而不是以sector为单位(DOS中软盘上每个cluster包括两个连续的logical sector),还知道了8086的寄存器(registers)、标志寄存器(flags),对stacks也有了一点印象。 X>wB=z5PXK  
V4l`Alr\L  
晚上,找出一个没用的盘,先练练手再说。 E`=y9r* Z  
/49PF:$?  
用了两个小时,把一张格式化后的盘,写入一个文件,再删除。研究明白了磁盘文件在盘上存贮的位置及DOS如何通过FAT找到文件所在的方式。可以手工恢复出一个文件了。 ryW1OV6?_0  
9c=Y+=<  
信心大增,虽然已经两天一夜没睡了,此时反而更有精神了。既有了恢复文件的信心,更觉得这是一件很有趣的事了。 U@ALo  
fP&F$"o8  
拿出来要恢复的盘,再找出几张确定是可以用的旧盘作为工作盘。这回我学精了,尽管我要恢复的那盘上面啥文件也显示不出来了,我还是给它做一个DISKCOPY,因为我已经明白这个命令根本不管文件,只是逐磁道逐扇区地读写复制,所以再复制出来的盘,跟我del *.*后的那盘是完全一样的,这样我万一失败了,还有个backup. gupB8 .!  
vD[@cm  
一个小问题来了。那盘上其实都快满了,所以文件存贮得不连续。FAT已经被清空,通过根目录索引到文件的第一cluster(我毕业的89年,我见到中文版DOS参考,知道这个词被译为簇)与后面紧邻的或中间的某些簇不属于同一个文件。 jt S+y)2  
Ys+Dw-  
这个就比较好办了,文件内容我自己是熟悉的,知要能读出这些扇区,我就能把它们正确地拼接在一起。 #CW]70H`  
q4xB`G  
天亮了。我的活也干完了。 ~Rs|W;  
{5 #P1jlT  
----------------- 4)]g=- 3  
后记:在我做完这个之后一年,我的师弟在植生所同学来访,给我带来了PCTOOLS 1.0版,里面有一个undelete功能,对于连续存贮的文件,可以做到一键恢复的。这个功能后来被DOS4.00以后的版本也收入了。可惜,我那时不知道有这个东东啊!可是,如果我有这样的工具,我还需要明白我还会弄明白DOS里面这些门道吗?可是的可是,我明白这些好像也没啥用啊!  ^G~W}z?-  

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

伍胥之 01-21-2011 22:27
认识TSR程序 InH R> ,  
y~SFlv36  
上面那个朋友在给我PCTOOLS的同时,还给了我一个叫SK的东东,全名我都忘了[现在想起来了,叫SideKick,非常经典的TSR程度]。那是我接触的第一个TSR(Terminated and Stay Resident [in memory])程序。程序运行后,控制权又回到了前台的command interpretor(DOS的COMMAND.COM),但可以通过某种方式被唤醒或在后台执行。这是对单任务的DOS的一个补充。 0{BPT>'  
{iYu x;(  
那个东东对我的朋友似乎没啥用,但是我觉得很好玩,而且找到了它的用武之地--玩游戏、学汇编。 {YcVeCq+N  
DcQ^V4_  
因为SK可以把在它里面编辑的内容,按某个功能键后,模拟DOS的键盘输入发送到前台来。这样,我过去跟踪修改游戏的过程可以记下来,存在SK中。当DEBUG加载某个游戏后,可以把跟踪执行和解密的过程变成自动化。 Q7N4@w;e  
类似这样的东东: a_`E'BkgU  
A0V"5syY  
G 100 1E5 (从IP=100运行到0x1E5位置) /21d%T:}  
T(单步运行) *O)_D bj  
E AX 200 (将AX寄存器的值修改为0x200) F$ZWQ9&5U0  
G(解除跟踪,继续运行) |n}W^}S5  
>#$( M5&}-  
只要一按这个功能键,就可以自动运行了。 -=Q_E^'  
PC.$&x4w1  
小试鸡刀,也很兴奋了一阵子。 XG<^j}H{}  
ed'}ReLK  
那年代的游戏一是很有限,三是很难得。所以,手头上的游戏很快就玩腻了。再玩点啥呢? /A9Mv%zjk  
GH7{_@pv8  
玩汇编! d?v#gW  

伍胥之 01-21-2011 23:03
瞎子摸象玩汇编 rPaD#GA[7  
$Y,,e3R3  
没有系统地读过8086指令,没有编译器,就靠对DEBUG的瞎琢磨,靠DEBUG的U(unassemble)和A(assemble)命令,我就莫明其妙地玩上了8086汇编。 3+EJ%  
uZ]B?Z%y#  
大体上知道8086的一些指令,但是我连补码、反码都不明白(现在也不太明白,就知道FFFF=有符号整数-1=无符号整数65535),我只会十进制、十六进制与二进制,别的进制都算不出来。基本上就是靠反汇编DOS外部命令、跟踪指令执行并观察寄存器与存贮器的变化,理解了8086的全部指令。 E,c~.jYc  
QTz{ZNi!  
唯一的参考还是DOS技术参考,上面有许多指令介绍,关键是有DOS功能调用详解(INT 21h),相当现在编程的API接口了。也有INT13h(磁盘操作功能调用接口)的基本说明。 k]qZOO}  
r{YyKSL1*K  
自己写个小程序玩玩怎么办呢?哪些跳转地址咋确定呢? = EyxM  
&VY;Al  
先在SK里面估摸着写出来,汇编后,根据实际地址改在SK中修改。如果我先写一个jne 120, 用A汇编后发现要跳转的地址不是120h,而是12Eh,再在SK中改成JNE 12E,再重新汇编一次。 CbQ@l@d]  
ngsax1xO  
利用这么笨的办法,我写出了我的第一个汇编程序,把它存贮为a.com。运行没有死机,没有导致DOS崩溃。当然,这个程序做不了什么事,也不是“Hello World!”,因为我不是程序员出身,没受过这样的专业训练。所以,我在任何语言中,都没有写过“Hello World!”。事实上,它只是读出了磁盘上的第一个扇区,并把引导失败的信息“disk boot failure”显示出来而已。 kZU8s'C  
T 2x~fiM  
---------------------------- (|' w$  
等我进入研三的时候,我才拿到了MASM编译器,后来又有Turbo Assembler,才明白啥叫“宏汇编”和“宏”(Macros).  >BrxJw#M  
所以,以前自己做的事,都是典型的瞎子摸象。 q&<#)#+  
8!VjXj"  
Zv7@  

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

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

伍胥之 01-22-2011 00:02
第一个宏汇编程序 u\t[rC=yd  
c`doR(oZ  
工作后不久,单位里我所在的小组有了一台浪潮0520(XT兼容机),有了硬盘,有了汇编编译程序,就开始玩汇编了。当然那时的主要工作是用dBASEIII,这个我已经在读研期间自学会了,读了一本关于dBASEIII plus的英文书,编个dBASE/FoxBASE程序已经是小菜一碟了。 0 WF(Ga/o  
iBp 7 1x65  
那时候的硬盘老出点问题,经常碰上个“Error reading data....” 啥的小毛病,但是换又不方便而且很贵。PCTOOLS与NORTON DISKEDIT扫描盘比较慢。我就自己写了一个磁盘扫描程序。算是用汇编写的第一个正式的有点用处的程序吧! I;P?P5H  
tborRi)  
这也是我现在电脑里唯一一个汇编语言的程序了,其它都随着磁盘来回更换丢了。所以,还是在老大这里存一份留个纪念吧! v 0rX/ mj  
yC+N18y?  
比较长啊!所以可以自动跳过。 wS``Q8K+dM  
}2`[email protected]  
.286 .Z%7+[  
.radix 16 <Ks?g=K-  
data segment ;定义数据段 kgr: 8 5  
/D1Bf:'(  
n 8AND0a1C  
msg  db 0dh, "Reading sector:$" `Jm{K*&8Q  
msg1 db 0dh, "Writing sector:$" ,=$yvZs4[]  
msgready db 0dh,0a,0dh,0a,"Reading/Writing completed!", 0dh,0a, "$" @]3(l  
oq8~P Tw  
dsp         db "                $" d2.n^Q"?3  
 KS*W<_I  
;DAP j"94hWb  
PacketSize db 16d; // 数据包尺寸(16字节) k`oXo%  
Reserved   db 0; // ==0 *XniF~M  
BlockCount dw 63d; // 要传输的数据块个数(以扇区为单位) Y0s^9?*  
BufferAddr dw 0,0 ; // 传输缓冲地址(segment:offset) i$"FUC~'  
BlockNumL  Dw 0,0; // 磁盘起始绝对块地址 45kMIh~~X  
BlockNumH  Dw 0,0; // 磁盘起始绝对块地址 "Y(S G  
B susXW$  
;定位用DAP (复位到0磁道) Vq9hAD|k  
DAP0       db 16d OiM{@  
              db 0 `c:'il?  
              dw 1 ni2H~{]z  
buff1          dw 0,0 ngeX+@  
                        dw 0,0,0,0 *ivbk /8  
               "MoV*U2s,  
Rn(|  
;DiskParameters pxI*vgfN7  
infosize     dw 26d;                        WORD InfoSize; // 数据包尺寸 (26 字节) LTzf&TZbx5  
falgs         dw 0;                        WORD Flags; // 信息标志 mNb+V/*x3  
Cylinders DW 0;                        DWORD Cylinders; // 磁盘柱面数  %ef+Z  
Heads            DW 0;                        DWORD Heads; // 磁盘磁头数 Sw5H+!  
SPT                Dw 0,0;                                                 DWORD SectorsPerTrack; // 每磁道扇区数 9?,n+  
Sectors        Dw 0,0,0,0;    QWORD Sectors; // 磁盘总扇区数 &CUkR6  
SectorSize    DW 0;                        WORD SectorSize; // 扇区尺寸 (以字节为单位) 3qpk Mu3  
+S;8=lzuV  
cmpsect  dw 0 wf|CE410  
hZ2PP ^  
msgcyl  db 0dh,0a,"Disk Parameters",0dh,0a,"Total Cylinders:$" d57(#)`  
msgHds  db 0dh,0a,"Heads:$" I=(O,*+PQ  
msgspt  db 0dh, 0a,"SectorsPerTrack:$" +QldZba  
msgTotal db 0d,0a, "Total Sectors:$" X){F^1CT{  
msgSS     db 0dh,0a, "Sector Size:$" JYv&It  
\?3];+c9  
msgReadErr db 0dh,0a,"Error Reading Sectors:$" h p,T(D |  
msgWriteErr db 0dh,0a, "Error Writing Sectors:$" Tw!x*  
msgReset db 0dh,0a, "Reseting drive to Cyl 0" yA%[ u.{  
}) mez[UmZ  
ni~45WX3  
buffer  db 32768d dup(0); &cpRB&bf  
JiI(?I  
data ends ;数据段结尾 (/k,q  
`Z%XA>  
stack segment Q=^}B}G  
db 400 dup(?) ,P auP~L  
stack ends 5VG@Q%  
l' "<  
code segment ;定义代码段 * +OAc `8  
assume cs:code ;规定cs的内容 \F1n Ej  
assume ds:data ;规定ds的内容 f{3FoN= z  
assume ss:stack +Kf::[wP7  
ulj`+D?H  
start: D"^ogY#LK  
pusha h$ZF[Xbfe  
Y Nq<%i!>  
Jc:G7}j6  
mov ax,data ;程序从start开始 5+ fS$Q  
mov ds,ax ;ds置初值,data的段地址 .-RWlUe;,  
l_,8_u7G  
;设置缓冲区 jDXmre?  
lea bx, buffer N"E\o,_  
mov bufferaddr,bx 6@l:(-(j2A  
mov buff1,bx ^+GN8LUs  
mov bx,ds i w m7M  
mov bufferaddr+2,bx cst=ms  
mov buff1,bx p%3';7W\  
L"}@>&6  
lea di,infosize nF=Ig-NX^  
mov dl,80h b]|7{yMV  
mov ah,48h _I$]L8hC  
int 13h jU4Ir {f  
?[m5|ty#  
lea bx,msgcyl A)`M*(~  
mov dx,bx OVj,qL)  
mov ah,09 PY>j?otD  
int 21h Z<&: W8n  
mov dx,cylinders YLFTf1G9  
call dispdx jWU)y)$  
HH+rib'u  
lea bx,msghds }\gpO0Ox  
mov dx,bx $mlsFBd  
mov ah,09 C{2 UPG4x  
int 21h W]M[5p]*  
mov dx,heads 2ZE4^j|  
call dispdx )9<)mV*EB(  
JBoo7a1  
lea bx,msgspt l  
mov dx,bx X0!48fL*  
mov ah,09 U{ahA  
int 21h xUSIck  
mov dx,spt+2 !0fK*qIL  
call dispdx 7kJ,;30)  
mov dx,spt u"|.]r  
call dispdx Q45rP4mQ  
Mm/GI a  
lea bx,msgtotal E&[ox[g{  
mov dx,bx -C8awtbC  
mov ah,09 K} ;uH,  
int 21h {ld([  
lea bx,sectors |=h>3Z=r!  
call dispqword QkF-}P%  
ko, u  
lea bx,msgss As)-a5!  
mov dx,bx JT_#>',  
mov ah,09 {?m',sG;&  
int 21h bjvi`jyL3k  
mov dx,sectorsize }>0UaK  
call dispdx <?Lj!JGX  
x1Si&0T0P<  
sbb word ptr sectors, 63d w\@Anwj#L  
jnc subok f3596a  
sub word ptr sectors+2,1 D2?7=5DgS  
jnc subok z ,ledTl  
sub word ptr sectors+4,1 lT(MywNsg  
jnc subok p1|@F^Q  
sub word ptr sectors+6,1 'E7|L@X"r  
D!@c,H  
subok: CV& SNA  
LXK+WB/s  
S 8]g'!  
4Yn*q~f  
xor ax,ax V'6%G:?0a  
mov blocknumL, ax RKBtw Zx>f  
mov blocknumL+2, ax dvXu?F55  
mov blocknumL+4, ax wEkW=  
mov blocknumL+6, ax zF{ z_c#3@  
Ql\GL"  
startread: ^T<<F}@q  
Z>X -ueV  
call rwsect *sw$OnVb  
6'Lij&,f?{  
adc word ptr blocknuml,63d XDI@ mQmzB  
jnc addok h,#A Y[Q  
adc word ptr blocknuml+2,1 T %cN(0 @  
jnc addok JgxOxZS`@  
adc word ptr blocknuml+4,1 U#Z}a d?VX  
jnc addok 2^:5aABQ  
adc word ptr blocknuml+6,1 J7l1-  
jnc addok &j>`H:  
GQ[\R&]q<  
addok: TI*uNS;-  
mov ax, word ptr sectors+6 O^IpfS\/  
cmp ax, blocknuml+6 ;ga~ae=Fg  
jg complete 1$ l3-x  
jl startread kj-S d^  
mov ax, word ptr sectors+4 4)"jg[  
cmp ax, blocknuml+4 ChB ZGuO:  
jg complete "urQUpF  
jl startread e{?~ m6  
mov ax, word ptr sectors+2 /sYD+*a  
cmp ax, blocknuml+2 ^c!Hur6)  
jg complete ].Et&v  
jl startread +q =/}|  
mov ax, word ptr sectors =UYc~VUYnT  
cmp ax, blocknuml 3-Ti'xM  
jg complete Rq\.RR](  
jl startread i4uUvZ f  
'7E?|B0],  
complete: f-23.]`v  
J@)6]d/,  
lea bx,msgready _y8)jD"  
mov dx,bx c5t?S@b  
mov ah,09 Wm"W@LPx5  
int 21 0&w.QoZY(  
U9;AU] A  
popa 43(+3$VM7  
mov ax,3100h aIm\tPbb  
int 21h H>W A?4  
G,$jU9 f  
; ND I|;   
dispdx  proc near l$zM|Z1wR`  
pusha .IG(Y!cB  
lea bx, dsp+3 1YS{; y[o  
mov cx,4 {j^}"8GB  
e <IT2tv>u  
repeat0: _$ F I>  
mov al,dl (IEtjv}D  
and al,0fh X"[c[YT!%[  
cmp al,09h v4 c_UFEh<  
jg  add40 K \;b3  
add al, 30h W/&cnp\  
jmp okadd 0mCrA|A.  
add40: 0_%u(?  
add al,37h tt`b+NOH>  
okadd: yuhSP{pv'  
mov byte ptr [bx],al 8WaVs6  
dec bx Z$+0gm\Cnw  
shr dx,4 u/``*=Y@  
loopnz repeat0 J.*dA j  
lea bx,dsp N]5-#  
mov dx,bx 5$jKw\FF=  
mov ah,09h hDfsqSK0 /  
int 21h //AS44^IS  
^TDHPBlG  
popa ;up89a-,9  
ret sYp@.?Tz  
dispdx  endp 4wK!)Pwq  
h"q`gj  
dispqword proc near e&wW lB![  
    pusha G-T:7  
    mov cx ,4 N.3M~0M*  
    add bx,6 #Ok*O r  
repeatdecbx: CM~)\prks  
    mov dx,[bx] }t]CDa_n  
    call dispdx OHH wcJ7N  
    sub bx,2 f4:g D*YT  
    loopnz repeatdecbx /<M08ze  
    popa ^OYar(  
    ret PC D1I98  
dispqword endp \5O4}sm$*  
~I!7]i]"*?  
rwsect proc near 4m%_#J{  
 4INO .  
lea bx,msg vu1F  
mov dx,bx ku?i[Th  
mov ah,09h 4egq Y0A  
int 21h $%sOL( r  
p5Y"W(5_  
lea bx,BlockNumL 8wwD\1pLS  
call dispqword p+A#t~K  
5]gd,&^?>  
lea di, packetsize $0{c =r9  
mov dl,80h Nno*X9>~  
mov ah,42h IEO5QV:u:  
int 13h L%N|8P[  
jnc readok EAx@a%  
Au:Q4x.  
mov cx,5 -4"E]f  
;出错后重试(定位0道后再重读) ,qt9S0 QS  
retryrd: gP)g_K(e  
lea bx, msgReadErr lB3W|-Ci  
mov dx,bx {6A3?q  
mov ah,09 ci|6SaY*  
int 21h elw< (<u`  
#uFP eu:  
Ga$+x++'*  
lea di,dap0 @Vc*JEW  
mov dl,80h HP&+ 8  
mov ah,44h j@Z4(X L  
int 13h q]<cn2  
.3!=]=  
lea bx,BlockNumL bf::bV?T  
call dispqword nKufVe  
rsA K0R+  
lea di, packetsize Ean@GDLz8  
mov dl,80h n|3ENN  
mov ah,42h t&0pE(MO/  
int 13h >8HcCG  
jnc readok  lcyan  
loopnz retryrd Qnph?t>  
kcI3pmgj  
readok: <+pwGKtD  
lea di, packetsize 2et7Vw  
mov dl,80h EubF`w$KWX  
mov ah,43h c`AtK s)u  
int 13h  I=|b3-  
h_Q9 c  
rwsect endp V% psaT=)P  
E_7N^htv  
code ends ;代码段结尾 {_l@ws   
end start ;结束汇编 oJ>]=^?k  
=K}5 fe  

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

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

伍胥之 01-22-2011 02:55
话说有一天周末,来到了家门口的LQ电脑,那里有许多计算机方面的书。我拿了一本就坐在那里看。 I>B-[QEC  
7H %>\^A^  
期间进来一人,言谈中知道这是国泰君安证券公司刚到我们这小城准备开张,公司里的一台笔记本坏了,放进软件格式化后盘仍然不能读写。那是我第一次见到笔记本电脑,Compaq 386级的,用的是3.5"软盘。 *?VbN}g2  
cLEBcTx  
来人很急,也不差钱,问能不能先换一个软驱。OMG!好几万的本本,换个软驱得多少钱? esIE i!d  
540-lMe  
店里没有这样的配件,也不知道需要多少钱。 yF0\$%H>$  
T;IaVMFG|d  
我在旁边听着,感觉应该没有问题,格式化过程中并没有报错,说明写盘是没问题的,最大的可能是一个比较傻容易暴露的病毒。所以凑过去看了看。 67wY_\m9I  
$0~H~ -  
硬盘启动是没问题的。插上一张盘,dir显示盘未格式化。请出DEBUG来,输上几条指令,就把软盘0道0面1-12扇区读出来了。 Lo5itW  
mov dx,0 ?k CK$P  
mov ax,0200 MuQyHEDF  
mov bx,1000  pQKR  
int 13 8vOKm)[%  
读盘正确!只是从读出的内容看,没有建立DOS正确的文件格式,果然是个傻病毒!再看磁盘中断地址,也不对。 $h"tg9L^)  
d<r=f"  
我心里有了数,示意店老板这机器没硬件问题。 Ep>3%{V  
RtwlPz<~S  
老板会意,示意我别出声,跟国泰来的人说:“问题不大,可以修好,先交200元钱,下午就可以来取。” q;3.pRw(  
I6,'o)l{_  
来人走后,我两分钟就把病毒清除了。再启动,软盘工作一切正常。 Gt3V}"B3\  
, `ST Va-  
店里的两人看到我没有任何工具,只用DEBUG就把这病毒清除了,当然觉得很惊讶! vd6Y'Zk|F6  
oJA%t-&%R  
聊了一会后,说:“咱店里的书你随便拿回家看,看过了如果不想留下,只要不影响卖,就拿回来,想自己留下就自己留下,钱的事好说!” M,7A|?O  
%QCh#v=ks  
然后打电话通知国泰来取电脑,无非是做了简单的维修之类。 O KVIl  
>7[. {Y  
由此,俺有了一个小图书馆,可以借书看了。 M{<cqxY  
 yl0&|Ub  
俺拿走的第一本书,叫磁盘加密详解。 oi^2Pvauh  

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

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

伍胥之 01-23-2011 08:48
终极解决方案:INT 0E xb1 i{d  
#  -e  
如果明白了这个机理,用汇编写个程序就可以轻易而举地破解了。 eK PxSN Z  
(n_lu= E70  
江民杀毒的DOS版都是用这种方式加密的。金山毒霸DOS版也是这样。 CZe0kH^:{  
BQu_)@  
INT 0Eh是一个硬件中断,只为软驱操作服务。只要是软盘操作,最后都会产生这个中断通知系统操作结束。 G0 Q} 1  
#Drs=7w  
所以,可以写一个INT 0Eh的服务程序,记录所以的非标准软盘操作。记下它的位置,保留在内存中某个地方(该中断响应过程中不可以进行磁盘操作,最好也不要调用任何DOS功能,否则可能会引起重入)。 Vf9PHHH|   
SAMP,un7  
所以,当里的DOS杀毒出一个版本我就可以破解一个版本。不论是什么加密办法。把程序复制到硬盘运行,它一定会读钥匙盘,记录下来所有的非标准操作。不用修改程序,也不必跟踪它。然后根据钥匙盘的磁盘参数,在标准格式化完成后,再用自己的格式化程序,格式化出一条跟钥匙盘一样的磁道。也就是说,自己配钥匙盘。 2oyTS*2u_&  
? FGz w  
我用这种办法,复制出很多盘给朋友。可惜那时没有经济送脑,否则可以自己卖这种盗版盘了。 #9M6 q  
rf^ Q%ds  
当KV2000Q版出现后,我突然觉得这技术上没有新意,就不玩了。也不再给他们解密了。除非是我自己用。 ,:Qy%k}f  
i`U:uwW`  
?f<JwF<  
ACm9H9:Vd  

伍胥之 01-23-2011 08:56
硬盘加密 1RpTI7  
KJ M :-z@  
软盘结构比较简单,编程也简单。所有的软驱都是在端口级兼容的。 2#:/C:  
v10p]=HmO  
硬盘则不同,每个厂家都有自己的特别东西,所以访问硬盘只能通过INT 13h。这就限制了加密的方法。 WDQtj$e+  
&7"a.&*9xX  
我见过的方法很少,一种是写在DOS分区外的某个地方一点东西。另一种是在安装时记录个别文件在盘上的物理位置。因为复制文件到硬盘时,OS根据当前盘上空余情况,选一个地方存这个文件。所以不同的机器上两个文件在同一个地方的概率为无穷小。所以它可以写一个文件,把它标记成隐藏与系统。这样就不比担心磁盘整理程序把它搬家。 |h$*z9bsf  
<Z G EmQ  
解密方法也简单,记录文件的物理位置,再复制时,检测一下该位置是否已被占用,如果被占用,把文件搬开。把那个特殊文件写入硬盘的指定位置,然后修改目录与FAT。 q <Gn@xc'  
3omFd#EP  
这个方法,比破解文件本身的算法要简单。

伍胥之 01-25-2011 06:55
这个坑是前几天在武汉期间没啥事填的。 dfl| 6R  
+RW P;rk  
我知道,其实多数同学都不太懂我写了些啥,因为太老了。 $fES06%  
Z M_ 6A1  
主要是人老了,有怀旧情结。 =oQw?,eY  
2[6>h)  
总结一下自己不务正业的过程,给部分同学一点点教训。 o8Vtxnkg  
nm5zX,  

伍胥之 01-27-2011 08:12
日子不咸不淡地过着,我也不紧不慢地玩着。 c@;$6WSG^  
G|MjKe4}  
参加工作两年后,我教过的第一届学生中的一个,读研到了我所在的实验室。他是个很聪明的学生,跟我也很谈得来。 XJ,P8nx  
booth}M  
他有一天下课后,把他自己上计算机课的课本带到了实验室---C语言。 ^L#\z7  
|W4 \  
我拿起来顺手一翻,发现这个东东对初学者来说是太难了,但是我觉得很有趣。 zea=vx>`  
0goKiPx  
把工作丢到一边,坐下专心致志地看一半个下午,看出味道来了,因为有汇编的基础,所以理解C的东西还是非常容易的。到了下班时间,仍然舍不得放下。于是拿回家接着看,居然看上瘾了,没有吃晚饭,也不睡觉了。到天亮的时候刚好看完。 QFt7 L  
 O_^O1  
我居然连续读了18个小时! {C3AxK0  
IA_>x9 (~  
再回到实验室,找来学生装上Turbo C 2.0,就开始下手编程序了。而且TC2.0 有非常好的联机帮助系统,需要啥函数看看说明就可以了。 XHU&ix{Od  
k]?M^jrm  
那个学生也非常聪明,我用电脑的时候,他就在旁边看,也不用问啥问题,我们随意地边聊边写程序。到最后,凡是我在电脑上用过的东东,他自己都学会了。 -;9pZ'r  
acr@erk  
我们一起写了几个程序,把他上的生物统计学课程的各种检验方法都分别写出了一个个程序。据说,十多年后,我们学院的部分学生仍然用那个程序进行显著性检验。 =2!AK[KxX  
NsDJ q{  
Jf6u E?.  

伍胥之 03-03-2011 14:21
VB+Win32 API DID&fj9m  
65X31vU  
ASP

清水 03-03-2011 14:50
引用
引用第46楼伍胥之于03-03-2011 14:21发表的  : DE"KbA0}  
VB+Win32 API N5 ITb0Tv  
BMPLL2I  
ASP *AX)QKQ@  
SxV(.i'  
介个真的看不懂。 pgT XyAP{  
你说你老啦,喜欢怀旧了,才想起来填坑。 Cx$C+  
提醒我也想想,是不是也老啦,是不是也有坑没填呢。

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

newport93 04-16-2012 20:02
引用
引用第45楼伍胥之于01-27-2011 08:12发表的 认识C语言 : Cr0 \7  
日子不咸不淡地过着,我也不紧不慢地玩着。 V# Mw  
JmN,:bI  
参加工作两年后,我教过的第一届学生中的一个,读研到了我所在的实验室。他是个很聪明的学生,跟我也很谈得来。 cy)b/4h@  
V lb L p;  
他有一天下课后,把他自己上计算机课的课本带到了实验室---C语言。 N!" ]e*q  
....... pl62mp!  
Kp,}7%hDw!  
能搞得定C,还怕什么?网上很多sample, 看看你应该就会了吧。

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


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


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

You can contact us