| 整理:程序员的那些事(id:iProgrammer) 雷军的代码像诗一样优雅
 ↓↓↓
 有些网友在批评中质疑,说雷军代码不会是「屎」一样优雅吧。说这话的网友,也许是开玩笑的,也许是真没看过雷军写过的代码。
 在 2011 年的时候,我们在微博转过雷军在 1994 年写的一段完备的汇编代码。雷军这段汇编代码,有程序员评价「如今能写出这么高质量的代码的程序员恐怕也不多」。
 后来雷军在转发我们微博时还补充说:「这个程序第一个版本是我 1989 年写的,怀念当初写程序的快乐韶光。」
 之前微博帖子中引用的链接已挂,今天重新在网上找到了完备版,如下:
 (在移动端窄屏看大篇幅代码,大概体验不如 PC 端。大家可以试试点击右上角的「……」,然后「复制链接」,方便的时候,在 PC 端看看。)
 火线高能……
 ;
 ; 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 Version6.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 mouse
 2/17/1993 by Mr. Lei and Mr. Feng
 V2.05 RI cannot work in Windows DOS prompt
 3/9/1993 by Mr. Lei
 V2.06 1. When XMS cannot allocate 1K memory, RI halts.
 2. RI repeat deallocates EMS memory.
 V2.07 HotKey Setup Error
 4/25/1993 by Mr. Lei
 V2.08 KB Buffer
 V2.10 1. Release high memory blocks (EMM386 QEMM386 S-ICE 386MAX)
 2. RI copies flag
 V2.12 1. Exists a critical error in Init 8259 procedure
 2. Save [40:F0--FF] user data area
 
 
 
 dosseg
 .model tiny
 .code
 locals @@
 org 100h
 
 Start: jmp Main
 org 103h
 
 True equ 1
 False equ 0
 MaxHandles equ 100h
 
 INT3 macro
 out 0ffh,al
 endm
 ;
 ; HotKey Status Test Var
 ; --------------- ---------------
 ;
 ; 7 6 5 4 3 2 1 0 417 418496
 ; . . x . x . . . Left Alt is pressed 82
 ; x . . . x . . . Right Alt is pressed 88
 ; . . . x . x . . Left Ctrl is pressed 41
 ; . x . . . x . . Right Ctrl is pressed 44
 ; . . . . . . x . Left Shift is pressed2
 ; . . . . . . . x Right Shift is pressed1
 ;
 LeftAlt equ00101000b
 RightAlt equ10001000b
 LeftCtrl equ00010100b
 RightCtrl equ01000100b
 LeftShift equ00000010b
 RightShift equ00000001b
 HotKey db LeftCtrl or RightCtrl
 
 DataBegin dw0
 NextDataSeg dw 0ffffh
 oldInt2F_addr dw 0,0
 XMS_control dw 0,0
 Handle_begin dw0
 cvtOfs dw 0 ; DOS 3.0 equ 0 and above DOS 4.0 is1
 org 104h
 db 0dh
 db Revision
 db ??date
 db26
 org 114h
 tsrLength dw0
 MachineID db 0FCh ; IBM PC/AT
 
 AuxHotKey db 0 ; 2Dh ; 'X' Scan Code
 AuxHotKeyName db'X$ '
 Power db True
 Flag db'!'
 Kbd102 db0
 NoFlag db0
 StopFlag db1
 DosEnv dw0
 WorkSeg dw0
 PrevDataSeg dw0
 Copies db'1'
 old_8259 db 0 ; 21h port
 db 0 ; a1h port
 
 Status dw0
 XMSbit equ00000001b
 EMSbit equ00000010b
 SKbit equ10000000b
 
 GoINT1C: db 0eah
 oldInt1C_addr dw 0,0
 newINT1C:
 test cs:Status, SKbit
 jnz GoINT1C
 cmp cs:StopFlag,0
 jz @@0
 ;
 ; Mr. Lei 2/8/1993
 ; Problem: if WPS quit and reenter, old RI cann't control keyboard. ;
 push ds
 push ax
 xor ax, ax
 mov ds, ax
 mov ax, ds:[94]
 cmp ax, offset NewInt9
 pop ax
 pop ds
 jnz GoINT1C
 mov cs:StopFlag,0
 
 @@0: push ax
 push ds
 push es
 xor ax, ax
 mov ds, ax
 mov es, ds:[94+2]
 cmp word ptr es:[101h], 'IE' ;'LEI'
 jz @@1
 cli
 mov cs:StopFlag,1
 mov ax, ds:[94]
 mov cs:oldINT9_addr2, ax
 mov ax, ds:[94+2]
 mov cs:oldINT9_addr2[2], ax
 mov ds:[94], offset newINT9_2
 mov ds:[94+2], cs
 sti
 @@1: pop es
 pop ds
 pop ax
 jmp 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 Code
 jnz @@1
 push cs
 pop ax
 iret
 @@1: cmp ax, 0c0d7h+1
 jnz @@2
 jmp KeepSelf
 @@2: cmp ax, 0c0d7h+2
 jnz @@3
 jmp NoKeepSelf
 @@3: cmp ax, 0c0d7h+3
 jnz @@9
 mov cs:NextDataSeg,-1
 mov cs:Copies,'1'
 jmp NoKeepSelf
 @@9: jmp dword ptr cs:oldInt2F_addr
 
 
 CallInt9:
 ret
 
 
 newINT9_2:
 mov cs:NoFlag,1
 pushf
 db 9ah ; call far ptr oldint9_addr
 oldInt9_Addr2 dw 0,0
 jmp newINT9_proc
 
 newINT9:
 pushf
 db 9ah ; call far ptr oldint9_addr
 oldInt9_Addr dw 0, 0 cmp cs:NoFlag,0
 jz newINT9_proc
 mov cs:NoFlag,0
 iret
 newINT9_proc:
 cmp cs:Flag, '!' ; busy ?
 jnz @@0
 iret
 @@0:
 mov cs:Flag, '!' ; set busy flag
 push ax ; cmp hot key
 push bx
 push es
 mov ax,40h
 mov es,ax
 
 cmp cs:AuxHotKey,0
 jz @@_1
 mov bx, es:[1ah]
 cmp bx, es:[1ch]
 jz @@10
 push bx
 mov bl, es:[bx+1]
 cmp bl, cs:AuxHotKey
 pop bx
 jnz @@10
 @@_1:
 mov ah,es:[17h] ; test CTRL SHIFT ALT
 mov al,cs:HotKey
 push ax
 and ax,0f0fh
 cmp al,ah
 pop ax
 jnz @@10 cmp cs:Kbd102, True
 jnz @@1
 shr al,1
 shr al,1
 shr al,1
 shr al,1
 push ax
 mov ah, es:[18h]
 and ax, 303h
 cmp al, ah
 pop ax
 jnz @@10
 mov ah, es:[96h]
 shr ax,1
 shr ax,1
 and ax, 303h
 cmp al, ah
 jnz @@10 cmp cs:AuxHotKey,0
 jz @@_3
 inc bx
 inc bx
 cmp bx, 3eh
 jb @@_2
 mov bx, 1eh
 @@_2:
 mov es:[1ah], bx
 @@_3:
 call IsWinDos
 or ax, ax
 jz @@1
 call Beep
 @@10:
 sti
 pop es
 pop bx
 pop ax
 mov cs:Flag, ' ' ; no busy
 iret
 @@1: ; OK
 pop es
 pop bx
 pop ax
 
 KeepSelf:
 call RemoveTSR
 push es
 mov es,cs:WorkSeg
 mov dx,es:tsrLength
 mov di,dx
 mov al,0h ; Aug 24,1993
 mov cx,100h
 rep stosb
 pop es
 int 27h
 
 NoKeepSelf:
 mov ax,0e07h
 int 10h
 mov cs:clsStr, 47h ; Color (White in Red)
 call RemoveTSR
 dec cs:Copies
 call RestoreSelfIntVec
 push es
 cmp cs:PrevDataSeg,0
 jz @@1
 mov es, cs:PrevDataSeg
 mov es:NextDataSeg,-1
 @@1: pop es
 mov ax, 4c00h
 int 21h
 
 ; ---------------------------------------------------------------------------
 
 IsWinDOS:
 mov ax, 1600h
 int 2fh
 cmp al, 01h
 jz @@9 cmp al, 0ffh
 jz @@9 ; Windows/386 Version 2.X
 cmp al, 00h
 jz @@1 cmp al, 80h
 jnz @@9 ; Windows 3 in enhanced mode
 ; Version number in AL/AH
 @@1:
 mov ax, 4680h
 int 2fh
 cmp al, 80h
 jnz @@9
 xor ax, ax
 jmp @@10
 @@9: mov ax,1
 @@10: ret
 
 ; -----------------------------------------------------------------------
 RestoreSelfIntVec:
 cmp Copies,'0'
 jz @@0
 ret
 @@0:
 cli
 push cs
 pop ds
 xor ax, ax
 mov es, ax
 mov si, offset oldInt9_Addr
 mov di,94
 movsw
 movsw
 mov si, offset oldInt2F_Addr
 mov di, 2Fh4
 movsw
 movsw
 mov si, offset oldInt1C_Addr
 mov di, 1Ch4
 movsw
 movsw
 sti
 ret
 
 ; ------------- KERNEL PROGRAM ----------------------------------------------
 RemoveTSR:
 pop ax
 cli ; Setstack
 mov sp, cs
 mov ss, sp
 mov sp, 100h
 sti
 push ax
 
 cmp cs:Power, True
 jnz @@1
 call Init8259
 @@1:
 push cs
 pop ds
 @@_0:
 mov ax,ds:NextDataSeg
 cmp ax,-1
 jz @@_1
 mov cs:PrevDataSeg, ds
 mov ds, ax
 jmp @@_0
 @@_1: mov si,ds:DataBegin
 mov cs:WorkSeg, ds
 lodsw
 cmp ax,'XX'
 jz @@_2
 call Beep
 ret
 @@_2:
 call RestoreEnvStr
 call RestoreMCB ; restore current mcb
 call CloseFiles
 call RestorePort
 call RestoreLEDs
 call RestoreVecList ; Restore vectorslist
 call RestoreFloppyParam
 cmp cs:Power, True
 jnz @@2
 call RestoreCVTchain ; Restore cvt chain
 call RestoreMemoryManager
 @@2:
 call RestoreBiosData
 call Enable8259
 mov ah, 1 int 16h
 
 call RestoreClockSpeed
 call CloseSpeaker
 call ResetDisk
 call UpdateTime
 
 call ClosePRN
 mov bx,cs:WorkSeg
 mov ah,50h
 int 21h ; Set PSP segment
 mov ax,3 int 10h ; Set display mode
 
 call InitPRN
 call InitMouse
 mov al, cs:Copies
 cmp al,'1'
 ja @@_sh1
 mov cs:ShowCopies, ''
 jmp @@_sh2
 @@_sh1: mov cs:ShowCopies, al
 @@_sh2:
 mov si, offset clsStr
 call ColorPrintStr
 mov cs:Flag, ' ' ; no busy
 cmp Copies, '1'
 jnz @@_end
 mov cs:StopFlag,0
 @@_end:
 call ClearKB_buffer
 ret
 
 Beep:
 mov ax,0e07h
 int 10h
 ret
 
 ; #########################################################################
 
 ClearKB_Buffer:
 push es
 push bx
 mov bx, 0040h
 mov es, bx
 cli
 mov bx, es:[1ah]
 mov es:[1ch], bx
 sti
 pop bx
 pop es
 ret
 
 
 Init8259:
 ; cmp cs:Copies,'1'
 ; jz @@1
 ; ret
 @@1:
 cmp cs:MachineID, 0fch
 ja @@pc_xt
 @@AT:
 mov bx,870h ;
 mov al,0 ;
 out 0F1h,al ;
 jcxz $+2
 jcxz $+2
 mov al,11h ; ICW1
 out 0A0h,al
 jcxz $+2
 jcxz $+2
 out 20h,al
 jcxz $+2
 jcxz $+2
 mov al,bl ; ICW2
 out 0A1h,al
 jcxz $+2
 jcxz $+2
 mov al,bh
 out 21h,al
 jcxz $+2
 jcxz $+2
 mov al,2 ; ICW3
 out 0A1h,al
 jcxz $+2
 jcxz $+2
 mov al,4
 out 21h,al
 jcxz $+2
 jcxz $+2
 mov al,1 ; ICW4
 out 0A1h,al
 jcxz $+2
 jcxz $+2
 out 21h,al
 jcxz $+2
 jcxz $+2
 mov al,0FFh ; OCW1
 out 0A1h,al
 jcxz $+2
 jcxz $+2
 out 21h,al
 ret
 @@PC_XT:
 mov al,13h ; ICW1
 out 20h,al
 jcxz $+2
 jcxz $+2
 mov al,8 ; ICW2
 out 21h,al
 jcxz $+2
 jcxz $+2
 mov al,9 ; ICW4
 out 21h,al
 jcxz $+2
 jcxz $+2
 mov al,0FFh ; OCW1
 out 21h,al
 ret
 
 Enable8259:
 mov ax, word ptr cs:old_8259
 out 021h,al
 jcxz $+2
 jcxz $+2
 mov al,ah
 out 0a1h,al ; DEC PC Bus Mouse
 ret ; July 1994 by Mr. Lei
 
 ; -------------------------------------------------------------------------
 
 RestoreBiosData:
 lodsw
 cmp ax,'--'
 jz @@1
 call Beep
 ret
 @@1: push es
 push di
 mov di, 40h
 mov es, di
 
 mov di, 10h
 movsw
 mov di, 0a8h ; [40h:a8h]
 movsw
 movsw
 mov di, 49h
 mov cx, 1dh
 rep movsb
 
 mov di, 0f0h ; User data
 mov cx,8
 rep movsw
 
 pop di
 pop es
 ret
 
 ; -------------------------------------------------------------------------
 
 RestoreMCB:
 push ds
 push es
 lodsw ;'MZ'
 @@0: lodsw
 cmp ax,'MM'
 jz @@1
 mov es,ax
 xor di,di
 movsb
 movsw
 movsw
 inc ax
 mov bx, ds
 cmp ax, bx
 jz @@10
 mov byte ptr es:[8], 0 ; Aug 24,1993
 @@10: cmp byte ptr es:[0],'Z'
 jnz @@0
 mov byte ptr es:[10h],0
 jmp @@0
 @@1:
 pop es
 pop ds
 ret
 
 ; -------------------------------------------------------------------------
 CloseFiles:
 mov ax, 5 ; Begin handle
 push ds
 push si
 mov cx, 15 ; Max handle
 sub cx, ax
 inc cx
 mov bx, ax
 @@1: push bx
 push cx
 mov ah, 3eh
 int 21h
 pop cx
 pop bx
 inc bx
 loop @@1
 pop si
 pop ds
 ret
 
 ; -------------------------------------------------------------------------
 RestorePort:
 mov di, 40h ; restore port
 mov es, di
 xor di, di
 mov cx,8
 rep movsw
 ret
 
 ; -------------------------------------------------------------------------
 RestoreLEDs:
 lodsb
 and al, 11110000b ; LED status
 mov ah, es:[17h]
 and ah,00001111b
 or ah, al
 and ah, 0f0h ; Clear CTRL ALT SHIFT
 mov es:[17h], ah
 ret
 
 ; -------------------------------------------------------------------------
 RestoreEnvStr:
 lodsw
 push si
 push di
 push ds
 push es
 mov es, cs:DosEnv
 mov ds, ax
 xor si, si
 mov di, si
 @@0: lodsb
 or al, al
 jnz @@1 cmp byte ptr ds:[si],0
 jz @@2
 @@1: stosb
 jmp @@0
 @@2: stosb
 stosb
 pop es
 pop ds
 pop di
 pop si
 ret
 
 ; -----------------------------------------------------------------------
 RestoreVecList:
 xor ax,ax
 mov di,ax
 mov es,ax
 mov cx,100h
 @@0: lodsw
 xchg dx, ax
 lodsw
 cmp dx,'EL'
 jnz @@1 cmp al,'I'
 jnz @@1
 sub cl, ah
 push cx
 mov cl, ah
 mov ax, es:[di-4]
 mov dx, es:[di-2]
 @@a: stosw
 xchg ax, dx
 stosw
 xchg ax, dx
 loop @@a
 pop cx
 or cx, cx
 jz @@9
 jmp @@0
 @@1:
 xchg ax, dx
 stosw
 xchg ax, dx
 stosw
 loop @@0
 @@9:
 ret
 
 ;----------------------------------------------------------------------------
 RestoreFloppyParam: ; Mr. Lei 2/10/1992
 push es
 push ax
 xor ax, ax
 mov es, ax
 mov byte ptr es:[525h],2
 pop ax
 pop es
 ret
 
 ;---------------------------------------------------------------------------
 RestoreCVTchain:
 lodsw
 cmp ax,'VC'
 jz @@_0
 call Beep
 ret
 @@_0:
 push ax
 push cx
 push es
 
 ; -----------------------------------------------------------------
 lodsw ; DPB
 mov di, ax
 lodsw
 mov es, ax
 @@1: lodsb
 inc di
 stosb
 add di, cs:cvtOfs
 add di, 10h
 movsw
 movsw
 les di, es:[di+2]
 cmp di,-1
 jnz @@1
 
 ; -----------------------------------------------------------------
 lodsw ; DCB
 mov di, ax
 lodsw
 mov es, ax
 xor ax, ax
 dec ax
 stosw
 
 ; -----------------------------------------------------------------
 lodsw ; Device Driver Chain
 mov di, ax
 lodsw
 mov es, ax
 xor cx, cx
 @@9: push di
 mov cl,5
 rep movsw
 pop di
 les di, es:[di]
 mov ax, di
 inc ax
 jnz @@9
 pop es
 pop cx
 pop ax
 ret
 
 ; ----------------------------------------------------------------------------
 RestoreMemoryManager:
 test cs:Status, XMSbit
 jz @@1
 call LoadXMSstatus
 @@1:
 test cs:Status, EMSbit
 jz @@2
 call LoadEMSstatus
 @@2:
 ret
 
 
 LoadEMSstatus:
 lodsw
 cmp ax,'ME'
 jz @@_0
 call Beep
 ret
 @@_0:
 lodsw
 mov cx, ax
 xor dx, dx
 @@_1: push ds
 push si
 push dx
 push cx
 
 @@0: cmp dx, ds:[si]
 jz @@1
 add si,4
 loop @@0
 
 push cx
 mov cx,5
 @@0: mov ah, 45h ; Deallocate Handle and Memory
 int 67h
 or ah, ah
 jz @@1
 loop @@0
 @@1: pop cx
 
 @@1:
 pop cx
 pop dx
 pop si
 pop ds
 inc dx
 cmp dx, 100h
 jb @@_1
 shl cx,1
 shl cx,1
 add si, cx
 ret
 
 
 LoadXMSstatus:
 lodsw
 cmp ax,'MX'
 jz @@_0
 call Beep
 ret
 @@_0:
 lodsw
 mov cx, ax
 jcxz @@5
 @@1:
 lodsw
 mov dx, ax
 @@2: push dx
 mov ah, 0ah ;free
 call dword ptr cs:xms_control
 or ax, ax
 pop dx
 jnz @@4 cmp bl, 0abh
 jnz @@4
 push dx
 mov ah, 0dh ; unlock
 call dword ptr cs:xms_control
 or ax, ax
 pop dx
 jmp @@2
 @@4: loop @@1
 @@5: ret
 endp
 
 ; -----------------------------------------------------------------------
 CloseSpeaker:
 in al, 61h
 and al, 0fch
 out 61h, al
 ret
 
 ; -----------------------------------------------------------------------
 RestoreClockSpeed:
 mov al,00110110b
 out 43h, al
 xor ax, ax
 out 40h, al
 out 40h, al
 ret
 
 ; -----------------------------------------------------------------------
 ResetDisk:
 xor ax, ax
 xor dx, dx
 int 13h ; Restore A
 inc dx
 int 13h ; Restore B
 mov dl, 80h
 int 13h ; Restore C
 ret
 
 
 
 ; --------------------------------------------------------------------------
 ClosePRN:
 mov ah, 51h ; Get PSP seg
 int 21h
 mov es, bx
 mov ax, es:[16h] ; Prev PSP seg
 cmp ax, bx
 jnz @@9
 mov ax, 3e00h ; COMMAND
 mov bx, 4 int 21h
 @@9:
 ret
 
 InitPRN:
 mov ax, 3e00h
 mov bx, 4 ; PRN
 int 21h
 mov ax, 3d01h
 mov dx, offset PRNname
 push cs
 pop ds
 int 21h
 ret
 PRNname db 'PRN',0
 
 InitMouse: ; 2/16/1993 by Mr. Lei
 push es
 xor ax, ax
 mov es, ax
 cmp word ptr es:[33h4+2],0
 jz @@0 cmp word ptr es:[33h4],0
 jz @@0
 mov ax, 21h
 int 33h ; Hook Mouse Interrupt
 @@0: pop es
 ret
 
 ; ------------- CMOS CLOCK set to System -----------------------------------
 UpdateTime:
 call GetRealTime
 mov ah, 2dh
 int 21h
 ret
 
 GetRealTime:
 mov ah,2 int 1Ah
 mov al,ch
 call bcdxchg
 mov ch,al
 mov al,cl
 call bcdxchg
 mov cl,al
 mov al,dh
 call bcdxchg
 mov dh,al
 mov dl,0
 ret
 
 BCDxchg:
 push ax
 push cx
 mov cl,4
 shr al,cl
 pop cx
 mov bl,0Ah
 mul bl
 pop bx
 and bl,0Fh
 add al,bl
 ret
 
 ; -----------------------------------------------------------------------
 ; Displaystring
 ColorPrintStr:
 lodsb
 mov bh, al ; color
 xor cx, cx
 mov dx, 014fh
 mov ax, 0600h
 int 10h
 
 mov ah, 02 ; GotoXY (0, 0)
 xor dx, dx
 mov bh, 0 int 10h
 PrintStr:
 push cs
 pop ds
 xor bx, bx
 @@1: lodsb
 cmp al,'$'
 jz @@2
 or al, al
 jz @@2
 mov ah, 0eh
 int 10h
 jmp short @@1
 @@2: mov al, cs:clsStrcolor
 mov cs:clsStr, al
 ret
 
 ; -----------------------------------------------------------------------
 Self dw0
 clsStrcolor db 17h
 clsStr db 17h ; Color (White in Blue)
 db' RAMinit Version 2.12 (c) 1989-1994 by KingSoft Ltd. Mr. Leijun'
 db 0dh,0ah
 db' ['
 ShowCopies db ''
 db '] Activate...',0ah,0dh,'$'
 
 endTSR equ $
 mcbList equ offset endTSR + 2 +2
 vecList equ mcbList + 710 + 2 + 10h + 1 + 400h
 devLink equ vecList + 4 + 5 26 + 4 + 10 30h +4
 xmsList equ devLink + 2 + MaxHandles2
 emsList equ xmsList + 4 +1024
 crtMode equ emsList + 2 + 1Dh + 4 + 10h
 tsrLen equ crtMode +1
 ;
 ; DOS Environment Reserved by RI
 ; --------------------------------------------------
 ; Flag 'XX' 2 bytes
 ; Environment Segment 1 word
 ; Free MCBs
 |