雷军 1994 年写的代码

论坛 期权论坛 期权     
程序员的那些事   2019-6-8 05:28   2031   0
(给程序员的那些事加星标)
整合整理:程序员的那些事(id:iProgrammer)
前些天,「程序员的那些事」在趣图栏目中分享了《趣图:雷军的代码像诗一样优雅》。

有些网友在评论中质疑,说雷军代码不会是「屎」一样优雅吧。说这话的网友,也许是开玩笑的,也许是真没看过雷军写过的代码。

在 2011 年的时候,我们在微博转过雷军在 1994 年写的一段完整的汇编代码。雷军这段汇编代码,有程序员评价「如今能写出这么高质量的代码的程序员恐怕也不多」。



后来雷军在转发我们微博时还补充说:「这个程序第一个版本是我 1989 年写的,怀念当初写程序的快乐时光。」




之前微博帖子中引用的链接已挂,今天重新在网上找到了完整版,如下:

(在移动端窄屏看大篇幅代码,可能体验不如 PC 端。大家可以试试点击右上角的「……」,然后「复制链接」,方便的时候,在 PC 端看看。)

[code];; RI.ASM Revision 2.12 [ July 12, 1994 ]Revision equ 'V2.12 ';; ;  ;  RAMinit Release 2.0 ;  Copyright (c) 1989-1994 by Yellow Rose Software Co. ;  Written by Mr. Leijun ;  ;  Function: ;  Press HotKey to remove all TSR program after this program ;  ; ; ..........................................................................; Removed Softwares by RI:; SPDOS v6.0F, WPS v3.0F; Game Busters III, IV; NETX ( Novell 3.11 ); PC-CACHE; Norton Cache; Microsoft SmartDrv; SideKick 1.56A; MOUSE Driver; Crazy (Monochrome simulate CGA program); RAMBIOS v2.0; 386MAX Version 6.01; ..........................................................................; No cancel softwares:; Windows 3.1 MSD;; No removed TSR softwares:; MS-DOS fastopen; Buffers, Files ... (QEMM 6.0); QCache (386MAX 6.01); ..........................................................................;COMMENT V2.04 Use mouse driver software reset function to initiation mouse2/17/1993 by Mr. Lei and Mr. FengV2.05 RI cannot work in Windows DOS prompt3/9/1993 by Mr. LeiV2.06 1. When XMS cannot allocate 1K memory, RI halts.2. RI repeat deallocates EMS memory.V2.07 HotKey Setup Error4/25/1993 by Mr. LeiV2.08 KB BufferV2.10 1. Release high memory blocks (EMM386 QEMM386 S-ICE 386MAX)2. RI copies flagV2.12 1. Exists a critical error in Init 8259 procedure2. Save [40:F0--FF] user data areadosseg.model tiny.codelocals @@org 100hStart: jmp Mainorg 103hTrue equ 1False equ 0MaxHandles equ 100hINT3 macroout 0ffh,alendm;; HotKey Status Test Var; --------------- ---------------;; 7 6 5 4 3 2 1 0 417 418 496; . . x . x . . . Left Alt is pressed 8 2; x . . . x . . . Right Alt is pressed 8 8; . . . x . x . . Left Ctrl is pressed 4 1; . x . . . x . . Right Ctrl is pressed 4 4; . . . . . . x . Left Shift is pressed 2; . . . . . . . x Right Shift is pressed 1;LeftAlt equ 00101000bRightAlt equ 10001000bLeftCtrl equ 00010100bRightCtrl equ 01000100bLeftShift equ 00000010bRightShift equ 00000001bHotKey db LeftCtrl or RightCtrlDataBegin dw 0NextDataSeg dw 0ffffholdInt2F_addr dw 0, 0XMS_control dw 0, 0Handle_begin dw 0cvtOfs dw 0 ; DOS 3.0 equ 0 and above DOS 4.0 is 1org 104hdb 0dhdb Revisiondb ??datedb 26org 114htsrLength dw 0MachineID db 0FCh ; IBM PC/ATAuxHotKey db 0 ; 2Dh ; 'X' Scan CodeAuxHotKeyName db 'X$ 'Power db TrueFlag db '!'Kbd102 db 0NoFlag db 0StopFlag db 1DosEnv dw 0WorkSeg dw 0PrevDataSeg dw 0Copies db '1'old_8259 db 0 ; 21h portdb 0 ; a1h portStatus dw 0XMSbit equ 00000001bEMSbit equ 00000010bSKbit equ 10000000bGoINT1C: db 0eaholdInt1C_addr dw 0, 0newINT1C:test cs:Status, SKbitjnz GoINT1Ccmp cs:StopFlag, 0jz @@0;; Mr. Lei 2/8/1993; Problem: if WPS quit and reenter, old RI cann't control keyboard. ;push dspush axxor ax, axmov ds, axmov ax, ds:[94]cmp ax, offset NewInt9pop axpop dsjnz GoINT1Cmov cs:StopFlag, 0@@0: push axpush dspush esxor ax, axmov ds, axmov es, ds:[94+2]cmp word ptr es:[101h], 'IE' ; 'LEI'jz @@1climov cs:StopFlag, 1mov ax, ds:[94]mov cs:oldINT9_addr2, axmov ax, ds:[94+2]mov cs:oldINT9_addr2[2], axmov ds:[94], offset newINT9_2mov ds:[94+2], cssti@@1: pop espop dspop axjmp GoINT1C; ----------------------------------------------------------------------; INT2F Func;; AX = C0D7h Return RI segment in AX; AX = C0D8h Removes all TSR programs after RI; AX = C0D9h Removes all TSR programs include RI; AX = C0DAh Removes all RI copies; ----------------------------------------------------------------------newINT2F:cmp ax, 0c0d7h ; LEI Hanzi GB Codejnz @@1push cspop axiret@@1: cmp ax, 0c0d7h+1jnz @@2jmp KeepSelf@@2: cmp ax, 0c0d7h+2jnz @@3jmp NoKeepSelf@@3: cmp ax, 0c0d7h+3jnz @@9mov cs:NextDataSeg, -1mov cs:Copies, '1'jmp NoKeepSelf@@9: jmp dword ptr cs:oldInt2F_addrCallInt9:retnewINT9_2:mov cs:NoFlag, 1pushfdb 9ah ; call far ptr oldint9_addroldInt9_Addr2 dw 0, 0jmp newINT9_procnewINT9:pushfdb 9ah ; call far ptr oldint9_addroldInt9_Addr dw 0, 0 cmp cs:NoFlag, 0jz newINT9_procmov cs:NoFlag, 0iretnewINT9_proc:cmp cs:Flag, '!' ; busy ?jnz @@0iret@@0:mov cs:Flag, '!' ; set busy flagpush ax ; cmp hot keypush bxpush esmov ax,40hmov es,axcmp cs:AuxHotKey, 0jz @@_1mov bx, es:[1ah]cmp bx, es:[1ch]jz @@10push bxmov bl, es:[bx+1]cmp bl, cs:AuxHotKeypop bxjnz @@10@@_1:mov ah,es:[17h] ; test CTRL SHIFT ALTmov al,cs:HotKeypush axand ax,0f0fhcmp al,ahpop axjnz @@10 cmp cs:Kbd102, Truejnz @@1shr al, 1shr al, 1shr al, 1shr al, 1push axmov ah, es:[18h]and ax, 303hcmp al, ahpop axjnz @@10mov ah, es:[96h]shr ax, 1shr ax, 1and ax, 303hcmp al, ahjnz @@10 cmp cs:AuxHotKey, 0jz @@_3inc bxinc bxcmp bx, 3ehjb @@_2mov bx, 1eh@@_2:mov es:[1ah], bx@@_3:call IsWinDosor ax, axjz @@1call Beep@@10:stipop espop bxpop axmov cs:Flag, ' ' ; no busyiret@@1: ; OKpop espop bxpop axKeepSelf:call RemoveTSRpush esmov es,cs:WorkSegmov dx,es:tsrLengthmov di,dxmov al,0h ; Aug 24, 1993mov cx,100hrep stosbpop esint 27hNoKeepSelf:mov ax,0e07hint 10hmov cs:clsStr, 47h ; Color (White in Red)call RemoveTSRdec cs:Copiescall RestoreSelfIntVecpush escmp cs:PrevDataSeg, 0jz @@1mov es, cs:PrevDataSegmov es:NextDataSeg, -1@@1: pop esmov ax, 4c00hint 21h; ---------------------------------------------------------------------------IsWinDOS:mov ax, 1600hint 2fhcmp al, 01hjz @@9 cmp al, 0ffhjz @@9 ; Windows/386 Version 2.Xcmp al, 00hjz @@1 cmp al, 80hjnz @@9 ; Windows 3 in enhanced mode; Version number in AL/AH@@1:mov ax, 4680hint 2fhcmp al, 80hjnz @@9xor ax, axjmp @@10@@9: mov ax, 1@@10: ret; -----------------------------------------------------------------------RestoreSelfIntVec:cmp Copies, '0'jz @@0ret@@0:clipush cspop dsxor ax, axmov es, axmov si, offset oldInt9_Addrmov di, 94movswmovswmov si, offset oldInt2F_Addrmov di, 2Fh4movswmovswmov si, offset oldInt1C_Addrmov di, 1Ch4movswmovswstiret; ------------- KERNEL PROGRAM ----------------------------------------------RemoveTSR:pop axcli ; Set stackmov sp, csmov ss, spmov sp, 100hstipush axcmp cs:Power, Truejnz @@1call Init8259@@1:push cspop ds@@_0:mov ax,ds:NextDataSegcmp ax, -1jz @@_1mov cs:PrevDataSeg, dsmov ds, axjmp @@_0@@_1: mov si,ds:DataBeginmov cs:WorkSeg, dslodswcmp ax, 'XX'jz @@_2call Beepret@@_2:call RestoreEnvStrcall RestoreMCB ; restore current mcbcall CloseFilescall RestorePortcall RestoreLEDscall RestoreVecList ; Restore vectors listcall RestoreFloppyParamcmp cs:Power, Truejnz @@2call RestoreCVTchain ; Restore cvt chaincall RestoreMemoryManager@@2:call RestoreBiosDatacall Enable8259mov ah, 1 int 16hcall RestoreClockSpeedcall CloseSpeakercall ResetDiskcall UpdateTimecall ClosePRNmov bx,cs:WorkSegmov ah,50hint 21h ; Set PSP segmentmov ax,3 int 10h ; Set display modecall InitPRNcall InitMousemov al, cs:Copiescmp al, '1'ja @@_sh1mov cs:ShowCopies, ''jmp @@_sh2@@_sh1: mov cs:ShowCopies, al@@_sh2:mov si, offset clsStrcall ColorPrintStrmov cs:Flag, ' ' ; no busycmp Copies, '1'jnz @@_endmov cs:StopFlag, 0@@_end:call ClearKB_bufferretBeep:mov ax,0e07hint 10hret; #########################################################################ClearKB_Buffer:push espush bxmov bx, 0040hmov es, bxclimov bx, es:[1ah]mov es:[1ch], bxstipop bxpop esretInit8259:; cmp cs:Copies, '1'; jz @@1; ret@@1:cmp cs:MachineID, 0fchja @@pc_xt@@AT:mov bx,870h ;mov al,0 ;out 0F1h,al ;jcxz $+2jcxz $+2mov al,11h ; ICW1out 0A0h,aljcxz $+2jcxz $+2out 20h,aljcxz $+2jcxz $+2mov al,bl ; ICW2out 0A1h,aljcxz $+2jcxz $+2mov al,bhout 21h,aljcxz $+2jcxz $+2mov al,2 ; ICW3out 0A1h,aljcxz $+2jcxz $+2mov al,4out 21h,aljcxz $+2jcxz $+2mov al,1 ; ICW4out 0A1h,aljcxz $+2jcxz $+2out 21h,aljcxz $+2jcxz $+2mov al,0FFh ; OCW1out 0A1h,aljcxz $+2jcxz $+2out 21h,alret@@PC_XT:mov al,13h ; ICW1out 20h,aljcxz $+2jcxz $+2mov al,8 ; ICW2out 21h,aljcxz $+2jcxz $+2mov al,9 ; ICW4out 21h,aljcxz $+2jcxz $+2mov al,0FFh ; OCW1out 21h,alretEnable8259:mov ax, word ptr cs:old_8259out 021h,aljcxz $+2jcxz $+2mov al,ahout 0a1h,al ; DEC PC Bus Mouseret ; July 1994 by Mr. Lei; -------------------------------------------------------------------------RestoreBiosData:lodswcmp ax, '--'jz @@1call Beepret@@1: push espush dimov di, 40hmov es, dimov di, 10hmovswmov di, 0a8h ; [40h:a8h]movswmovswmov di, 49hmov cx, 1dhrep movsbmov di, 0f0h ; User datamov cx, 8rep movswpop dipop esret; -------------------------------------------------------------------------RestoreMCB:push dspush eslodsw ; 'MZ'@@0: lodswcmp ax, 'MM'jz @@1mov es,axxor di,dimovsbmovswmovswinc axmov bx, dscmp ax, bxjz @@10mov byte ptr es:[8], 0 ; Aug 24, 1993@@10: cmp byte ptr es:[0], 'Z'jnz @@0mov byte ptr es:[10h], 0jmp @@0@@1:pop espop dsret; -------------------------------------------------------------------------CloseFiles:mov ax, 5 ; Begin handlepush dspush simov cx, 15 ; Max handlesub cx, axinc cxmov bx, ax@@1: push bxpush cxmov ah, 3ehint 21hpop cxpop bxinc bxloop @@1pop sipop dsret; -------------------------------------------------------------------------RestorePort:mov di, 40h ; restore portmov es, dixor di, dimov cx, 8rep movswret; -------------------------------------------------------------------------RestoreLEDs:lodsband al, 11110000b ; LED statusmov ah, es:[17h]and ah, 00001111bor ah, aland ah, 0f0h ; Clear CTRL ALT SHIFTmov es:[17h], ahret; -------------------------------------------------------------------------RestoreEnvStr:lodswpush sipush dipush dspush esmov es, cs:DosEnvmov ds, axxor si, simov di, si@@0: lodsbor al, aljnz @@1 cmp byte ptr ds:[si], 0jz @@2@@1: stosbjmp @@0@@2: stosbstosbpop espop dspop dipop siret; -----------------------------------------------------------------------RestoreVecList:xor ax,axmov di,axmov es,axmov cx,100h@@0: lodswxchg dx, axlodswcmp dx, 'EL'jnz @@1 cmp al, 'I'jnz @@1sub cl, ahpush cxmov cl, ahmov ax, es:[di-4]mov dx, es:[di-2]@@a: stoswxchg ax, dxstoswxchg ax, dxloop @@apop cxor cx, cxjz @@9jmp @@0@@1:xchg ax, dxstoswxchg ax, dxstoswloop @@0@@9:ret;----------------------------------------------------------------------------RestoreFloppyParam: ; Mr. Lei 2/10/1992push espush axxor ax, axmov es, axmov byte ptr es:[525h], 2pop axpop esret;---------------------------------------------------------------------------RestoreCVTchain:lodswcmp ax, 'VC'jz @@_0call Beepret@@_0:push axpush cxpush es; -----------------------------------------------------------------lodsw ; DPBmov di, axlodswmov es, ax@@1: lodsbinc distosbadd di, cs:cvtOfsadd di, 10hmovswmovswles di, es:[di+2]cmp di, -1jnz @@1; -----------------------------------------------------------------lodsw ; DCBmov di, axlodswmov es, axxor ax, axdec axstosw; -----------------------------------------------------------------lodsw ; Device Driver Chainmov di, axlodswmov es, axxor cx, cx@@9: push dimov cl, 5rep movswpop diles di, es:[di]mov ax, diinc axjnz @@9pop espop cxpop axret; ----------------------------------------------------------------------------RestoreMemoryManager:test cs:Status, XMSbitjz @@1call LoadXMSstatus@@1:test cs:Status, EMSbitjz @@2call LoadEMSstatus@@2:retLoadEMSstatus:lodswcmp ax, 'ME'jz @@_0call Beepret@@_0:lodswmov cx, axxor dx, dx@@_1: push dspush sipush dxpush cx@@0: cmp dx, ds:[si]jz @@1add si, 4loop @@0push cxmov cx, 5@@0: mov ah, 45h ; Deallocate Handle and Memoryint 67hor ah, ahjz @@1loop @@0@@1: pop cx@@1:pop cxpop dxpop sipop dsinc dxcmp dx, 100hjb @@_1shl cx, 1shl cx, 1add si, cxretLoadXMSstatus:lodswcmp ax, 'MX'jz @@_0call Beepret@@_0:lodswmov cx, axjcxz @@5@@1:lodswmov dx, ax@@2: push dxmov ah, 0ah ; freecall dword ptr cs:xms_controlor ax, axpop dxjnz @@4 cmp bl, 0abhjnz @@4push dxmov ah, 0dh ; unlockcall dword ptr cs:xms_controlor ax, axpop dxjmp @@2@@4: loop @@1@@5: retendp; -----------------------------------------------------------------------CloseSpeaker:in al, 61hand al, 0fchout 61h, alret; -----------------------------------------------------------------------RestoreClockSpeed:mov al, 00110110bout 43h, alxor ax, axout 40h, alout 40h, alret; -----------------------------------------------------------------------ResetDisk:xor ax, axxor dx, dxint 13h ; Restore Ainc dxint 13h ; Restore Bmov dl, 80hint 13h ; Restore Cret; --------------------------------------------------------------------------ClosePRN:mov ah, 51h ; Get PSP segint 21hmov es, bxmov ax, es:[16h] ; Prev PSP segcmp ax, bxjnz @@9mov ax, 3e00h ; COMMANDmov bx, 4 int 21h@@9:retInitPRN:mov ax, 3e00hmov bx, 4 ; PRNint 21hmov ax, 3d01hmov dx, offset PRNnamepush cspop dsint 21hretPRNname db 'PRN',0InitMouse: ; 2/16/1993 by Mr. Leipush esxor ax, axmov es, axcmp word ptr es:[33h4+2], 0jz @@0 cmp word ptr es:[33h4], 0jz @@0mov ax, 21hint 33h ; Hook Mouse Interrupt@@0: pop esret; ------------- CMOS CLOCK set to System -----------------------------------UpdateTime:call GetRealTimemov ah, 2dhint 21hretGetRealTime:mov ah,2 int 1Ahmov al,chcall bcdxchgmov ch,almov al,clcall bcdxchgmov cl,almov al,dhcall bcdxchgmov dh,almov dl,0retBCDxchg:push axpush cxmov cl,4shr al,clpop cxmov bl,0Ahmul blpop bxand bl,0Fhadd al,blret; -----------------------------------------------------------------------; Display stringColorPrintStr:lodsbmov bh, al ; colorxor cx, cxmov dx, 014fhmov ax, 0600hint 10hmov ah, 02 ; GotoXY (0, 0)xor dx, dxmov bh, 0 int 10hPrintStr:push cspop dsxor bx, bx@@1: lodsbcmp al, '$'jz @@2or al, aljz @@2mov ah, 0ehint 10hjmp short @@1@@2: mov al, cs:clsStrcolormov cs:clsStr, alret; -----------------------------------------------------------------------Self dw 0clsStrcolor db 17hclsStr db 17h ; Color (White in Blue)db ' RAMinit Version 2.12 (c) 1989-1994 by KingSoft Ltd. Mr. Leijun'db 0dh,0ahdb ' ['ShowCopies db ''db '] Activate...',0ah,0dh,'$'endTSR equ $mcbList equ offset endTSR + 2 + 2vecList equ mcbList + 710 + 2 + 10h + 1 + 400hdevLink equ vecList + 4 + 5  26 + 4 + 10  30h + 4xmsList equ devLink + 2 + MaxHandles  2emsList equ xmsList + 4 + 1024crtMode equ emsList + 2 + 1Dh + 4 + 10htsrLen equ crtMode + 1;; DOS Environment Reserved by RI; --------------------------------------------------; Flag 'XX' 2 bytes; Environment Segment 1 word; Free MCBs
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:140
帖子:28
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP