|
|
51CTO旗下网站
|
|
移动端

雷军22年前写的代码 你见过吗?

原来雷军年轻的时候,也是一名程序员,而且一干就是10年。雷军在22年前的作文中写道:我会当一辈子程序员,由此可以看出雷军对编程有着狂热的爱好。还有网友分享了一篇雷军22年前写的代码,废话不多说,直接贴代码。

作者:佚名来源:程序师|2018-07-04 13:00

作为小米科技的创始人、董事长和首席执行官,雷军的名字如雷贯耳。网上出现一篇“刘强东的代码水平如何”的文章,有网友在下面回复“代码只服雷军”。这个回复吸引了小编的注意,雷军的代码水平真的很牛吗?

原来雷军年轻的时候,也是一名程序员,而且一干就是10年。雷军在22年前的作文中写道:我会当一辈子程序员,由此可以看出雷军对编程有着狂热的爱好。

还有网友分享了一篇雷军22年前写的代码,废话不多说,直接贴代码。

  1. ; RI.ASM  Revision 2.12         [ July 12, 1994 ] 
  2. Revision        equ     'V2.12 ' 
  3. ; ************************************************************************** 
  4. ; *                                                                        * 
  5. ; *  RAMinit  Release 2.0                                                  * 
  6. ; *  Copyright (c) 1989-1994 by Yellow Rose Software Co.                   * 
  7. ; *  Written by Mr. Leijun                                                 * 
  8. ; *                                                                        * 
  9. ; *  Function:                                                             * 
  10. ; *    Press HotKey to remove all TSR program after this program           * 
  11. ; *                                                                        * 
  12. ; ************************************************************************** 
  13.   
  14. ; .......................................................................... 
  15. ; Removed Softwares by RI: 
  16. ;   SPDOS v6.0F, WPS v3.0F 
  17. ;   Game Busters III, IV 
  18. ;   NETX ( Novell 3.11 ) 
  19. ;   PC-CACHE 
  20. ;   Norton Cache 
  21. ;   Microsoft SmartDrv 
  22. ;   SideKick 1.56A 
  23. ;   MOUSE Driver 
  24. ;   Crazy (Monochrome simulate CGA program) 
  25. ;   RAMBIOS v2.0 
  26. ;   386MAX Version 6.01 
  27. ; .......................................................................... 
  28. No cancel softwares: 
  29. ;   Windows 3.1 MSD 
  30. No removed TSR softwares: 
  31. ;   MS-DOS fastopen 
  32. ;   Buffers, Files ... (QEMM 6.0) 
  33. ;   QCache (386MAX 6.01) 
  34. ; .......................................................................... 
  35. COMMENT * 
  36.   
  37. V2.04  Use mouse driver software reset function to initiation mouse 
  38.         2/17/1993 by  Mr. Lei and Mr. Feng 
  39. V2.05  RI cannot work in Windows DOS prompt 
  40.         3/9/1993  by Mr. Lei 
  41. V2.06  1. When XMS cannot allocate 1K memory, RI halts. 
  42.         2. RI repeat deallocates EMS memory. 
  43. V2.07  HotKey Setup Error 
  44.         4/25/1993 by Mr. Lei 
  45. V2.08  KB Buffer 
  46. V2.10  1. Release high memory blocks (EMM386 QEMM386 S-ICE 386MAX) 
  47.         2. RI copies flag 
  48. V2.12  1. Exists a critical error in Init 8259 procedure 
  49.         2. Save [40:F0--FF] user data area 
  50.   
  51.   
  52.                 dosseg 
  53.                 .model tiny 
  54.                 .code 
  55.                 locals  @@ 
  56.                 org     100h 
  57.   
  58. Start:          jmp     Main 
  59.                 org     103h 
  60.   
  61.   True          equ     1 
  62.   False         equ     0 
  63.   MaxHandles    equ     100h 
  64.   
  65.         INT3    macro 
  66.                 out     0ffh,al 
  67.                 endm 
  68.   ; 
  69.   ;             HotKey Status                             Test Var 
  70.   ;            ---------------                         --------------- 
  71.   ; 
  72.   ;  7 6 5 4 3 2 1 0                                    417  418  496 
  73.   ;  . . x . x . . .    Left Alt is pressed              8    2 
  74.   ;  x . . . x . . .    Right Alt is pressed             8         8 
  75.   ;  . . . x . x . .    Left Ctrl is pressed             4    1 
  76.   ;  . x . . . x . .    Right Ctrl is pressed            4         4 
  77.   ;  . . . . . . x .    Left Shift is pressed            2 
  78.   ;  . . . . . . . x    Right Shift is pressed           1 
  79.   ; 
  80.   LeftAlt       equ     00101000b 
  81.   RightAlt      equ     10001000b 
  82.   LeftCtrl      equ     00010100b 
  83.   RightCtrl     equ     01000100b 
  84.   LeftShift     equ     00000010b 
  85.   RightShift    equ     00000001b 
  86.   HotKey        db      LeftCtrl or RightCtrl 
  87.   
  88.   DataBegin     dw      0 
  89.   NextDataSeg   dw      0ffffh 
  90.   oldInt2F_addr dw      0, 0 
  91.   XMS_control   dw      0, 0 
  92.   Handle_begin  dw      0 
  93.   cvtOfs        dw      0       ; DOS 3.0 equ 0 and above DOS 4.0 is 1 
  94.                 org     104h 
  95.                 db      0dh 
  96.                 db      Revision 
  97.                 db      ??date 
  98.                 db      26 
  99.                 org     114h 
  100.   tsrLength     dw      0 
  101.   MachineID     db      0FCh    ; IBM PC/AT 
  102.   
  103.   AuxHotKey     db      0       ; 2Dh     ; 'X' Scan Code 
  104.   AuxHotKeyName db      'X$      ' 
  105.   Power         db      True 
  106.   Flag          db      '!' 
  107.   Kbd102        db      0 
  108.   NoFlag        db      0 
  109.   StopFlag      db      1 
  110.   DosEnv        dw      0 
  111.   WorkSeg       dw      0 
  112.   PrevDataSeg   dw      0 
  113.   Copies        db      '1' 
  114.   old_8259      db      0       ; 21h port 
  115.                 db      0       ; a1h port 
  116.   
  117.   Status        dw      0 
  118.   XMSbit        equ     00000001b 
  119.   EMSbit        equ     00000010b 
  120.   SKbit         equ     10000000b 
  121.   
  122. GoINT1C:        db      0eah 
  123.   oldInt1C_addr dw      0, 0 
  124. newINT1C: 
  125.                 test    cs:Status, SKbit 
  126.                 jnz     GoINT1C 
  127.                 cmp     cs:StopFlag, 0 
  128.                 jz      @@0 
  129. ; Mr. Lei  2/8/1993 
  130. ; Problem: if WPS quit and reenter, old RI cann't control keyboard. 
  131.                 push    ds 
  132.                 push    ax 
  133.                 xor     ax, ax 
  134.                 mov     ds, ax 
  135.                 mov     ax, ds:[9*4] 
  136.                 cmp     ax, offset NewInt9 
  137.                 pop     ax 
  138.                 pop     ds 
  139.                 jnz     GoINT1C 
  140.                 mov     cs:StopFlag, 0 
  141.   
  142.         @@0:    push    ax 
  143.                 push    ds 
  144.                 push    es 
  145.                 xor     ax, ax 
  146.                 mov     ds, ax 
  147.                 mov     es, ds:[9*4+2] 
  148.                 cmp     word ptr es:[101h], 'IE'        ; 'LEI' 
  149.                 jz      @@1 
  150.                 cli 
  151.                 mov     cs:StopFlag, 1 
  152.                 mov     ax, ds:[9*4] 
  153.                 mov     csldINT9_addr2, ax 
  154.                 mov     ax, ds:[9*4+2] 
  155.                 mov     csldINT9_addr2[2], ax 
  156.                 mov     ds:[9*4], offset newINT9_2 
  157.                 mov     ds:[9*4+2], cs 
  158.                 sti 
  159.         @@1:    pop     es 
  160.                 pop     ds 
  161.                 pop     ax 
  162.                 jmp     GoINT1C 
  163.   
  164. ---------------------------------------------------------------------- 
  165. ;  INT2F Func 
  166. ;     AX = C0D7h   Return RI segment in AX 
  167. ;     AX = C0D8h   Removes all TSR programs after RI 
  168. ;     AX = C0D9h   Removes all TSR programs include RI 
  169. ;     AX = C0DAh   Removes all RI copies 
  170. ---------------------------------------------------------------------- 
  171.   
  172. newINT2F: 
  173.                 cmp     ax, 0c0d7h      ; LEI Hanzi GB Code 
  174.                 jnz     @@1 
  175.                 push    cs 
  176.                 pop     ax 
  177.                 iret 
  178.         @@1:    cmp     ax, 0c0d7h+1 
  179.                 jnz     @@2 
  180.                 jmp     KeepSelf 
  181.         @@2:    cmp     ax, 0c0d7h+2 
  182.                 jnz     @@3 
  183.                 jmp     NoKeepSelf 
  184.         @@3:    cmp     ax, 0c0d7h+3 
  185.                 jnz     @@9 
  186.                 mov     cs:NextDataSeg, -1 
  187.                 mov     cs:Copies, '1' 
  188.                 jmp     NoKeepSelf 
  189.         @@9:    jmp     dword ptr csldInt2F_addr 
  190.   
  191.   
  192. CallInt9: 
  193.                 ret 
  194.   
  195.   
  196. newINT9_2: 
  197.                 mov     cs:NoFlag, 1 
  198.                 pushf 
  199.                 db      9ah             ; call far ptr oldint9_addr 
  200.   oldInt9_Addr2 dw      0, 0 
  201.                 jmp     newINT9_proc 
  202.   
  203. newINT9: 
  204.                 pushf 
  205.                 db      9ah             ; call far ptr oldint9_addr 
  206.   oldInt9_Addr  dw      0, 0 
  207.                 cmp     cs:NoFlag, 0 
  208.                 jz      newINT9_proc 
  209.                 mov     cs:NoFlag, 0 
  210.                 iret 
  211. newINT9_proc: 
  212.                 cmp     cs:Flag, '!'    ; busy ? 
  213.                 jnz     @@0 
  214.                 iret 
  215.         @@0: 
  216.                 mov     cs:Flag, '!'    ; set busy flag 
  217.                 push    ax              ; cmp hot key 
  218.                 push    bx 
  219.                 push    es 
  220.                 mov     ax,40h 
  221.                 mov     es,ax 
  222.   
  223.                 cmp     cs:AuxHotKey, 0 
  224.                 jz      @@_1 
  225.                 mov     bx, es:[1ah] 
  226.                 cmp     bx, es:[1ch] 
  227.                 jz      @@10 
  228.                 push    bx 
  229.                 mov     bl, es:[bx+1] 
  230.                 cmp     bl, cs:AuxHotKey 
  231.                 pop     bx 
  232.                 jnz     @@10 
  233.         @@_1: 
  234.                 mov     ah,es:[17h]     ; test CTRL SHIFT ALT 
  235.                 mov     al,cs:HotKey 
  236.                 push    ax 
  237.                 and     ax,0f0fh 
  238.                 cmp     al,ah 
  239.                 pop     ax 
  240.                 jnz     @@10 
  241.                 cmp     cs:Kbd102, True 
  242.                 jnz     @@1 
  243.                 shr     al, 1 
  244.                 shr     al, 1 
  245.                 shr     al, 1 
  246.                 shr     al, 1 
  247.                 push    ax 
  248.                 mov     ah, es:[18h] 
  249.                 and     ax, 303h 
  250.                 cmp     al, ah 
  251.                 pop     ax 
  252.                 jnz     @@10 
  253.                 mov     ah, es:[96h] 
  254.                 shr     ax, 1 
  255.                 shr     ax, 1 
  256.                 and     ax, 303h 
  257.                 cmp     al, ah 
  258.                 jnz     @@10 
  259.   
  260.                 cmp     cs:AuxHotKey, 0 
  261.                 jz      @@_3 
  262.                 inc     bx 
  263.                 inc     bx 
  264.                 cmp     bx, 3eh 
  265.                 jb      @@_2 
  266.                 mov     bx, 1eh 
  267.         @@_2: 
  268.                 mov     es:[1ah], bx 
  269.         @@_3: 
  270.                 call    IsWinDos 
  271.                 or      ax, ax 
  272.                 jz      @@1 
  273.                 call    Beep 
  274.         @@10: 
  275.                 sti 
  276.                 pop     es 
  277.                 pop     bx 
  278.                 pop     ax 
  279.                 mov     cs:Flag, ' '    ; no busy 
  280.                 iret 
  281.         @@1:                                            ; OK 
  282.                 pop     es 
  283.                 pop     bx 
  284.                 pop     ax 
  285.   
  286. KeepSelf: 
  287.                 call    RemoveTSR 
  288.                 push    es 
  289.                 mov     es,cs:WorkSeg 
  290.                 mov     dx,es:tsrLength 
  291.                 mov     di,dx 
  292.                 mov     al,0h           ; Aug 24, 1993 
  293.                 mov     cx,100h 
  294.                 rep     stosb 
  295.                 pop     es 
  296.                 int     27h 
  297.   
  298. NoKeepSelf: 
  299.                 mov     ax,0e07h 
  300.                 int     10h 
  301.                 mov     cs:clsStr, 47h  ; Color (White in Red) 
  302.                 call    RemoveTSR 
  303.                 dec     cs:Copies 
  304.                 call    RestoreSelfIntVec 
  305.                 push    es 
  306.                 cmp     csrevDataSeg, 0 
  307.                 jz      @@1 
  308.                 mov     es, csrevDataSeg 
  309.                 mov     es:NextDataSeg, -1 
  310.         @@1:    pop     es 
  311.                 mov     ax, 4c00h 
  312.                 int     21h 
  313.   
  314. --------------------------------------------------------------------------- 
  315.   
  316. IsWinDOS: 
  317.                 mov     ax, 1600h 
  318.                 int     2fh 
  319.                 cmp     al, 01h 
  320.                 jz      @@9 
  321.                 cmp     al, 0ffh 
  322.                 jz      @@9                     ; Windows/386 Version 2.X 
  323.                 cmp     al, 00h 
  324.                 jz      @@1 
  325.                 cmp     al, 80h 
  326.                 jnz     @@9                     ; Windows 3 in enhanced mode 
  327.                                                 ; Version number in AL/AH 
  328.         @@1: 
  329.                 mov     ax, 4680h 
  330.                 int     2fh 
  331.                 cmp     al, 80h 
  332.                 jnz     @@9 
  333.                 xor     ax, ax 
  334.                 jmp     @@10 
  335.         @@9:    mov     ax, 1 
  336.         @@10:   ret 
  337.   
  338. ----------------------------------------------------------------------- 
  339. RestoreSelfIntVec: 
  340.                 cmp     Copies, '0' 
  341.                 jz      @@0 
  342.                 ret 
  343.         @@0: 
  344.                 cli 
  345.                 push    cs 
  346.                 pop     ds 
  347.                 xor     ax, ax 
  348.                 mov     es, ax 
  349.                 mov     si, offset oldInt9_Addr 
  350.                 mov     di, 9*4 
  351.                 movsw 
  352.                 movsw 
  353.                 mov     si, offset oldInt2F_Addr 
  354.                 mov     di, 2Fh*4 
  355.                 movsw 
  356.                 movsw 
  357.                 mov     si, offset oldInt1C_Addr 
  358.                 mov     di, 1Ch*4 
  359.                 movsw 
  360.                 movsw 
  361.                 sti 
  362.                 ret 
  363.   
  364. ------------- KERNEL PROGRAM ---------------------------------------------- 
  365. RemoveTSR: 
  366.                 pop     ax 
  367.                 cli                     ; Set stack 
  368.                 mov     sp, cs 
  369.                 mov     ss, sp 
  370.                 mov     sp, 100h 
  371.                 sti 
  372.                 push    ax 
  373.   
  374.                 cmp     csower, True 
  375.                 jnz     @@1 
  376.                 call    Init8259 
  377.         @@1: 
  378.                 push    cs 
  379.                 pop     ds 
  380.         @@_0: 
  381.                 mov     ax,ds:NextDataSeg 
  382.                 cmp     ax, -1 
  383.                 jz      @@_1 
  384.                 mov     csrevDataSeg, ds 
  385.                 mov     ds, ax 
  386.                 jmp     @@_0 
  387.         @@_1:   mov     si,dsataBegin 
  388.                 mov     cs:WorkSeg, ds 
  389.                 lodsw 
  390.                 cmp     ax, 'XX' 
  391.                 jz      @@_2 
  392.                 call    Beep 
  393.                 ret 
  394.         @@_2: 
  395.                 call    RestoreEnvStr 
  396.                 call    RestoreMCB         ; restore current mcb 
  397.                 call    CloseFiles 
  398.                 call    RestorePort 
  399.                 call    RestoreLEDs 
  400.                 call    RestoreVecList     ; Restore vectors list 
  401.                 call    RestoreFloppyParam 
  402.                 cmp     csower, True 
  403.                 jnz     @@2 
  404.                 call    RestoreCVTchain    ; Restore cvt chain 
  405.                 call    RestoreMemoryManager 
  406.         @@2: 
  407.                 call    RestoreBiosData 
  408.                 call    Enable8259 
  409.                 mov     ah, 1 
  410.                 int     16h 
  411.   
  412.                 call    RestoreClockSpeed 
  413.                 call    CloseSpeaker 
  414.                 call    ResetDisk 
  415.                 call    UpdateTime 
  416.   
  417.                 call    ClosePRN 
  418.                 mov     bx,cs:WorkSeg 
  419.                 mov     ah,50h 
  420.                 int     21h                ; Set PSP segment 
  421.                 mov     ax,3 
  422.                 int     10h                ; Set display mode 
  423.   
  424.                 call    InitPRN 
  425.                 call    InitMouse 
  426.                 mov     al, cs:Copies 
  427.                 cmp     al, '1' 
  428.                 ja      @@_sh1 
  429.                 mov     cs:ShowCopies, '*' 
  430.                 jmp     @@_sh2 
  431.         @@_sh1: mov     cs:ShowCopies, al 
  432.         @@_sh2: 
  433.                 mov     si, offset clsStr 
  434.                 call    ColorPrintStr 
  435.                 mov     cs:Flag, ' '       ; no busy 
  436.                 cmp     Copies, '1' 
  437.                 jnz     @@_end 
  438.                 mov     cs:StopFlag, 0 
  439.         @@_end: 
  440.                 call    ClearKB_buffer 
  441.                 ret 
  442.   
  443. Beep: 
  444.                 mov     ax,0e07h 
  445.                 int     10h 
  446.                 ret 
  447.   
  448. ; ######################################################################### 
  449.   
  450. ClearKB_Buffer: 
  451.                 push    es 
  452.                 push    bx 
  453.                 mov     bx, 0040h 
  454.                 mov     es, bx 
  455.                 cli 
  456.                 mov     bx, es:[1ah] 
  457.                 mov     es:[1ch], bx 
  458.                 sti 
  459.                 pop     bx 
  460.                 pop     es 
  461.                 ret 
  462.   
  463.   
  464. Init8259: 
  465.         ;       cmp     cs:Copies, '1' 
  466.         ;       jz      @@1 
  467.         ;       ret 
  468.         @@1: 
  469.                 cmp     cs:MachineID, 0fch 
  470.                 ja      @@pc_xt 
  471.         @@AT
  472.                 mov     bx,870h         ; 
  473.                 mov     al,0            ; 
  474.                 out     0F1h,al         ; 
  475.                 jcxz    $+2 
  476.                 jcxz    $+2 
  477.                 mov     al,11h          ; ICW1 
  478.                 out     0A0h,al 
  479.                 jcxz    $+2 
  480.                 jcxz    $+2 
  481.                 out     20h,al 
  482.                 jcxz    $+2 
  483.                 jcxz    $+2 
  484.                 mov     al,bl           ; ICW2 
  485.                 out     0A1h,al 
  486.                 jcxz    $+2 
  487.                 jcxz    $+2 
  488.                 mov     al,bh 
  489.                 out     21h,al 
  490.                 jcxz    $+2 
  491.                 jcxz    $+2 
  492.                 mov     al,2            ; ICW3 
  493.                 out     0A1h,al 
  494.                 jcxz    $+2 
  495.                 jcxz    $+2 
  496.                 mov     al,4 
  497.                 out     21h,al 
  498.                 jcxz    $+2 
  499.                 jcxz    $+2 
  500.                 mov     al,1            ; ICW4 
  501.                 out     0A1h,al 
  502.                 jcxz    $+2 
  503.                 jcxz    $+2 
  504.                 out     21h,al 
  505.                 jcxz    $+2 
  506.                 jcxz    $+2 
  507.                 mov     al,0FFh         ; OCW1 
  508.                 out     0A1h,al 
  509.                 jcxz    $+2 
  510.                 jcxz    $+2 
  511.                 out     21h,al 
  512.                 ret 
  513.         @@PC_XT: 
  514.                 mov     al,13h          ; ICW1 
  515.                 out     20h,al 
  516.                 jcxz    $+2 
  517.                 jcxz    $+2 
  518.                 mov     al,8            ; ICW2 
  519.                 out     21h,al 
  520.                 jcxz    $+2 
  521.                 jcxz    $+2 
  522.                 mov     al,9            ; ICW4 
  523.                 out     21h,al 
  524.                 jcxz    $+2 
  525.                 jcxz    $+2 
  526.                 mov     al,0FFh         ; OCW1 
  527.                 out     21h,al 
  528.                 ret 
  529.   
  530. Enable8259: 
  531.                 mov     ax, word ptr csld_8259 
  532.                 out     021h,al 
  533.                 jcxz    $+2 
  534.                 jcxz    $+2 
  535.                 mov     al,ah 
  536.                 out     0a1h,al         ; DEC PC Bus Mouse 
  537.                 ret                     ; July 1994 by Mr. Lei 
  538.   
  539. ------------------------------------------------------------------------- 
  540.   
  541. RestoreBiosData: 
  542.                 lodsw 
  543.                 cmp     ax, '--' 
  544.                 jz      @@1 
  545.                 call    Beep 
  546.                 ret 
  547.         @@1:    push    es 
  548.                 push    di 
  549.                 mov     di, 40h 
  550.                 mov     es, di 
  551.   
  552.                 mov     di, 10h 
  553.                 movsw 
  554.                 mov     di, 0a8h         ; [40h:a8h] 
  555.                 movsw 
  556.                 movsw 
  557.                 mov     di, 49h 
  558.                 mov     cx, 1dh 
  559.                 rep     movsb 
  560.   
  561.                 mov     di, 0f0h         ; User data 
  562.                 mov     cx, 8 
  563.                 rep     movsw 
  564.   
  565.                 pop     di 
  566.                 pop     es 
  567.                 ret 
  568.   
  569. ------------------------------------------------------------------------- 
  570.   
  571. RestoreMCB: 
  572.                 push    ds 
  573.                 push    es 
  574.                 lodsw                           ; 'MZ' 
  575.         @@0:    lodsw 
  576.                 cmp     ax, 'MM' 
  577.                 jz      @@1 
  578.                 mov     es,ax 
  579.                 xor     di,di 
  580.                 movsb 
  581.                 movsw 
  582.                 movsw 
  583.                 inc     ax 
  584.                 mov     bx, ds 
  585.                 cmp     ax, bx 
  586.                 jz      @@10 
  587.                 mov     byte ptr es:[8], 0      ; Aug 24, 1993 
  588.         @@10:   cmp     byte ptr es:[0], 'Z' 
  589.                 jnz     @@0 
  590.                 mov     byte ptr es:[10h], 0 
  591.                 jmp     @@0 
  592.         @@1: 
  593.                 pop     es 
  594.                 pop     ds 
  595.                 ret 
  596.   
  597. ------------------------------------------------------------------------- 
  598. CloseFiles: 
  599.                 mov     ax, 5           ; Begin handle 
  600.                 push    ds 
  601.                 push    si 
  602.                 mov     cx, 15          ; Max handle 
  603.                 sub     cx, ax 
  604.                 inc     cx 
  605.                 mov     bx, ax 
  606.         @@1:    push    bx 
  607.                 push    cx 
  608.                 mov     ah, 3eh 
  609.                 int     21h 
  610.                 pop     cx 
  611.                 pop     bx 
  612.                 inc     bx 
  613.                 loop    @@1 
  614.                 pop     si 
  615.                 pop     ds 
  616.                 ret 
  617.   
  618. ------------------------------------------------------------------------- 
  619. RestorePort: 
  620.                 mov     di, 40h            ; restore port 
  621.                 mov     es, di 
  622.                 xor     di, di 
  623.                 mov     cx, 8 
  624.                 rep     movsw 
  625.                 ret 
  626.   
  627. ------------------------------------------------------------------------- 
  628. RestoreLEDs: 
  629.                 lodsb 
  630.                 and     al, 11110000b      ; LED status 
  631.                 mov     ah, es:[17h] 
  632.                 and     ah, 00001111b 
  633.                 or      ah, al 
  634.                 and     ah, 0f0h           ; Clear CTRL ALT SHIFT 
  635.                 mov     es:[17h], ah 
  636.                 ret 
  637.   
  638. ------------------------------------------------------------------------- 
  639. RestoreEnvStr: 
  640.                 lodsw 
  641.                 push    si 
  642.                 push    di 
  643.                 push    ds 
  644.                 push    es 
  645.                 mov     es, csosEnv 
  646.                 mov     ds, ax 
  647.                 xor     si, si 
  648.                 mov     di, si 
  649.         @@0:    lodsb 
  650.                 or      al, al 
  651.                 jnz     @@1 
  652.                 cmp     byte ptr ds:[si], 0 
  653.                 jz      @@2 
  654.         @@1:    stosb 
  655.                 jmp     @@0 
  656.         @@2:    stosb 
  657.                 stosb 
  658.                 pop     es 
  659.                 pop     ds 
  660.                 pop     di 
  661.                 pop     si 
  662.                 ret 
  663.   
  664. ----------------------------------------------------------------------- 
  665. RestoreVecList: 
  666.                 xor     ax,ax 
  667.                 mov     di,ax 
  668.                 mov     es,ax 
  669.                 mov     cx,100h 
  670.         @@0:    lodsw 
  671.                 xchg    dx, ax 
  672.                 lodsw 
  673.                 cmp     dx, 'EL' 
  674.                 jnz     @@1 
  675.                 cmp     al, 'I' 
  676.                 jnz     @@1 
  677.                 sub     cl, ah 
  678.                 push    cx 
  679.                 mov     cl, ah 
  680.                 mov     ax, es:[di-4] 
  681.                 mov     dx, es:[di-2] 
  682.          @@a:   stosw 
  683.                 xchg    ax, dx 
  684.                 stosw 
  685.                 xchg    ax, dx 
  686.                 loop    @@a 
  687.                 pop     cx 
  688.                 or      cx, cx 
  689.                 jz      @@9 
  690.                 jmp     @@0 
  691.         @@1: 
  692.                 xchg    ax, dx 
  693.                 stosw 
  694.                 xchg    ax, dx 
  695.                 stosw 
  696.                 loop    @@0 
  697.         @@9: 
  698.                 ret 
  699.   
  700. ;---------------------------------------------------------------------------- 
  701. RestoreFloppyParam:                                     ; Mr. Lei   2/10/1992 
  702.                 push    es 
  703.                 push    ax 
  704.                 xor     ax, ax 
  705.                 mov     es, ax 
  706.                 mov     byte ptr es:[525h], 2 
  707.                 pop     ax 
  708.                 pop     es 
  709.                 ret 
  710.   
  711. ;--------------------------------------------------------------------------- 
  712. RestoreCVTchain: 
  713.                 lodsw 
  714.                 cmp     ax, 'VC' 
  715.                 jz      @@_0 
  716.                 call    Beep 
  717.                 ret 
  718.         @@_0: 
  719.                 push    ax 
  720.                 push    cx 
  721.                 push    es 
  722.   
  723.         ; ----------------------------------------------------------------- 
  724.                 lodsw                   ; DPB 
  725.                 mov     di, ax 
  726.                 lodsw 
  727.                 mov     es, ax 
  728.         @@1:    lodsb 
  729.                 inc     di 
  730.                 stosb 
  731.                 add     di, cs:cvtOfs 
  732.                 add     di, 10h 
  733.                 movsw 
  734.                 movsw 
  735.                 les     di, es:[di+2] 
  736.                 cmp     di, -1 
  737.                 jnz     @@1 
  738.   
  739.         ; ----------------------------------------------------------------- 
  740.                 lodsw                   ; DCB 
  741.                 mov     di, ax 
  742.                 lodsw 
  743.                 mov     es, ax 
  744.                 xor     ax, ax 
  745.                 dec     ax 
  746.                 stosw 
  747.   
  748.         ; ----------------------------------------------------------------- 
  749.                 lodsw                   ; Device Driver Chain 
  750.                 mov     di, ax 
  751.                 lodsw 
  752.                 mov     es, ax 
  753.                 xor     cx, cx 
  754.         @@9:    push    di 
  755.                 mov     cl, 5 
  756.                 rep     movsw 
  757.                 pop     di 
  758.                 les     di, es:[di] 
  759.                 mov     ax, di 
  760.                 inc     ax 
  761.                 jnz     @@9 
  762.                 pop     es 
  763.                 pop     cx 
  764.                 pop     ax 
  765.                 ret 
  766.   
  767. ---------------------------------------------------------------------------- 
  768. RestoreMemoryManager: 
  769.                 test    cs:Status, XMSbit 
  770.                 jz      @@1 
  771.                 call    LoadXMSstatus 
  772.         @@1: 
  773.                 test    cs:Status, EMSbit 
  774.                 jz      @@2 
  775.                 call    LoadEMSstatus 
  776.         @@2: 
  777.                 ret 
  778.   
  779.   
  780. LoadEMSstatus: 
  781.                 lodsw 
  782.                 cmp     ax, 'ME' 
  783.                 jz      @@_0 
  784.                 call    Beep 
  785.                 ret 
  786.         @@_0: 
  787.                 lodsw 
  788.                 mov     cx, ax 
  789.                 xor     dx, dx 
  790.         @@_1:   push    ds 
  791.                 push    si 
  792.                 push    dx 
  793.                 push    cx 
  794.   
  795.         @@0:    cmp     dx, ds:[si] 
  796.                 jz      @@1 
  797.                 add     si, 4 
  798.                 loop    @@0 
  799.   
  800.                 push    cx 
  801.                 mov     cx, 5 
  802.         @@__0:  mov     ah, 45h         ; Deallocate Handle and Memory 
  803.                 int     67h 
  804.                 or      ah, ah 
  805.                 jz      @@__1 
  806.                 loop    @@__0 
  807.         @@__1:  pop     cx 
  808.   
  809.         @@1: 
  810.                 pop     cx 
  811.                 pop     dx 
  812.                 pop     si 
  813.                 pop     ds 
  814.                 inc     dx 
  815.                 cmp     dx, 100h 
  816.                 jb      @@_1 
  817.                 shl     cx, 1 
  818.                 shl     cx, 1 
  819.                 add     si, cx 
  820.                 ret 
  821.   
  822.   
  823. LoadXMSstatus: 
  824.                 lodsw 
  825.                 cmp     ax, 'MX' 
  826.                 jz      @@_0 
  827.                 call    Beep 
  828.                 ret 
  829.         @@_0: 
  830.                 lodsw 
  831.                 mov     cx, ax 
  832.                 jcxz    @@5 
  833.         @@1: 
  834.                 lodsw 
  835.                 mov     dx, ax 
  836.         @@2:    push    dx 
  837.                 mov     ah, 0ah                 ; free 
  838.                 call    dword ptr cs:xms_control 
  839.                 or      ax, ax 
  840.                 pop     dx 
  841.                 jnz     @@4 
  842.                 cmp     bl, 0abh 
  843.                 jnz     @@4 
  844.                 push    dx 
  845.                 mov     ah, 0dh                 ; unlock 
  846.                 call    dword ptr cs:xms_control 
  847.                 or      ax, ax 
  848.                 pop     dx 
  849.                 jmp     @@2 
  850.         @@4:    loop    @@1 
  851.         @@5:    ret 
  852.                 endp 
  853.   
  854. ----------------------------------------------------------------------- 
  855. CloseSpeaker: 
  856.                 in      al, 61h 
  857.                 and     al, 0fch 
  858.                 out     61h, al 
  859.                 ret 
  860.   
  861. ----------------------------------------------------------------------- 
  862. RestoreClockSpeed: 
  863.                 mov     al, 00110110b 
  864.                 out     43h, al 
  865.                 xor     ax, ax 
  866.                 out     40h, al 
  867.                 out     40h, al 
  868.                 ret 
  869.   
  870. ----------------------------------------------------------------------- 
  871. ResetDisk: 
  872.                 xor     ax, ax 
  873.                 xor     dx, dx 
  874.                 int     13h             ; Restore A 
  875.                 inc     dx 
  876.                 int     13h             ; Restore B 
  877.                 mov     dl, 80h 
  878.                 int     13h             ; Restore C 
  879.                 ret 
  880.   
  881.   
  882.   
  883. -------------------------------------------------------------------------- 
  884. ClosePRN: 
  885.                 mov     ah, 51h         ; Get PSP seg 
  886.                 int     21h 
  887.                 mov     es, bx 
  888.                 mov     ax, es:[16h]    ; Prev PSP seg 
  889.                 cmp     ax, bx 
  890.                 jnz     @@9 
  891.                 mov     ax, 3e00h       ; COMMAND 
  892.                 mov     bx, 4 
  893.                 int     21h 
  894.         @@9: 
  895.                 ret 
  896.   
  897. InitPRN: 
  898.                 mov     ax, 3e00h 
  899.                 mov     bx, 4           ; PRN 
  900.                 int     21h 
  901.                 mov     ax, 3d01h 
  902.                 mov     dx, offset PRNname 
  903.                 push    cs 
  904.                 pop     ds 
  905.                 int     21h 
  906.                 ret 
  907. PRNname         db      'PRN',0 
  908.   
  909. InitMouse:                              ; 2/16/1993 by Mr. Lei 
  910.                 push    es 
  911.                 xor     ax, ax 
  912.                 mov     es, ax 
  913.                 cmp     word ptr es:[33h*4+2], 0 
  914.                 jz      @@0 
  915.                 cmp     word ptr es:[33h*4], 0 
  916.                 jz      @@0 
  917.                 mov     ax, 21h 
  918.                 int     33h             ; Hook Mouse Interrupt 
  919.         @@0:    pop     es 
  920.                 ret 
  921.   
  922. ------------- CMOS CLOCK set to System ----------------------------------- 
  923. UpdateTime: 
  924.                 call    GetRealTime 
  925.                 mov     ah, 2dh 
  926.                 int     21h 
  927.                 ret 
  928.   
  929. GetRealTime: 
  930.                 mov     ah,2 
  931.                 int     1Ah 
  932.                 mov     al,ch 
  933.                 call    bcdxchg 
  934.                 mov     ch,al 
  935.                 mov     al,cl 
  936.                 call    bcdxchg 
  937.                 mov     cl,al 
  938.                 mov     al,dh 
  939.                 call    bcdxchg 
  940.                 mov     dh,al 
  941.                 mov     dl,0 
  942.                 ret 
  943.   
  944. BCDxchg: 
  945.                 push    ax 
  946.                 push    cx 
  947.                 mov     cl,4 
  948.                 shr     al,cl 
  949.                 pop     cx 
  950.                 mov     bl,0Ah 
  951.                 mul     bl 
  952.                 pop     bx 
  953.                 and     bl,0Fh 
  954.                 add     al,bl 
  955.                 ret 
  956.   
  957. ----------------------------------------------------------------------- 
  958. ; Display string 
  959. ColorPrintStr: 
  960.                 lodsb 
  961.                 mov     bh, al          ; color 
  962.                 xor     cx, cx 
  963.                 mov     dx, 014fh 
  964.                 mov     ax, 0600h 
  965.                 int     10h 
  966.   
  967.                 mov     ah, 02          ; GotoXY (0, 0) 
  968.                 xor     dx, dx 
  969.                 mov     bh, 0 
  970.                 int     10h 
  971. PrintStr: 
  972.                 push    cs 
  973.                 pop     ds 
  974.                 xor     bx, bx 
  975.         @@1:    lodsb 
  976.                 cmp     al, '$' 
  977.                 jz      @@2 
  978.                 or      al, al 
  979.                 jz      @@2 
  980.                 mov     ah, 0eh 
  981.                 int     10h 
  982.                 jmp     short @@1 
  983.         @@2:    mov     al, cs:clsStrcolor 
  984.                 mov     cs:clsStr, al 
  985.                 ret 
  986.   
  987. ----------------------------------------------------------------------- 
  988.   Self          dw      0 
  989.   clsStrcolor   db      17h 
  990.   clsStr        db      17h             ; Color (White in Blue) 
  991.     db ' RAMinit  Version 2.12  (c) 1989-1994 by KingSoft Ltd.  Mr. Leijun' 
  992.     db 0dh,0ah 
  993.     db ' [' 
  994.   ShowCopies    db      '*' 
  995.     db '] Activate...',0ah,0dh,'$' 
  996.   
  997. endTSR  equ     $ 
  998. mcbList equ     offset endTSR + 2 + 2 
  999. vecList equ     mcbList + 7*10 + 2 + 10h + 1 + 400h 
  1000. devLink equ     vecList + 4 + 5 * 26 + 4 + 10 * 30h + 4 
  1001. xmsList equ     devLink + 2 + MaxHandles * 2 
  1002. emsList equ     xmsList + 4 + 1024 
  1003. crtMode equ     emsList + 2 + 1Dh + 4 + 10h 
  1004. tsrLen  equ     crtMode + 1 
  1005. ; DOS Environment Reserved by RI 
  1006. -------------------------------------------------- 
  1007. ;   Flag                        'XX'       2 bytes 
  1008. ;   Environment Segment                    1 word 
  1009. ;   Free MCBs                         <=7*10 bytes 
  1010. ;     MCB segment               1 word 
  1011. ;     MCB                       5 bytes 
  1012. ;   End flag                    'MM'       1 word 
  1013. ;   COM LPT ports                        10h bytes 
  1014. ;   LEDs status                            1 bytes 
  1015. ;   Packed vectors list               <=400h bytes 
  1016. ;   Flag                        'CV'       2 bytes 
  1017. ;   CVT First DPB pointer                  4 bytes 
  1018. ;       DPBs data                     <=5*26 bytes 
  1019. ;       First DCB pointer                  4 bytes 
  1020. ;       Pointer to NUL                     4 bytes 
  1021. ;       All device driver datas     <=30h*10 bytes 
  1022. ;   Flag                        'XM'       2 bytes 
  1023. ;   XMS free handle counter                2 bytes 
  1024. ;   EMS free handle list            <=100h*4 bytes 
  1025. ;   Flag                        'EM'       2 bytes 
  1026. ;   EMS free handle counter                2 bytes 
  1027. ;   EMS free handle list              <=1024 bytes 
  1028. ;       EMS handle              1 word 
  1029. ;       Number of pages         1 word 
  1030. ;   Flag                        '--'       1 word 
  1031. ;   Equipment List                         1 word 
  1032. ;   CRT 40:49h-66h                       1dh bytes 
  1033. ;       40:A8h                             1 dword 
  1034. ;   BIOS User Data Area  40:F0--FF       10h bytes 
  1035. ; *************************************************************************** 
  1036. main:           jmp     main0 
  1037.   
  1038. Print           Macro   Str 
  1039.                 Lea     dx, Str 
  1040.                 call    DisplayStr 
  1041.                 endm 
  1042.   
  1043. InstMsg db  'RAMinit  Version 2.12 ' 
  1044.         db  'Copyright (c) 1989-1994  by KingSoft Ltd. ',0dh,0ah,'$' 
  1045. Msg0    db  'Already installed !',0dh,0ah,0ah 
  1046.         db  'For Help, type "RI /?". ',0dh,0ah,'$' 
  1047. Msg_0   db  0ah,'Residents a new RAMinit copy [y/n] ? $' 
  1048. Msg_2   db  'OK, RI No.' 
  1049. Msg_RI  db  '2' 
  1050.         db  ' residents successful !', 0dh,0ah,'$' 
  1051. Msg1    db  'Activate with:  $' 
  1052. KeyMsg  db  'Right_Shift$' 
  1053.         db  'Left_Shift$ ' 
  1054.   KMsg1 db  'Left_Ctrl$  ' 
  1055.         db  'Left_Alt$   ' 
  1056.         db  'Right_Ctrl$ ' 
  1057.         db  'Right_Alt$  ' 
  1058.   KMsg2 db  'Ctrl$       ' 
  1059.         db  'Alt$        ' 
  1060.         db  'Ctrl$       ' 
  1061.         db  'Alt$        ' 
  1062. PlusMsg db  ' + $' 
  1063. crlf    db  0dh,0ah,'$' 
  1064.   
  1065. HelpMsg db  'Programmed by Mr. Leijun    Dec 1992', 0dh,0ah,0ah 
  1066.         db  'Usage:   RI [options]',0dh,0ah,0ah 
  1067.         db  '/H,/?    Display this screen',0dh,0ah 
  1068.         db  '/CLS     Removes all TSR programs after current RI',0dh,0ah 
  1069.         db  '/RET     Removes TSR programs include current RI',0dh,0ah 
  1070.         db  '/NEW     Residents a new data copy of current environment',0dh,0ah 
  1071.         db  '/ALL     Removes all RI copies and all other tsr programs',0dh,0ah 
  1072.         db  '/Sxyy..  Define Hotkey   x=AuxHotkey   yy..=shift status',0dh,0ah 
  1073.         db  '         x=auxiliary hotkey (default is "X" ',0dh,0ah 
  1074.         db  '           x equ "1" means need AuxHotkey',0dh,0ah 
  1075.         db  '         yy..=shift status  [CAScas]',0dh,0ah 
  1076.         db  '           C: Left Ctrl    A: Left Alt    S: Left Shift',0dh,0ah 
  1077.         db  '           c: Right Ctrl   a: Right Alt   s: Right Shift',0dh,0ah,0ah 
  1078.         db  'Example: "RI /S1c"  means Hotkey is Right_Ctrl+X',0dh,0ah 
  1079.         db  '         "RI /S0Cc" means HotKey is Left_Ctrl+Right_Ctrl',0dh,0ah 
  1080.         db  '         "RI /CLS"  equals simply press hotkey',0dh,0ah 
  1081.         db  '         "RI /RET"  Removes all TSRs after current RI and this RI',0dh,0ah 
  1082.         db  0ah 
  1083.         db  'Contact me for RAMinit problems: (01)2561155 Call 1997',0dh,0ah 
  1084.         db  '$' 
  1085. ErrMsg  db  'ERROR: Invalid options !',0dh,0ah,0ah,'$' 
  1086. WinErr  db  7, 'Sorry, I cannot work in Windows DOS environment.',0dh,0ah,'$' 
  1087. SetMsg  db  7, 'Defines new Hotkey successful !',0dh,0ah,0ah,'$' 
  1088. tsrOK   db  False 
  1089.   
  1090. Main0: 
  1091.                 cld 
  1092.                 Print   instMsg 
  1093.                 call    IsWinDos 
  1094.                 or      ax, ax 
  1095.                 jz      @@1 
  1096.                 Print   WinErr 
  1097.                 mov     ax, 4c00h 
  1098.                 int     21h 
  1099.         @@1: 
  1100.                 call    HotKeyValid 
  1101.                 mov     cs:Status, 0 
  1102.                 call    EMS_test 
  1103.                 call    CmpDosVer 
  1104.                 call    CmpSideKick 
  1105.                 call    GetMachineID 
  1106.                 call    ModifyHotKeyPrompt 
  1107.   
  1108.                 mov     ax, 0c0d7h 
  1109.                 int     2fh 
  1110.                 mov     es, ax 
  1111.                 cmp     word ptr es:[101h], 'IE'        ; 'LEI' 
  1112.                 jnz     @@0 
  1113.                 mov     cs:Self, ax 
  1114.         @@0: 
  1115.                 call    CmdLine 
  1116.                 call    PrintHotKeyPrompt 
  1117.   
  1118.                 cmp     cs:tsrOK, true 
  1119.                 jz      @@2 
  1120.                 call    tsrReplyOK 
  1121.         @@2:    cmp     cs:tsrOK, true 
  1122.                 jnz     @@_2 
  1123.                 call    PrintCopies 
  1124.         @@_2: 
  1125.                 mov     word ptr cs:[100h], 'EL' 
  1126.                 mov     byte ptr cs:[102h], 'I' 
  1127.   
  1128.                 push    cs 
  1129.                 pop     es 
  1130.                 push    cs 
  1131.                 pop     ds 
  1132.                 std 
  1133.                 mov     si, offset eof 
  1134.                 mov     cx, eof - offset Here 
  1135.                 mov     di, tsrLen 
  1136.                 add     di, cx 
  1137.                 inc     cx 
  1138.                 rep     movsb 
  1139.                 cld 
  1140.                 mov     bx, tsrLen 
  1141.                 jmp     bx 
  1142.   
  1143. Here: 
  1144.                 mov     ax,cs 
  1145.                 mov     es,ax 
  1146.                 mov     di,offset endTSR 
  1147.                 mov     csataBegin, di 
  1148.                 mov     cs:NextDataSeg, -1 
  1149.                 mov     ax, 'XX' 
  1150.                 stosw 
  1151.                 in      al, 0a1h 
  1152.                 mov     ah, al 
  1153.                 in      al, 21h 
  1154.                 push    ax 
  1155.                 mov     word ptr csld_8259, ax 
  1156.                 xor     ax, ax 
  1157.                 out     21h,al                  ; CLI 
  1158.                 call    SaveOthers 
  1159.                 call    SetSelfInt 
  1160.                 call    BackupVecList 
  1161.                 cmp     cs:Power, true 
  1162.                 jnz     @@20 
  1163.                 call    BackupCVTchain 
  1164.                 call    BackupMemoryManager 
  1165.         @@20: 
  1166.                 call    BackupBiosData 
  1167.   
  1168.                 sti 
  1169.                 mov     cs:Flag, ' '    ; no busy 
  1170.                 mov     cs:StopFlag, 0  ; 
  1171.   
  1172.                 mov     cs:tsrLength, di 
  1173.                 call    SetDosEnvSeg 
  1174.                 cmp     cs:Self, 0 
  1175.                 jz      @@29 
  1176.                 push    cs 
  1177.                 pop     ds 
  1178.                 push    cs 
  1179.                 pop     es 
  1180.                 cld 
  1181.                 mov     cx, cs:tsrLength 
  1182.                 mov     si, csataBegin 
  1183.                 sub     cx, si 
  1184.                 mov     di, 120h 
  1185.                 mov     csataBegin, di 
  1186.                 rep     movsb 
  1187.                 mov     cs:tsrLength, di 
  1188.         @@29: 
  1189.                 pop     ax 
  1190.                 out     21h, al                         ; STI 
  1191.                 mov     al, ah 
  1192.                 out     0a1h, al 
  1193.                 mov     dx, cs:tsrLength 
  1194.                 inc     dx 
  1195.                 int     27h 
  1196.   
  1197. ---------------------------------------------------------------------------- 

