登录注册
社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
主题 : [ZT]我和电脑亲密接触的心路历程
newport93 离线
级别: 资深会员
显示用户信息 
20楼  发表于: 2010-06-14   
引用
引用第18楼伍胥之于06-14-2010 12:30发表的  : );LwWKa  
TNND! 9)X<}*(qo  
\`x'g)z(i  
天生没有作家的潜质。 s o s&  
`Nr7N#g+u  
在WebBrowser里打了很长一段,因为一个DEBUG命令,导致了严重的卷锁定错误,然后重启,然后就没有什么然后了。 'IszS!kY  
.......
Fb-TCq1y#  
老五,I 服了U。 "+_0idpF  
} 4^UVdz  
哪一天等俺退休了,也写一个The Non-Progamming career of an ex-programmer。哈哈哈。。。。。
随遇而安, 知足常乐。
阿散 离线
级别: 禁止发言
显示用户信息 
21楼  发表于: 2010-06-14   
用户被禁言,该主题自动屏蔽!
伍胥之 离线
级别: 军区司令员

显示用户信息 
22楼  发表于: 2011-01-20   
爱上DEBUG C~*m&,@TT^  
6iC:l%|u  
对电脑的了解是始于游戏,这大概是男孩电脑水平普遍高于女孩的原因之一吧?多数男孩都爱玩游戏。 95/C4q  
! NtY4O/  
那个时代已经有钥匙盘了,就是这个软件你复制到别的盘上不能玩,必需在这个母盘存在的情况下开始运行。有时,软件在B盘上,但母盘在A驱动器中,运行过程中的某个环节,它读一下A盘,就可以继续了,之后你可以把母盘取出来。 }rZp(FG@*  
1F/&Y}X  
道高一尺,魔高一丈。 g 11K?3*%Q  
,5 ,4Qf7  
拷贝工具就应运而生了,DOS本身的DISKCOPY只可以复制系统、隐藏的文件,不能读非标准磁道与扇区,所以一般游戏盘它是复制不了的。我当时用过copyII、Copywriter等几个工具。 ~sD'pS  
=\.|'  
可是游戏盘开发商也会与时俱进的。后来的游戏用这些东东就无法复制了。 AJ mzg  
m`cG&Ar5  
那个年代没有《电脑报》、《电脑爱好者》这样的交流攻略的地方,只能自己瞎琢磨。手头的资料就那么几本,还都是英文的。 |Sq>uC)  
\;<Y/sg  
我发现在DOS盘#2上有个DEBUG,不知道什么意思,但是看了简单说明,可以控制一个程序的运行。 o6oYJ`PY  
b :00w["  
于是乎,我疯狂地爱上了debug. xl$ Qw'  
mLSAi2Y  
用debug加载一个游戏,跟踪它的运行。遇到一个CALL就直接过去,如果这时游戏程序检测到D盘片,就重新运行,直接运行到这个CALL的地方,再trace进行,如此循环往复,直到遇到某个判断的地方,可以通过修改这个指令,而让D版盘可以运行。中间不知道死机重启多少次。 E%N]t} }[  
511q\w M  
慢慢地,玩游戏的乐趣,已经不如跟踪游戏的过程好玩了。 T rW3@@}j  
QkbN2mFv%  
DOS水平那是大有长进,后来,我不在办公室,只要师弟们告诉我显示器上显示一句什么话,我就可以远程指挥他们该做什么了。 xh$[E&2u  
mUxD.;P  
话分两头,且说那FORTRAN语言学习,那可是课程任务呢!导师很重视,专门在计算中心开设了一个科研经费付款的帐号,让我们可以不受限制地上机学习。我真是如鱼得水啊!没课的时候,肯定是在机房里。跟机房的老师也熟悉了,他们都认识我。所以我经常早饭后去,中午他们关门时,值班老师并不赶我走,我会一直在那里直到晚上下班。最后的结果是把胃饿出毛病来了。 ;iVyJZI  
YzqhFFaj.  
FORTRAN学得也不错,可是考试成绩却一般,没有预期的好。因为最后一个大题改程序,我把equivalence语句的含义弄错了。这个语句就是相当于C语言的union,可以用不同的变量名和数据类型访问同一个存贮区域,说实话,我没用过,上课时也没有弄懂。一个20分的题做错了。 U@WT;:.T  
+Gko[<  
课程结束,回到办公室的PC上,FORTRAN的compiler太大了,勉强可以运行,而且编译在一张盘上,连接和库在另一张盘上,很不方便,调试更没办法。 ^8)d8?}  
OJaU,vQ#  
所以还是玩BASIC吧! eNX-2S  
"-sz7}Mb  
语言总是相通的,学BASIC只是快速地读了一遍BASIC的英文随机资料,一个简单的教程,就可以编个小程序了。 Nx__zC^r  
=v-D}eJQ=  
[插曲:]我们的电脑是个CGA 显卡的,但是分辨率低,从来都只显示白色。倒是人家的herculeus显卡显示绿色分辩率比我们的还高很多。我在BASIC中用color语句随便试了一下,原来它可经显示16种颜色呢!还有高亮、闪烁、反色等几种变化。后来,终于在320X240模式中显示出了256种颜色,当时真的很激动啊! TEtZ PGFl  
'(}BfDP  
有人给我们送给我们一个很好的全屏编辑程序,叫WordStar,Microsoft WORD的DOS版就是收购了wordstar后才推出的。感觉真是太好用了。它帮了很多忙,也为我闯祸提供了条件。我在它的盘里找到了配置文件,把它调成了彩色的,可以显示出不同的字体(bold, italic, underlined, strikethrough)和不同的颜色。受到了老师和师兄的表扬。 S6 *dp68  
WD:5C3;  
有了这个程序,我们的活就更多了。以前老师写文章都是纸版的,不用我们管。现在有了这个程序,我们就负责录入电脑,老师再修改。我们老师是个极其认真的学究型老夫子,对文章是一点点推敲,对每一种植物都反复核实。老师一辈子文章不多,不过篇篇是精品。我因为课少,所以经常被老师叫去改文章,我也很愿意做这种在电脑面前的工作。 Rx.0P6s  
[ 此帖被伍胥之在01-22-2011 00:18重新编辑 ]
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
23楼  发表于: 2011-01-20   
[插曲:]我的老师其实在植物分类学上有很高的水平,记忆力也特别好,能记住绝大多数植物的拉丁学名。我面试的时候,老师给了我10种植物的学名,我只认识9种。当然这9种是华东常绿林的主要成分,是我背过的,多数植物我并没有见过。但那个不认识的学名,却是华北常见的也是我认识的,叫山楂。当然老师不是用这个名字考我的,而是用的学名Crataegus,我没有准备,所以不认识。老师语重心长地教育我说:“这个可以你们北方常见植物啊!你应该认识的。”我们老师的观点是,植物的中文名重名者异名者多,如果你没有从检索表上把它跟相近植物分开,你还是不认识这个植物。像前面的山楂,同属的多种植物都可以叫山楂,但是Crataegus pinnatifida才是其中一个种的唯一标识,所以如果不能确定学名,就等于不认识这种植物。 2#!D"F  
AyUVsIuPT=  
受老师影响,我开始注意植物的学名,想想学名所代表的意思。后来,一个样方中上百种植物,我基本上能看到学名知道是哪一种了,但写不下来。所以在给导师打印完稿子后,我读一遍就能发现一些学名的拼写错误,如果觉得有问题再查一下书确定一下。这样,老师也喜欢把手稿交给我来处理了。我用电脑玩电脑的机会就更多了。 ~JJv 2  
杺栫杣杊椌柮栬,䒴蓉艿芖。
猪小秘 离线
级别: 师长
显示用户信息 
24楼  发表于: 2011-01-20   
[30<  0  
*N't ;  
先坐位置!! +XsY*$O  
好激动。。。 cla4%|kq3Y  
^;'3(m=  
植物英文名字,HO MY LADY GUAGUA, Wl1%BN0>  
MDRSI g  
不懂哇;; v^vE aB  
c7' Pzb)'  
电脑编程,哇咔咔,更是一片迷蒙呀
猪小秘 离线
级别: 师长
显示用户信息 
25楼  发表于: 2011-01-20   
伍SIR,再次抱拳佩服
伍胥之 离线
级别: 军区司令员

显示用户信息 
26楼  发表于: 2011-01-20   
最终,我把自己差点玩死。 yY!jkRq%w  
话说有一周五的晚上,我在办公室玩游戏,需要一张盘来拷贝一下。 t{$t3>p-t  
找出一张盘,打入了一个命令:del *.* #JVcl $0 Y  
电脑问我:Are you sure?[Y/N] ^T^fowt=r  
我想也没想就回答:Y TO QvZ?_  
然后,驱动器的红灯亮了一下,盘的文件都删除了。 yd2ouCUV  
突然,我心中觉得那儿有点不对劲。“这盘上的文件是不是老师的文章啊?” I)6)~[:'  
抽出盘一看,果然。 + !X^E9ra  
再去找找别的盘,看有没有备份。 JI.ad_IR  
没有。 T^"d%au  
背上的冷汗开始往下流了。 wJ{M&n1H  
发呆。 kWWb<WRW:  
-------------------------- lGxG$0`;;  
那个年代我们的电脑连硬盘都没有,就两个360KB的5.25英吋的软盘。而且那3M盘贵得很,也没有养成备份的习惯啊! ydpsPU?wj5  
-------------------------- s3q65%D  
这可咋办哩?????那可是师兄弟几人改过多少次的文稿啊!如果让我再重新输入一遍,估计得几天,而且还要校对若干遍。咋向老师交待呢? CEwG#fZ  
[ 此帖被伍胥之在09-08-2024 07:47重新编辑 ]
杺栫杣杊椌柮栬,䒴蓉艿芖。
angela_whz 离线
级别: 军区司令员
显示用户信息 
27楼  发表于: 2011-01-21   
雾里看花哦,惭愧
newport93 离线
级别: 资深会员
显示用户信息 
28楼  发表于: 2011-01-21   
老5从FORTRAN玩起的啊,那是相当的牛! .*8.{n5   
C6GYhG]  
现在玩什么了?
随遇而安, 知足常乐。
伍胥之 离线
级别: 军区司令员

显示用户信息 
29楼  发表于: 2011-01-21   
用DEBUG恢复被误删除的文件(继上节) P\SE_*&  
2&dtOyxo>  
只流冷汗也不是办法啊!还得想辙。 MSw/_{  
那个年代我们用的的PC没有硬盘,而且固化的BASIC(如果没有DOS盘引导,会自动进入ROM BASIC)还支持用录音机做外存贮器。我们用的Word Star在存贮文件时,那个盘要咯吱咯吱响半天才能存上。可是DEL *.*的命令执行时,驱动器的红灯亮了一秒种都不到啊!而且马上听到驱动器也停止了转动。 ns@b0'IF]  
联想到录音机的原理,再想想用录音机的磁带做外存。显然,DOS并没有把盘上的内容重新擦写一遍,东西还应该在盘上的。 >hHn{3y  
可是,怎么找出来呢? ;gf^;%FK  
把盘藏好,找出DOS3.30的Technical Reference(全英文,3cm厚,有DOS命令的各个参数的详细说明,还有DEBUG功能、各子命令及常用汇编指令,8086体系说明,磁盘布局参考etc),连夜看吧! -8g ;t3z  
一晚上看了一遍,头大啊!不懂、不太懂、似懂非懂。不管这个,硬着头皮看到底。已经熟悉的DOS命令跳过,仔细读DOS命令的功能,没用的参数的说明。 JrO2"S  
看不懂没关系,先看完后面的,再回头重读一遍。有了对后面内容模糊的理解,第二遍看前面的内容就容易多了。这一点成了我后来读别的书的诀窍。 1'M< {h<sP  
但是,DOS命令详解后面的部分,看起来跟我要完成的任务有关联了。我用了一个白天,把这部分读了两遍。明白了track(cylinder), side(head),sector这些术语,知道了BOOT sector, FAT(File Allocation Table), 根目录、子目录的存贮位置,分清了逻辑扇区与物理扇区,还明白了文件存贮是以cluster为单位而不是以sector为单位(DOS中软盘上每个cluster包括两个连续的logical sector),还知道了8086的寄存器(registers)、标志寄存器(flags),对stacks也有了一点印象。 ! XA07O[@  
晚上,找出一个没用的盘,先练练手再说。 (G:$/fK  
用了两个小时,把一张格式化后的盘,写入一个文件,再删除。研究明白了磁盘文件在盘上存贮的位置及DOS如何通过FAT找到文件所在的方式。可以手工恢复出一个文件了。 I(pU_7mw  
信心大增,虽然已经两天一夜没睡了,此时反而更有精神了。既有了恢复文件的信心,更觉得这是一件很有趣的事了。 yt$V<8a  
拿出来要恢复的盘,再找出几张确定是可以用的旧盘作为工作盘。这回我学精了,尽管我要恢复的那盘上面啥文件也显示不出来了,我还是给它做一个DISKCOPY,因为我已经明白这个命令根本不管文件,只是逐磁道逐扇区地读写复制,所以再复制出来的盘,跟我del *.*后的那盘是完全一样的,这样我万一失败了,还有个backup. U1B5gjN  
一个小问题来了。那盘上其实都快满了,所以文件存贮得不连续。FAT已经被清空,通过根目录索引到文件的第一cluster(我毕业的89年,我见到中文版DOS参考,知道这个词被译为簇)与后面紧邻的或中间的某些簇不属于同一个文件。 an.)2*u  
这个就比较好办了,文件内容我自己是熟悉的,知要能读出这些扇区,我就能把它们正确地拼接在一起。 w<5w?nP+Oh  
天亮了。我的活也干完了。 "#(]{MY  
----------------- y 2&G0y  
后记:在我做完这个之后一年,我的师弟在植生所同学来访,给我带来了PCTOOLS 1.0版,里面有一个undelete功能,对于连续存贮的文件,可以做到一键恢复的。这个功能后来被DOS4.00以后的版本也收入了。可惜,我那时不知道有这个东东啊!可是,如果我有这样的工具,我还需要明白我还会弄明白DOS里面这些门道吗?可是的可是,我明白这些好像也没啥用啊! `XQM)A  
[ 此帖被伍胥之在09-08-2024 07:49重新编辑 ]
杺栫杣杊椌柮栬,䒴蓉艿芖。
洋洋 离线
级别: 军区司令员

显示用户信息 
30楼  发表于: 2011-01-21   
文盲我掩面羞愧!
伍胥之 离线
级别: 军区司令员

显示用户信息 
31楼  发表于: 2011-01-21   
认识TSR程序 Q']:k}y  
#|)GarDG  
上面那个朋友在给我PCTOOLS的同时,还给了我一个叫SK的东东,全名我都忘了[现在想起来了,叫SideKick,非常经典的TSR程度]。那是我接触的第一个TSR(Terminated and Stay Resident [in memory])程序。程序运行后,控制权又回到了前台的command interpretor(DOS的COMMAND.COM),但可以通过某种方式被唤醒或在后台执行。这是对单任务的DOS的一个补充。 u.R:/H<>~  
_<&IpT{w+  
那个东东对我的朋友似乎没啥用,但是我觉得很好玩,而且找到了它的用武之地--玩游戏、学汇编。 3Cq17A 9  
mq >Ag  
因为SK可以把在它里面编辑的内容,按某个功能键后,模拟DOS的键盘输入发送到前台来。这样,我过去跟踪修改游戏的过程可以记下来,存在SK中。当DEBUG加载某个游戏后,可以把跟踪执行和解密的过程变成自动化。 J %URg=r  
类似这样的东东: 9_oIAn :<  
$}N'm  
G 100 1E5 (从IP=100运行到0x1E5位置) V\^?V|  
T(单步运行) -_v[oqf$  
E AX 200 (将AX寄存器的值修改为0x200) (q*Za  
G(解除跟踪,继续运行) F(:+[$)  
KR#Bj?fz-H  
只要一按这个功能键,就可以自动运行了。 Gb\}e}TB[  
)9= =6p  
小试鸡刀,也很兴奋了一阵子。 Q l ql(*  
{6*h';~  
那年代的游戏一是很有限,三是很难得。所以,手头上的游戏很快就玩腻了。再玩点啥呢? S-g`rTx  
DM"`If%3j  
玩汇编! Fod2KS;g  
[ 此帖被伍胥之在03-28-2011 00:00重新编辑 ]
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
32楼  发表于: 2011-01-21   
瞎子摸象玩汇编 ,@8>=rT  
=D<46T=(RB  
没有系统地读过8086指令,没有编译器,就靠对DEBUG的瞎琢磨,靠DEBUG的U(unassemble)和A(assemble)命令,我就莫明其妙地玩上了8086汇编。 WADNr8.  
dyD =R  
大体上知道8086的一些指令,但是我连补码、反码都不明白(现在也不太明白,就知道FFFF=有符号整数-1=无符号整数65535),我只会十进制、十六进制与二进制,别的进制都算不出来。基本上就是靠反汇编DOS外部命令、跟踪指令执行并观察寄存器与存贮器的变化,理解了8086的全部指令。 UPA))Iv>  
~\(U&2t  
唯一的参考还是DOS技术参考,上面有许多指令介绍,关键是有DOS功能调用详解(INT 21h),相当现在编程的API接口了。也有INT13h(磁盘操作功能调用接口)的基本说明。 OiZPL"Q(K  
^7V9\Q9  
自己写个小程序玩玩怎么办呢?哪些跳转地址咋确定呢? j'I$F1>Te  
hBO I:4u[  
先在SK里面估摸着写出来,汇编后,根据实际地址改在SK中修改。如果我先写一个jne 120, 用A汇编后发现要跳转的地址不是120h,而是12Eh,再在SK中改成JNE 12E,再重新汇编一次。 c"v#d9  
{C[<7r uF  
利用这么笨的办法,我写出了我的第一个汇编程序,把它存贮为a.com。运行没有死机,没有导致DOS崩溃。当然,这个程序做不了什么事,也不是“Hello World!”,因为我不是程序员出身,没受过这样的专业训练。所以,我在任何语言中,都没有写过“Hello World!”。事实上,它只是读出了磁盘上的第一个扇区,并把引导失败的信息“disk boot failure”显示出来而已。 oe# :EfT  
XQ.JzzY$  
---------------------------- Fn yA;,*  
等我进入研三的时候,我才拿到了MASM编译器,后来又有Turbo Assembler,才明白啥叫“宏汇编”和“宏”(Macros). }r9f}yX9Q  
所以,以前自己做的事,都是典型的瞎子摸象。 K>"M# T  
JEGcZeq)  
_ z#zF[%  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
33楼  发表于: 2011-01-21   
第一次见到硬盘 /!uxP~2U  
;q59Cr75  
话说那时IBM-PC早已进入IBM-PC/XT时代,XT就是PC的eXTension,唯一的不同就是多了一块硬盘。仍然2万多一台。基本上同一时期,国产兼容机开始出现,长城0520啥的。兼容机的名词从此诞生,它意味着“100% compatible with IBM-PC”。 Cir==7A0  
2>_6b>9]  
IBM当时为了推动PC的发展,开放了IBM-PC的标准、接口规范,用现在的词,叫架构(archetecture)。这个开放,促进了80x86系统的发展,为全世界创造了无数的硬件制造与软件编程就业机会。当然最后也把自己埋进去了,现在它的PC事业部都归联想了,叫Lenovo Thinkpad,在此之前,联想叫Legend. 8S &`  
kb Odg:  
可是咱学校穷啊!更新换代太慢。 UXnd~DA  
FD,M.kbg  
但是设备处不是有咱的亲戚嘛!而且俺系办周主任不仅老公在设备处,而且儿子也去了计算中心工作。结果研三刚开始的时候,人家不知从哪儿给找来一块外置硬盘。 W EZ(4ah  
Y6,< j|  
这块硬盘啊!哪叫一个壮观!自己有单独的220V电源供电,个头跟后来的小型UPS差不多,硬盘主体是全高,盘面直径也是5 1/4英吋。两片盘,所以有4个住面,320条磁道, 每磁道有17个扇区,总容量高达10MB!牛吧?而同期的软盘才360KB,与它同时的苹果II只能读写单面软盘180KB. zsc8Lw  
`b+f^6SJn  
海量存贮器啊!可以想像当时我们的兴奋了。 8(\Az5%  
---------------------------- \2*<Pq  
工作后,我们单位一台XT机的20MB硬盘坏了,听着主轴电机在转,但是驱动读写臂的步进电机就是没动作。我大着胆在我们的超净工作台上把它拆了,把读写臂来回拨了几回,居然就修好了。 !Yz~HO,u+  
rX)PN3TD  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
34楼  发表于: 2011-01-21   
第一次在PC上看到汉字 :I1 )=8lO  
Ul)2A  
88上半年的时候,我已经在计算中心的富士通M340中型机上看到他们的汉字输入了。那太壮观了!有一个或几个写字台那么大的输入面板,上面印着5号字那么大的6000多个汉字符号,就是GB2312-80字符集,前半部分常用字按拼音排列,后半部分按笔画排列。有一支专用的笔,在那个面板上找到需要的字,点一下,就输入到系统中了。 FU E/uh  
ebcGdC/%>  
下半年,周主任的儿子给我们拷贝来了中文系统,终于我们的CGA显示器上可以出现中文了,只能在640X480或320X240模式下显示汉字,每屏也只能显示10行字。而同时期的Herculeus显卡还不能显示汉字。 Q+[gGe JUF  
ZjF$zVk  
有了汉字显示还不行,没有编辑软件啊!因为Word Star没有汉化版,所以中文文件的编辑又回到了行编辑时代了。不要想当然地认为我解决了这个问题。我那时还没有这个能力,只是我已经明白汉字的编码原理了。我能在键盘上不用任何输入法敲出一堆汉字,按住ALT键,用小键盘上的数字打出两组161-255间的数字,就会出来一个汉字。 ;Z%ysL A  
HJ:s)As  
大约几个月后,我们有了中文版的Word Star。但是汉化得很蹩脚,经常在屏幕的右边显示半个汉字,因为wordstar是单字节处理的,不像后来的DBCS系统。我知道应该在程序中加入一组判断当前行最后一个字节是否属于一个汉字的第一字节的处理方法,不过程序不是反编译后重新改写的,而是在原有的可执行文件中做的修改,所以指令多了加不进去。 RgZBh04q  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
35楼  发表于: 2011-01-22   
第一个宏汇编程序 ck){N ?y  
A\ CtM`  
工作后不久,单位里我所在的小组有了一台浪潮0520(XT兼容机),有了硬盘,有了汇编编译程序,就开始玩汇编了。当然那时的主要工作是用dBASEIII,这个我已经在读研期间自学会了,读了一本关于dBASEIII plus的英文书,编个dBASE/FoxBASE程序已经是小菜一碟了。 (>%Ddj6_>  
s0~a5Ti3  
那时候的硬盘老出点问题,经常碰上个“Error reading data....” 啥的小毛病,但是换又不方便而且很贵。PCTOOLS与NORTON DISKEDIT扫描盘比较慢。我就自己写了一个磁盘扫描程序。算是用汇编写的第一个正式的有点用处的程序吧! 1>[3(o3t  
@{:E&K1f  
这也是我现在电脑里唯一一个汇编语言的程序了,其它都随着磁盘来回更换丢了。所以,还是在老大这里存一份留个纪念吧! .R#p<"$I  
!-m (1  
比较长啊!所以可以自动跳过。 ~ b!mKyrZ  
(dLt$<F  
.286 MMN2X xS  
.radix 16 BOQ2;@:3  
data segment ;定义数据段 @(,k%84z  
{+0]diD  
hCD0Zel  
msg  db 0dh, "Reading sector:$" 'p80X ^g  
msg1 db 0dh, "Writing sector:$" ;$wS<zp6  
msgready db 0dh,0a,0dh,0a,"Reading/Writing completed!", 0dh,0a, "$" +^iUY%pm  
\f}S Hh  
dsp         db "                $" l`UJHX  
kOmTji7  
;DAP wWKC .N  
PacketSize db 16d; // 数据包尺寸(16字节) wm}6$n?Za  
Reserved   db 0; // ==0 Nq/,41  
BlockCount dw 63d; // 要传输的数据块个数(以扇区为单位) TxoMCN?7c  
BufferAddr dw 0,0 ; // 传输缓冲地址(segment:offset) k"uqso/  
BlockNumL  Dw 0,0; // 磁盘起始绝对块地址 ,2qJXMg"=$  
BlockNumH  Dw 0,0; // 磁盘起始绝对块地址 nw+L _b  
;O}%_ef@  
;定位用DAP (复位到0磁道) 4L85~l  
DAP0       db 16d ?Lbw o<E  
              db 0 Ia=wf"JS)  
              dw 1 5wmH3g#0  