电脑是雷军人生中的最爱,电脑 的世界对于雷军而言实在太美妙。雷军觉得,电脑的世界没有人那么复杂。只要你程序写得好,就可以和电脑处好关系,也可以指挥电脑,做一些你想做的事情。雷 军认为,电脑的世界很大,程序员都是活在自己的王国里。在这里,程序员可以主宰一切。正是因为热爱,所以雷军一干就是10年。

1205893555.jpg

对于雷军来说,虽然现在他更加 专注在产品开发以及管理方面,但是曾经他对心爱的代码视为珍宝。之前来了一位技术支持人员,而这位技术人员进公司的第一份工作,就是帮雷军整理他的硬盘。 一位理解错误,原本只要覆盖式的安装系统就可以的事情,这位程序员却把雷军的硬盘格式化了。这些代码是雷军多年来积累下来,而且也是他的最爱,就这样成为 炮灰,相信雷军非常难过。

编程是技术,也是一种艺术

雷军认为,编程的工作同石匠的工作相类似,即是技术活,也是体力活,而编写优秀的软件,算是一件比较难得事。编程是一门技术活,因此才有可能大规模的进行,进而才会有软件工程。此外,因为编程是一种艺术,因此有很多好的产品。

1950271164.jpg
雷军关爱下属 亲自指导女程序员

因为自己是程序员出身,雷军在技术方面的水平不用质疑。雷军对于下面的程序员,也是很关照的。早前,雷军亲自指导美女程序员的一张图片爆红。从曝光的图片来看,这名由雷总亲自指导的女程序员,竟是位前端开发工程师。雷总下基层,还亲自指导码农,小米不强大都说不过去。

当然,上面的只是雷军生活中的一个小插曲。曾经,雷军认为自己会干一辈子的编程。但是现在,雷军作为小米董事长,身价已经不能用数字来衡量了。他接触程序的机会,相信是少之又少,因为下面有很多程序员帮他干活。

【编辑推荐】

  1. 雷军辞职 “网游”金山如何选择
  2. 挖空大公司:创新工场和雷军系成创业聚集地_开发技术周刊第007期_51CTO.com
  3. 雷军:40岁重新开始没什么大不了
  4. 科技巨头比尔盖茨、乔布斯、雷军、李彦宏等年轻时候的论文,代码,专利
  5. 雷军:创业不好玩 没有钢铁般的意志 绝对干不了
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

JSP应用开发详解(第三版)

本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JS...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