buff1          dw 0,0 hWf Jh0I  
                        dw 0,0,0,0 Z2_eT C u  
               YR@@:n'TP  
Q.*qU,4);  
;DiskParameters z | Hl*T  
infosize     dw 26d;                        WORD InfoSize; // 数据包尺寸 (26 字节)  :z_D?UQ  
falgs         dw 0;                        WORD Flags; // 信息标志 ; =ai]AYW  
Cylinders DW 0;                        DWORD Cylinders; // 磁盘柱面数 #I'W[\l~+  
Heads            DW 0;                        DWORD Heads; // 磁盘磁头数 s/Fc7V!;  
SPT                Dw 0,0;                                                 DWORD SectorsPerTrack; // 每磁道扇区数 H [wJ; l  
Sectors        Dw 0,0,0,0;    QWORD Sectors; // 磁盘总扇区数 x }[/A;N  
SectorSize    DW 0;                        WORD SectorSize; // 扇区尺寸 (以字节为单位) Py^F},?J  
cpF\^[D  
cmpsect  dw 0 / V+&#N  
iW(HOsA  
msgcyl  db 0dh,0a,"Disk Parameters",0dh,0a,"Total Cylinders:$" FVW< F(g`  
msgHds  db 0dh,0a,"Heads:$" 7[rn ,8@  
msgspt  db 0dh, 0a,"SectorsPerTrack:$" Ol`/r@s  
msgTotal db 0d,0a, "Total Sectors:$" +ByxhSIr  
msgSS     db 0dh,0a, "Sector Size:$" 3k` "%R.H  
2asA]sY  
msgReadErr db 0dh,0a,"Error Reading Sectors:$" )l[<3< @s  
msgWriteErr db 0dh,0a, "Error Writing Sectors:$" 'ejuzE9  
msgReset db 0dh,0a, "Reseting drive to Cyl 0" 3ZGU?Z;R  
bIu '^  
R rs?I,NV  
buffer  db 32768d dup(0); `Rub"zM  
4_Tx FulX.  
data ends ;数据段结尾 YAv-5  
E3<jH  
stack segment s#/JMvQ#  
db 400 dup(?) 22"M#:r$  
stack ends QXY-?0RO#  
,A[40SZA  
code segment ;定义代码段 #o SQWC=T  
assume cs:code ;规定cs的内容 1mm/Ssw:C  
assume ds:data ;规定ds的内容 G"T)+! 6t  
assume ss:stack QZ$94XLI  
PspH[db  
start: H$>D_WeJ  
pusha Qw!cd-zc  
\K.i8f,  
^>gRK*,  
mov ax,data ;程序从start开始 wj!p6D;; S  
mov ds,ax ;ds置初值,data的段地址 p+ SFeUp  
[u;]J*  
;设置缓冲区 nyWA(%N1  
lea bx, buffer IsxPm9P2<  
mov bufferaddr,bx %6j|/|#]  
mov buff1,bx "^u  
mov bx,ds odMjxWY  
mov bufferaddr+2,bx [cwc}f^  
mov buff1,bx {mY<R`Ee  
~aQ>DpSEf  
lea di,infosize _iLXs  
mov dl,80h eS8tsI  
mov ah,48h kSv?p1\@&P  
int 13h  VT96ph  
LzB)o\a  
lea bx,msgcyl z'=*pIY5f  
mov dx,bx Tw/kD)u{  
mov ah,09 GM U.Kt  
int 21h 'g$~ij ;x  
mov dx,cylinders Y5&Jgn.l  
call dispdx JR|yg=E  
.^>[@w3  
lea bx,msghds M7-piRnd4  
mov dx,bx 1k6f|Al -  
mov ah,09 0AP wk }  
int 21h O`~G'l&@T  
mov dx,heads H0Qpc<Z4/  
call dispdx PwU}<Hrl]  
5V!L~#  
lea bx,msgspt r483"k(7  
mov dx,bx Z#BwJHh  
mov ah,09 y:WRpCZoa  
int 21h %H75u 6  
mov dx,spt+2 6^F"np{w  
call dispdx B(w k $2  
mov dx,spt }0 0mJ]H(  
call dispdx k!H;(B"s-  
$)\%i=  
lea bx,msgtotal _6Wz1.]n  
mov dx,bx fQi7e5  
mov ah,09 jhjGDF  
int 21h %Rj:r!XB:  
lea bx,sectors $9Ho d-Z1  
call dispqword \Si@t{`O  
-|B?pR  
lea bx,msgss t_6sD r'.  
mov dx,bx { :xINQ=}D  
mov ah,09 t uo'4%]i  
int 21h )_"Cz".|9  
mov dx,sectorsize m8,P-m  
call dispdx s Z(LT'}  
D-\\L[  
sbb word ptr sectors, 63d oe_l:Y%  
jnc subok E]WammX c  
sub word ptr sectors+2,1 M;OY+ |uA  
jnc subok GzWmXm  
sub word ptr sectors+4,1 x.qn$?3V]  
jnc subok d|k6#f-E  
sub word ptr sectors+6,1 eUPG){"  
>gM|:FG  
subok: 'uBXSP#  
EgM.wQHR]  
-B fZ P5  
z)xGZ*{=  
xor ax,ax FiMP_ y*S  
mov blocknumL, ax LbOjKM^-  
mov blocknumL+2, ax e;~[PYeu  
mov blocknumL+4, ax S!A)kK+  
mov blocknumL+6, ax -U)6o"O_CV  
7D\#1h  
startread: zB/$*Hd  
1v!Xx+}  
call rwsect Izm8 qt=m  
} R!-*Wk  
adc word ptr blocknuml,63d )` -b\8uw  
jnc addok REDh`Wd  
adc word ptr blocknuml+2,1 #qWa[kB  
jnc addok ) [yM4QFl  
adc word ptr blocknuml+4,1 fp|!LU  
jnc addok ftq&<8  
adc word ptr blocknuml+6,1 /1:`? % ,2  
jnc addok 85Zy0 l  
Iz,a Hrq  
addok: `An|a~G1  
mov ax, word ptr sectors+6 *X+T>SKL  
cmp ax, blocknuml+6 wcUf?`21,  
jg complete <use+C2  
jl startread jo{[*]Oa  
mov ax, word ptr sectors+4 ZfM(%rx  
cmp ax, blocknuml+4 i`Fg kABw  
jg complete jJdw\`  
jl startread L3lf28W  
mov ax, word ptr sectors+2 VJ;n0*/  
cmp ax, blocknuml+2 oNY;z-QK  
jg complete _? #}@?  
jl startread }C!N$8d,  
mov ax, word ptr sectors |UZPn>F~  
cmp ax, blocknuml | VPs5  
jg complete ,+<NP}Yg#G  
jl startread g#ubxC7t<  
]S9~2;2^,  
complete: z #c)Q  
Z2~;u[0a[  
lea bx,msgready 9:"%j  
mov dx,bx Kyw Dp37^  
mov ah,09 .>DqdtP[  
int 21 zRN_` U  
YQe9g>G&  
popa eyBLgJt8P  
mov ax,3100h mG@xehH  
int 21h jv<BGr=4;  
vS%o>"P  
; w]X~I/6g  
dispdx  proc near jjL(=n<J<"  
pusha 4]0|fi3}>  
lea bx, dsp+3 W4Rs9NA}  
mov cx,4 | K| c  
' Z:FGSwT  
repeat0: = zW}v m }  
mov al,dl Zm,<2BP>  
and al,0fh r7o63]  
cmp al,09h fC+<n{"C  
jg  add40 8X!^ 2B}J  
add al, 30h Zc(uK{3W-  
jmp okadd KZUB{Y^)  
add40: Q4\EI=4P]  
add al,37h _Z z" `  
okadd: j:B?0~=  
mov byte ptr [bx],al hE0 p> R8  
dec bx Tu95qL~^  
shr dx,4 /{ Lo0  
loopnz repeat0 Sx?IpcPSm  
lea bx,dsp `VY -3  
mov dx,bx &l2oyQEF)  
mov ah,09h }D/0&<1  
int 21h Eh&*"&fHR  
\E1[ /  
popa &Q 7Q1`S  
ret CM?dB$AwX  
dispdx  endp e}Cp;c]=  
>Pj ?IE6  
dispqword proc near +F$c_ \>  
    pusha <gRv7 ?V[z  
    mov cx ,4 4<fKB&  
    add bx,6 E7@0,9A U  
repeatdecbx: }/q]:3M|  
    mov dx,[bx] /=&HunaxI  
    call dispdx {\9vW; '  
    sub bx,2 W- 5Z"m1I  
    loopnz repeatdecbx f{MXH&d 1\  
    popa  +LeZjA[  
    ret pe$" nUy|  
dispqword endp e2CjZ"C  
XcB!9AIO  
rwsect proc near F+ qRC_C>O  
{jO:9O @  
lea bx,msg #8iRWm0*6  
mov dx,bx Wcd;B7OH  
mov ah,09h p&~8N#I#  
int 21h T(zE RWo  
U|VF zpJ  
lea bx,BlockNumL  vp7J';  
call dispqword mu`h6?v  
B'"(qzE-kM  
lea di, packetsize *m6~x-x  
mov dl,80h hi4#8W  
mov ah,42h <|9s {z  
int 13h !PJD+SrG  
jnc readok d6,SZ*AE  
>utm\!Gac  
mov cx,5 9gR@Q%b)  
;出错后重试(定位0道后再重读) *-"DZ  
retryrd: ZZ k6 @C  
lea bx, msgReadErr k2DT+}u7G  
mov dx,bx 0)n#$d>  
mov ah,09 }bIbMEMn  
int 21h 2<53y~Yi%  
0J7)UqMf.  
hbdq'2!Qr  
lea di,dap0 XM o#LS  
mov dl,80h C# IV"Pkq  
mov ah,44h ':YFm  
int 13h qE?*:$  
It>8XKS  
lea bx,BlockNumL ? hU0S  
call dispqword 0m k-o  
FJJ+*3(  
lea di, packetsize ovJwo r  
mov dl,80h Jk=E"I6  
mov ah,42h 0V6gNEAUg  
int 13h }qU(G3  
jnc readok ]FV,}EZ  
loopnz retryrd >KX Sb@  
 Xr'Y[E [  
readok: ^x(BZolkm  
lea di, packetsize F_0vh;J o  
mov dl,80h A+v6N>}*  
mov ah,43h &?C% -"|c  
int 13h w6 0I;.hy  
e<o{3*%p)  
rwsect endp H:byCFN-  
?EQ]f34  
code ends ;代码段结尾 at"-X?`d  
end start ;结束汇编 X:Z4QqT  
^-Ob($(\  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
36楼  发表于: 2011-01-22   
用BASIC语言写汉字输入法
1989年上半年,迎来了那场有名的春夏之交的“风波”。 nv>|,&;  
俺那时也是热血青年,也自然而然地“围观”了那场运动。你懂的。 j_L1KB*  
接下来该写毕业论文了,我该发愁了。 _Bh-*e2k  
{jB& e,  
所愁为何?那时的论文都是油印的,没有激光照排,都是工人手工拣铅字排版油印。可是我写得字太乱太草,印刷厂的工人不认识,排完版后就极难修改了,不像现在可以随便修改插入删除啥的。 T= Q"| S]V  
没办法,自己打吧! 6iAHus-  
&L6xagR7M  
可是,那时的输入法那叫一个烂啊!只有拼音码、区位码两种,别说联想,连词组都不支持。 &,E^ y,r  
幂思苦想半天,自己写个程序吧! %%`Q5I  
; s{k32e  
当然,我那时写不了底层的键盘hooker程序,不能写真正的输入法。那就用BASIC语言自己连个联想库,把论文输入到一个文本文件中,再去word star中排版吧! &("HH"!  
利用BASIC语言的定长文件记录功能(这样运行速度比较快),为每个汉字留下了20个字的联想空间,创立了一个Random Access的文件。用标准输入法输入一个字后,我的程序根据其编码算出它对应的记录号,读出这20个字,下一个字如果输个0-9的数字或[SHIFT]0-9的符号(如果是字母,会被传入底层输入法),则从我的联想字中选出对应的字,输入我自己的文本文件,同时调整它到该记录的第一个字(动态调频),如果新输入的是汉字,则将它加入记录中,作为新的联想字。然后根据新字找出它对应的联想字记录,以此类推。 b#\i]2b:  
那个年代连办公用激光打印机都没有,我所有的只是80列宽或120列宽的针式打印机,EPSON-LQ1700K,当时算好的了,24针呢!也没有A4/B5纸可以用。最后,我的论文用80列打印纸打印出出来6份。除了答辩委员外,只留了一份给学校存档。我自己手中只有电子版。 S9BwCKH  
------------------------ Hw[(v[v  
我不知道那时是否已经有联想输入法了。因为我跟计算机圈内的人接触很少,所以一切都是我自己在瞎摸索。在0530(80286)开始普及的时代,汉字输入法才有了明显的改进。 AmYqrmJ  
[ 此帖被伍胥之在09-08-2024 07:57重新编辑 ]
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
37楼  发表于: 2011-01-22   
向病毒学习反病毒
有了硬盘为媒介,病毒也开始流行了。 i2$7nSQ9  
z+IHt(  
等到我毕业的时候,国内的大专家对DOS研究就比较深入了,我在福州路书店买到了一本DOS3.00分析,把DOS的IBMBIO.com、IBMDOS.com和COMMAND.com都反汇编出来来了。 ,pfHNK-u  
Si=zxy T  
在我家门口,原来有个书店,叫黄河书店。后来有一次偶然进去,发现变成了电脑公司,叫LQ电脑,就是组装电脑的小店。我从这里买到了一本求伯君编写的《DOS高级编程参考》,虽然主要是编译的,但我认为那是我所读到的水平最高的电脑中文专业书籍了。我后来一直用金山毒霸而从不考虑其它,想来跟这个有莫大关系。 *$+k-BV  
s*% pNE U  
然后,我就开始DEBUG病毒了。 UC &f  
.3Ex=aQcX  
跟踪病毒可真长见识啊!看病毒如何利用DOS或DOS的后门(undocumented DOS functions)给自己分配一块内存,如何驻留内存,如何在DOS打开并运行时来感染这个文件。觉得那比玩游戏可有趣多了。 EG=~0j~  
fCg"tckE  
启动型病毒就简单多了,仅仅在常规内存的顶端预留1-2KB,使系统向DOS报告的内存比原来少一点,然后修改INT 13的入口地址,监控对磁盘的读写。对付这种病毒那就简单多了,在病毒活动的情况下,只要找出它所保存的原始入口地址,覆盖掉就让病毒立马失活。再恢复一下磁盘的引导扇区就可以了。 *^agwQ`  
J3/2>N]/}  
但是,说归说做归做,我可以写出一个引导型病毒,也可以清除任意引导型病毒,但是从来没有写过杀毒软件,因为清除文件中的病毒比较麻烦。只是从病毒中学习了一些东西而已。 7i(U?\A;.  
S ?v^/F  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
38楼  发表于: 2011-01-22   
牛刀小试,得到一个免费小型计算机专业图书馆
话说有一天周末,来到了家门口的LQ电脑,那里有许多计算机方面的书。我拿了一本就坐在那里看。 HCj/x<*F  
期间进来一人,言谈中知道这是国泰君安证券公司刚到我们这小城准备开张,公司里的一台笔记本坏了,放进软件格式化后盘仍然不能读写。那是我第一次见到笔记本电脑,Compaq 386级的,用的是3.5"软盘。 um.s :vj$  
来人很急,也不差钱,问能不能先换一个软驱。OMG!好几万的本本,换个软驱得多少钱? , c3gW2E  
店里没有这样的配件,也不知道需要多少钱。 Z*r;"WHB  
7O)j]eeoL  
我在旁边听着,感觉应该没有问题,格式化过程中并没有报错,说明写盘是没问题的,最大的可能是一个比较傻容易暴露的病毒。所以凑过去看了看。 D9.H<.|36  
硬盘启动是没问题的。插上一张盘,dir显示盘未格式化。请出DEBUG来,输上几条指令,就把软盘0道0面1-12扇区读出来了。 NlLgXn!  
mov dx,0 ,]CZ(q9-  
mov ax,0200 OJX* :Q  
mov bx,1000 .FV wZ:d  
int 13 n`'v8 `a]  
读盘正确!只是从读出的内容看,没有建立DOS正确的文件格式,果然是个傻病毒!再看磁盘中断地址,也不对。 B,rpc\_  
S#gIfb<D  
我心里有了数,示意店老板这机器没硬件问题。 lM0 `yh  
老板会意,示意我别出声,跟国泰来的人说:“问题不大,可以修好,先交200元钱,下午就可以来取。” `*?8<Vm  
来人走后,我两分钟就把病毒清除了。再启动,软盘工作一切正常。 qU!xh )  
店里的两人看到我没有任何工具,只用DEBUG就把这病毒清除了,当然觉得很惊讶! \~j6}4XS1.  
聊了一会后,说:“咱店里的书你随便拿回家看,看过了如果不想留下,只要不影响卖,就拿回来,想自己留下就自己留下,钱的事好说!” +%Y`>1I^#  
然后打电话通知国泰来取电脑,无非是做了简单的维修之类。 #"PI%&  
由此,俺有了一个小图书馆,可以借书看了。 ~\4`tc  
俺拿走的第一本书,叫磁盘加密详解。 "^ ?|=sQ  
[ 此帖被伍胥之在09-08-2024 07:59重新编辑 ]
杺栫杣杊椌柮栬,䒴蓉艿芖。
suehan234 离线
级别: 营长
显示用户信息 
39楼  发表于: 2011-01-22   
回 38楼(伍胥之) 的帖子
佩服,玩也玩得这么专业!
描述
快速回复

验证问题:
3 * 6 = ? 正确答案:18
按"Ctrl+Enter"直接提交