雷军:有人说我写的代码像诗一样优雅~

全世界只有3.14 % 的人关注了

爆炸吧知识

整合整理:程序员的那些事(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 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)
; ..........................................................................
;
COMMENTV2.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 areadosseg
.model tiny
.code
locals @@
org 100hStart: jmp Main
org 103hTrue equ 1
False equ 0
MaxHandles equ 100hINT3 macro
out 0ffh,al
endm
;
; 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 00101000b
RightAlt equ 10001000b
LeftCtrl equ 00010100b
RightCtrl equ 01000100b
LeftShift equ 00000010b
RightShift equ 00000001b
HotKey db LeftCtrl or RightCtrlDataBegin dw 0
NextDataSeg dw 0ffffh
oldInt2F_addr dw 0, 0
XMS_control dw 0, 0
Handle_begin dw 0
cvtOfs dw 0 ; DOS 3.0 equ 0 and above DOS 4.0 is 1
org 104h
db 0dh
db Revision
db ??date
db 26
org 114h
tsrLength dw 0
MachineID db 0FCh ; IBM PC/ATAuxHotKey db 0 ; 2Dh ;  X  Scan Code
AuxHotKeyName db  X$
Power db True
Flag db  !
Kbd102 db 0
NoFlag db 0
StopFlag db 1
DosEnv dw 0
WorkSeg dw 0
PrevDataSeg dw 0
Copies db  1
old_8259 db 0 ; 21h port
db 0 ; a1h portStatus dw 0
XMSbit equ 00000001b
EMSbit equ 00000010b
SKbit equ 10000000bGoINT1C: 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_addrCallInt9:
retnewINT9_2:
mov cs:NoFlag, 1
pushf
db 9ah ; call far ptr oldint9_addr
oldInt9_Addr2 dw 0, 0
jmp newINT9_procnewINT9:
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,axcmp 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 axKeepSelf:
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 27hNoKeepSelf:
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 ; Set stack
mov sp, cs
mov ss, sp
mov sp, 100h
sti
push axcmp 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 vectors list
call RestoreFloppyParam
cmp cs:Power, True
jnz @@2
call RestoreCVTchain ; Restore cvt chain
call RestoreMemoryManager
@@2:
call RestoreBiosData
call Enable8259
mov ah, 1 int 16hcall RestoreClockSpeed
call CloseSpeaker
call ResetDisk
call UpdateTimecall ClosePRN
mov bx,cs:WorkSeg
mov ah,50h
int 21h ; Set PSP segment
mov ax,3 int 10h ; Set display modecall 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
retBeep:
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
retInit8259:
; 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
retEnable8259:
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, dimov di, 10h
movsw
mov di, 0a8h ; [40h:a8h]
movsw
movsw
mov di, 49h
mov cx, 1dh
rep movsbmov di, 0f0h ; User data
mov cx, 8
rep movswpop 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:
retLoadEMSstatus:
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 @@0push 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
retLoadXMSstatus:
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:
retInitPRN:
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 ,0InitMouse: ; 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
retGetRealTime:
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
retBCDxchg:
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; -----------------------------------------------------------------------
; Display string
ColorPrintStr:
lodsb
mov bh, al ; color
xor cx, cx
mov dx, 014fh
mov ax, 0600h
int 10hmov 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 dw 0
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 + MaxHandles  2
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 <=710 bytes
; MCB segment 1 word
; MCB 5 bytes
; End flag  MM  1 word
; COM LPT ports 10h bytes
; LEDs status 1 bytes
; Packed vectors list <=400h bytes
; Flag  CV  2 bytes
; CVT First DPB pointer 4 bytes
; DPBs data <=526 bytes
; First DCB pointer 4 bytes
; Pointer to NUL 4 bytes
; All device driver datas <=30h10 bytes
; Flag  XM  2 bytes
; XMS free handle counter 2 bytes
; EMS free handle list <=100h4 bytes
; Flag  EM  2 bytes
; EMS free handle counter 2 bytes
; EMS free handle list <=1024 bytes
; EMS handle 1 word
; Number of pages 1 word
; Flag  --  1 word
; Equipment List 1 word
; CRT 40:49h-66h 1dh bytes
; 40:A8h 1 dword
; BIOS User Data Area 40:F0--FF 10h bytes
; **
;
main: jmp main0Print Macro Str
Lea dx, Str
call DisplayStr
endmInstMsg db  RAMinit Version 2.12
db  Copyright (c) 1989-1994 by KingSoft Ltd.  ,0dh,0ah, $
Msg0 db  Already installed ! ,0dh,0ah,0ah
db  For Help, type "RI /?".  ,0dh,0ah, $
Msg_0 db 0ah, Residents a new RAMinit copy [y/n] ? $
Msg_2 db  OK, RI No.
Msg_RI db  2
db   residents successful ! , 0dh,0ah, $
Msg1 db  Activate with: $
KeyMsg db  Right_Shift$
db  Left_Shift$
KMsg1 db  Left_Ctrl$
db  Left_Alt$
db  Right_Ctrl$
db  Right_Alt$
KMsg2 db  Ctrl$
db  Alt$
db  Ctrl$
db  Alt$
PlusMsg db   + $
crlf db 0dh,0ah, $HelpMsg db  Programmed by Mr. Leijun Dec 1992 , 0dh,0ah,0ah
db  Usage: RI [options] ,0dh,0ah,0ah
db  /H,/? Display this screen ,0dh,0ah
db  /CLS Removes all TSR programs after current RI ,0dh,0ah
db  /RET Removes TSR programs include current RI ,0dh,0ah
db  /NEW Residents a new data copy of current environment ,0dh,0ah
db  /ALL Removes all RI copies and all other tsr programs ,0dh,0ah
db  /Sxyy.. Define Hotkey x=AuxHotkey yy..=shift status ,0dh,0ah
db   x=auxiliary hotkey (default is "X")  ,0dh,0ah
db   x equ "1" means need AuxHotkey ,0dh,0ah
db   yy..=shift status [CAScas] ,0dh,0ah
db   C: Left Ctrl A: Left Alt S: Left Shift ,0dh,0ah
db   c: Right Ctrl a: Right Alt s: Right Shift ,0dh,0ah,0ah
db  Example: "RI /S1c" means Hotkey is Right_Ctrl+X ,0dh,0ah
db   "RI /S0Cc" means HotKey is Left_Ctrl+Right_Ctrl ,0dh,0ah
db   "RI /CLS" equals simply press hotkey ,0dh,0ah
db   "RI /RET" Removes all TSRs after current RI and this RI ,0dh,0ah
db 0ah
db  Contact me for RAMinit problems: (01)2561155 Call 1997 ,0dh,0ah
db  $
ErrMsg db  ERROR: Invalid options ! ,0dh,0ah,0ah, $
WinErr db 7,  Sorry, I cannot work in Windows DOS environment. ,0dh,0ah, $
SetMsg db 7,  Defines new Hotkey successful ! ,0dh,0ah,0ah, $
tsrOK db FalseMain0:
cld
Print instMsg
call IsWinDos
or ax, ax
jz @@1
Print WinErr
mov ax, 4c00h
int 21h
@@1:
call HotKeyValid
mov cs:Status, 0
call EMS_test
call CmpDosVer
call CmpSideKick
call GetMachineID
call ModifyHotKeyPromptmov ax, 0c0d7h
int 2fh
mov es, ax
cmp word ptr es:[101h],  IE  ;  LEI
jnz @@0
mov cs:Self, ax
@@0:
call CmdLine
call PrintHotKeyPromptcmp cs:tsrOK, true
jz @@2
call tsrReplyOK
@@2: cmp cs:tsrOK, true
jnz @@_2
call PrintCopies
@@_2:
mov word ptr cs:[100h],  EL
mov byte ptr cs:[102h],  Ipush cs
pop es
push cs
pop ds
std
mov si, offset eof
mov cx, eof - offset Here
mov di, tsrLen
add di, cx
inc cx
rep movsb
cld
mov bx, tsrLen
jmp bxHere:
mov ax,cs
mov es,ax
mov di,offset endTSR
mov cs:DataBegin, di
mov cs:NextDataSeg, -1
mov ax,  XX
stosw
in al, 0a1h
mov ah, al
in al, 21h
push ax
mov word ptr cs:old_8259, ax
xor ax, ax
out 21h,al ; CLI
call SaveOthers
call SetSelfInt
call BackupVecList
cmp cs:Power, true
jnz @@20
call BackupCVTchain
call BackupMemoryManager
@@20:
call BackupBiosDatasti
mov cs:Flag,     ; no busy
mov cs:StopFlag, 0 ;mov cs:tsrLength, di
call SetDosEnvSeg
cmp cs:Self, 0
jz @@29
push cs
pop ds
push cs
pop es
cld
mov cx, cs:tsrLength
mov si, cs:DataBegin
sub cx, si
mov di, 120h
mov cs:DataBegin, di
rep movsb
mov cs:tsrLength, di
@@29:
pop ax
out 21h, al ; STI
mov al, ah
out 0a1h, al
mov dx, cs:tsrLength
inc dx
int 27h; ----------------------------------------------------------------------------
SetDosEnvSeg:
push ds
push es
mov ax, cs
@@10: mov es, ax
mov ax, es:[16h] ; Get father process psp segment
or ax, ax
jz @@11
mov bx, es
cmp ax, bx
jnz @@10
@@11:
mov es, word ptr es:[2ch] ; Get father process env segment
mov cs:DosEnv, es
pop es
pop ds
ret; ----------------------------------------------------------------------------SaveOthers:
mov ax, cs:[2ch] ; Env Seg
stosw
call backupMCB ; Current MCB
mov ax, 40h ; COM LPT Port
mov ds, ax
mov si, 0h
mov cx, 8
rep movswmov si, 17h ; LED status
lodsb
stosb
; call OpenLEDs
ret; --------------------------------------------------------------------------
backupMCB:
mov ax,  ZM
stosw
push ds
push es
mov ah, 52h
int 21h ; Get MCB chain head
mov ax, es:[bx-2]
pop es
@@0: mov ds, ax
cmp byte ptr ds:[0],  Z  ; End ?
jz @@20 cmp byte ptr ds:[0],  M  ; Memory control block
jnz @@30 cmp word ptr ds:[3], 0 ; Nul mcb
jz @@10 cmp word ptr ds:[1], 0 ; Free MCB
jnz @@10
call SaveFreeMCB
@@10: inc ax
add ax, ds:[3]
jmp @@0
@@20:
call SaveFreeMCB
cmp ax, 0a000h
inc ax
jnb @@30
mov ax, 9fffh ; MS-DOS UMB
jmp @@0@@30:
cmp ax, 0c000h ; 386MAX
ja @@90
mov ax, 0c020h
jmp @@0@@90: ; Error ?
pop ds
mov ax,  MM  ; Set MCB flag
stosw
retSaveFreeMCB:
stosw
xor si,si
movsb
movsw
movsw
ret
;
; push ax
; stosw
; xor si,si
; movsb
; movsw
; movsw
; pop ax
; cmp ax, 09fffh
; jnb @@3
; push ax
; push ds
; mov ds,ax
; cmp byte ptr ds:[0],  M
; pop ds
; pop ax
; jnz @@4
; mov ax, 09fffh ; MS-DOS UMB
; jmp @@0
; @@4: cmp ax, 0c000h
; ja @@3
; mov ax, 0c020h ; 386MAX
; jmp @@0
;
; --------------------------------------------------------------------------OpenLEDs: push ax ; Open all LEDs
or al, 070h
mov ds:[17h], al
mov ah, 1 int 16h
mov cx, 4 ; Delay
@@20: push cx
xor cx, cx
@@21: loop @@21
pop cx
loop @@20
pop ax
mov ds:[17h], al
mov ah, 1 int 16h
ret; --------------------------------------------------------------------------
SetSelfInt:
push es
push dicmp cs:self, 0
jnz @@1
push cs
pop ds
mov ax,3509h
int 21h
mov word ptr cs:oldInt9_addr,bx
mov word ptr cs:oldInt9_addr[2],es
mov dx,offset NewInt9
mov ax,2509h
int 21hmov ax,352Fh
int 21h
mov word ptr cs:oldInt2F_addr,bx
mov word ptr cs:oldInt2F_addr[2],es
mov dx,offset newInt2F
mov ax,252Fh
int 21hmov ax,351Ch
int 21h
mov word ptr cs:oldInt1C_addr,bx
mov word ptr cs:oldInt1C_addr[2],es
mov dx,offset newInt1C
mov ax,251ch
int 21h
cli
jmp @@2
@@1:
mov es, cs:Self
inc es:Copies
@@_0: cmp es:NextDataSeg, -1
jz @@_1
mov es, es:NextDataSeg
jmp @@_0
@@_1: mov es:NextDataSeg, cs
@@2:
pop di
pop es
ret; -----------------------------------------------------------------------
SaveCounter:
mov word ptr es:[di],  EL
mov byte ptr es:[di+2],  I
mov byte ptr es:[di+3], bl
xor bx, bx
add di, 4
ret; -----------------------------------------------------------------------
DisplayStr: push cs
pop ds
mov ah, 9 int 21h
ret; -----------------------------------------------------------------------
CmdLine:
push cs
pop ds
xor ax, ax
mov si, 80h
lodsb
or al, al
jnz @@1
ret
@@1:
mov cx, ax
dec ax
push ax
push si
@@0: lodsb
cmp al,
jz @@0 cmp al,  /
jnz @@2
lodsb
cmp al,  S
jz @@_2
cmp al,  s
jnz @@2
@@_2:
call SetHotKey
Print SetMsg
mov ax, 4c00h
int 21h
@@2:
pop si
pop ax
push ax
push si
@@_3: lodsb
cmp al,  A
jb @@3 cmp al,  Z
ja @@3
add byte ptr ds:[si-1],20h ; DownCase
@@3: loop @@_3
pop si
pop cxadd si, cx
lodsb
cmp al,  s  ; CLS
jnz @@5 cmp word ptr ds:[si-3],  lc
jnz @@5 cmp cs:Self, 0
jz @Err
mov ax, 0c0d7h+1 int 2fh@@5: cmp al,  h  ; HELP
jz @help
cmp al,  ?
jz @help
cmp al,  t  ; RET
jnz @@6 cmp word ptr ds:[si-3],  er
jnz @@6
@@7:
cmp cs:Self, 0
jz @Err
mov ax, 0c0d7h+2 int 2fh
@@6: cmp al,  w  ; NEW
jnz @@8 cmp word ptr ds:[si-3],  en
jnz @@8
mov cs:tsrOK, true
ret
@@8:
cmp al,  l  ; ALL
jnz @@9 cmp word ptr ds:[si-3],  la
jnz @@9
mov ax, 0c0d7h+3 int 2fh
@@9:
cmp al,
jnz @Err
ret@Err:
Print ErrMsg
@help:
Print HelpMsg
mov ax, 4c00h
int 21h;---------------------------------------------------------------------------
tsrReplyOK:
cmp cs:Self, 0
jz @@1
Print Msg0push es
mov ax, cs:Self
@@_10: mov es, ax
mov ax, es:NextDataSeg
cmp ax, -1
jnz @@_10
mov ax, es@@_0: push ax
dec ax
mov es, ax
mov bx, es:[3]
pop axadd ax, bx
inc ax
mov es, ax
cmp word ptr es:[0],  OC
jz @@_0mov bx, cs
cmp ax, bx
pop es
jz @@2
Print Msg_0
mov ah, 1 int 21hpush ax
Print crlf
pop axcmp al,  y
jz @@3 cmp al,  Y
jz @@3
@@2: ; Print Msg_1
mov ax, 4c01h
int 21h
@@3:
@@1: mov cs:tsrOK, true
retPrintCopies:
cmp cs:Self, 0
jz @@1
push es ; Added -by- Mr. Lei
mov es, cs:Self ; Aug 24, 1993
mov al, es:Copies
inc al ; Total RI copies
push ax ; Set es = current mcb
mov ax, cs
dec ax
mov es, ax
pop ax
mov cx, 5 ; Search end of file name
mov bx, 8
@@10: inc bx
cmp byte ptr es:[bx], 20h
jz @@20 cmp byte ptr es:[bx], 0ffh
jz @@20 cmp byte ptr es:[bx], 00h
jz @@20
loop @@10
@@20: ; Set current RI no
mov byte ptr es:[bx],  :  ; "RI:2"
mov byte ptr es:[bx+1], al
cmp bx, 8+7
jnb @@30
mov byte ptr es:[bx+2], 0
@@30:
pop esmov cs:Msg_RI, al
Print Msg_2
@@1: ret;---------------------------------------------------------------------------
; Backup Interrupt Vector List
;
BackupVecList:
push ds
push cs
pop es
xor si,si ; Vectors
mov ds,si
movsw
movsw
xor bx, bx
mov cx,00ffh
@@0: lodsw
xchg dx, ax
lodsw
cmp ax, es:[di-2]
jnz @@1 cmp dx, es:[di-4]
jz @@2
@@1: or bx, bx
jz @@3
call SaveCounter
@@3: xchg dx, ax
stosw
xchg dx, ax
stosw
loop @@0
jmp @@4
@@2: inc bx
loop @@0
call SaveCounter
@@4:
pop ds
ret
;
;-----------------------------------------------------------------------------
BackupCVTchain:
mov ax,  VC
stosw
push ax
push bx
push cx
push ds
push es
mov ah, 52h
int 21h ; ES:BX -- DOS table as described below; --------------------------------------------------------------------
push es ; DPB chains
push bx
lds si, es:[bx]
push cs
pop es
mov ax, si
stosw
mov ax, ds
stosw
mov bx, cs:cvtOfs
xor cx, cx
@@1: mov al, ds:[si+1]
stosb
mov ax, ds:[si+bx+12h]
stosw
mov ax, ds:[si+bx+14h]
stosw
inc cx
lds si, ds:[si+bx+18h]
cmp si, -1
jnz @@1
; mov ax, 5
; mul cl
; add ax, 4
; add cs:tsrLength, ax
pop bx
pop es; --------------------------------------------------------------------
push es ; DCB file control blocks
push bx
les bx, es:[bx+4]
@@11: cmp word ptr es:[bx], -1
jz @@10
les bx, es:[bx]
jmp @@11
@@10:
mov ax, es
xchg ax, bx
push cs
pop es
stosw
xchg ax, bx
stosw
pop bx
pop es
; add cs:tsrLength, 4; ---------------------------------------------------------------------
push es ; Device Driver Chains
pop ds
add bx, 22h
mov si, bx ; NULpop es
mov ax, si
stosw
mov ax, ds
stosw
xor cx, cx
xor bx, bx
@@9: push si
mov cl, 5
rep movsw
inc bx
pop si
lds si, ds:[si]
mov ax, si
inc ax
jnz @@9pop ds
pop cx
pop bx
pop ax
ret; ----------------------------------------------------------------------------BackupBiosData:
mov ax,  --
stosw
push ds
push si
mov si, 40h
mov ds, si
mov si, 10h
movsw
mov si, 0a8h
movsw
movsw
mov si, 49h
mov cx, 1dh
rep movsbmov si, 0f0h
mov cx, 8
rep movsw
pop si
pop ds
ret; ---------------------------------------------------------------------------BackupMemoryManager:
push cs
pop es
push ds
push es
call SaveXMSstatus
call SaveEMSstatus
pop es
pop ds
ret;---------------------------------------------------------------------SaveEMSstatus:
test cs:status, EMSbit
jnz @@1
ret
@@1:
mov ax,  ME
stosw
inc di
inc di
push di
mov ah, 4dh
int 67h
pop di
mov es:[di-2], bx
shl bx, 1
shl bx, 1
add di, bx
ret
; -------------------------------------------------------------------SaveXMSstatus:
call XMS_test
test cs:status, XMSbit
jnz @@1
ret
@@1:
mov ax,  MX
stoswmov dx, 1
call XMS_alloc
jnz @@_1
xor cx, cx ; XMS alloc failure
stosw
ret
@@_1:
push dx
sub dx, MaxHandles  10
@@2:
push dx
call XMS_Lock
pop dx
jnz @@3 cmp bl, 0a2h
jnz @@4
add dx, 10
jmp @@2
@@3: push dx
call XMS_unlock
pop dx
@@4:
mov cs:handle_begin, dx
pop dx
push dx
call XMS_bstat
xor cx, cx
mov cl, bl
inc cx
pop dx
call XMS_Free
mov dx, cs:Handle_beginpush cx
push cs
pop es
mov ax, cx
stosw
@@5: push dx
call XMS_Lock
pop dx
jnz @@6 cmp bl, 0a2h ; Handle invalid
jz @@7
@@6: call XMS_unlock
add dx, 10
jmp @@5
@@7: mov ax, dx
stosw
add dx, 10
loop @@5
pop cx
ret
; ------------------------------------------------------------------XMS_test:
push es
mov ax, 4300h
int 2fh
cmp al, 80h
jnz @@9
mov ax, 4310h
int 2fh
mov cs:XMS_control, bx
mov cs:XMS_control[2], es
or cs:Status, XMSbit
@@9:
pop es
retXMS_stat:
mov ah, 0
call dword ptr cs:xms_control
mov hma_exist, dl
ret
hma_exist db 0XMS_alloc:
mov ah, 9
call dword ptr cs:xms_control
or ax, ax
retXMS_lock:
mov ah, 0ch
call dword ptr cs:xms_control
or ax, ax
retXMS_unlock:
mov ah, 0dh
call dword ptr cs:xms_control
or ax, ax
ret
XMS_bstat:
mov ah, 0eh
call dword ptr cs:xms_control
or ax, ax
retXMS_free:
mov ah, 0ah
call dword ptr cs:xms_control
or ax, ax
ret; ----------------------------------------------------------------------------
EMS_test:
push cs
pop ds
mov dx, offset EMMname
mov ax, 3d00h
int 21h
jc @@2
mov bx, ax
mov ah, 3eh
int 21h
or cs:Status, EMSbit
@@2:
ret
EMMname db  EMMXXXX0 ,0; -----------------------------------------------------------------------------SetHotKey:
xor bx, bx
lodsb
push ax@@1: lodsb
cmp al, 0dh
jz @@9 cmp al,  C
jnz @@2
or bl, LeftCtrl
jmp @@1
@@2:
cmp al,  c
jnz @@3
or bl, RightCtrl
jmp @@1
@@3:
cmp al,  A
jnz @@4
or bl, LeftAlt
jmp @@1
@@4:
cmp al,  a
jnz @@5
or bl, RightAlt
jmp @@1
@@5:
cmp al,  S
jnz @@6
or bl, LeftShift
jmp @@1
@@6:
cmp al,  s
jnz @@7
or bl, RightShift
jmp @@1
@@7: pop ax
jmp @Err
@@9:
mov cs:HotKey, bl
pop ax
mov cs:AuxHotKey, 2dh ;  X  scan key
cmp al,  1
jz @@29
mov cs:AuxHotKey, 0
@@29:
cmp cs:Self, 0
jz @@30
push es
mov es, cs:Self
mov es:HotKey, bl
mov bl, cs:AuxHotKey
mov es:AuxHotKey, bl
pop es
@@30:
call GetRunFileName
mov ax, 3d02h
int 21h
jc @@10
push cs
pop ds
mov bx, ax
mov cx, 4
mov dx, 100h
mov ah, 40h
int 21h
jc @@10
mov ax, 4200h
xor cx, cx
mov dx, 17h
int 21h
jc @@10
mov cx, 1
mov dx, offset AuxHotKey
mov ah, 40h
int 21h
jc @@10
mov ah, 3eh
int 21h
@@10:
ret; -----------------------------------------------------------------------
GetRunFileName:
; Return:
; DS:DX Pointer of this run file name ASCIIZ string
push ax
push bx
push cx
push si
push di
push espush cs
pop es
mov ax, es:[2ch]
mov es, ax
xor di, di
mov cx, 1000h
xor al, al
@@1: repnz scasb
cmp es:[di], al
loopnz @@1
mov dx, di
add dx, 3
push es
pop dspop es
pop di
pop si
pop cx
pop bx
pop ax
ret; ---------------------------------------------------------------------------
GetMachineID:
push es
mov KBD102,True
mov ax,40h
mov es,ax
test byte ptr es:[96h], 00010000b
jnz @@1
mov Kbd102,False
@@1:
xor ax,ax
dec ax
mov es,ax
mov al,es:[0eh]
mov cs:MachineID, al
pop es
ret; ---------------------------------------------------------------------------
ModifyHotKeyPrompt:
cmp cs:Kbd102, True
jz @@9
push cs
pop es
push cs
pop ds
mov cx, 124
mov si, offset KMsg2
mov di, offset KMsg1
rep movsb
@@9: cmp cs:MachineID, 0fch
jna @@10
mov cs:clsStrcolor, 70h ; Mono
mov cs:clsStr, 70h
@@10:
ret; ---------------------------------------------------------------------------
PrintHotKeyPrompt:
Print Msg1
mov al, cs:HotKey
mov ah, al
shr al, 1
shr al, 1
and ax, 33ch
or al, ah
mov dx, offset KeyMsg
@@40:
or ax, ax ; Mr. Lei 4/25/1993
jz @@_42
shr al, 1
push ax
jnc @@41push ax
call ColorDisplayStr
; mov ah, 9
; int 21h
pop axor al, al
jz @@42push dx
mov dx, offset PlusMsg
call ColorDisplayStr
; Print PlusMsg
pop dx@@41: add dx, 12
pop ax
jmp @@40
@@42: pop ax
@@_42: cmp cs:AuxHotKey, 0
jz @@43 cmp cs:HotKey, 0 ; Mr. Lei
jz @@_43
mov dx, offset PlusMsg
call ColorDisplayStr
; Print PlusMsg
@@_43: mov dx, offset AuxHotKeyName
call ColorDisplayStr
; Print AuxHotKeyName
@@43:
Print crlf
retColorDisplayStr:
push bx
push cx
push dx
push si
mov bl, 0fh
mov si, dx
xor bh, bh
mov cx, 1
@@1: lodsb
cmp al,  $
jz @@2
or al, al
jz @@2
push cx
mov ah, 09h
int 10h
mov ah, 3 int 10h
inc dl
mov ah, 2 int 10h
pop cx
jmp short @@1
@@2:
pop si
pop dx
pop cx
pop bx
ret; ---------------------------------------------------------------------------
CmpSideKick:
xor ax, ax
mov es, ax
les bx, es:[20h]
cmp word ptr es:[bx-4], 4b53h
jnz @@1 cmp word ptr es:[bx-2], 4942h
jz @@2
@@1: mov es, ax
les bx, es:[94h]
cmp word ptr es:[bx-2], 4b53h
jz @@2
ret
@@2: or cs:Status, SKbit
ret; ---------------------------------------------------------------------------
CmpDosVer: mov ah, 30h
int 21h
cmp al, 3
jb @@1 cmp al, 3
jna @@2
mov cs:cvtOfs, 1
ret
@@2: mov cs:cvtOfs, 0
ret
@@1: Print DosVerErr
mov ax, 4cffh
int 21hDosVerErr db  Sorry, DOS version too lower ! ,0dh,0ah, $HotKeyValid:
cmp cs:HotKey, 0
jnz @@_1
cmp cs:AuxHotKey, 0
jnz @@_1
Print HotKeyErr
mov ax, 4cfeh
int 21h
@@_1: retHotKeyErr db  Sorry, please setup hotkey again.  ,0dh,0ah, $eof:
ends
end Start; ------------- The End ! ---------------------------------------------------

各位朋友们,你们还记得自己写的第一行代码是什么吗?

转自:程序员的那些事儿,转载仅供学习交流,如有侵权请联系删除。

????????????

  超超超级宠粉福利   

锦鲤好运书单,100本免费送!

百本好书,六大类目,总有一本适合你

后台回复“领书”查看书单,立即自选领书

万水千山总是情,点个 “在看” 行不行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql分析日志_MYSQL 索引(三)--- SQL日志分析

慢查询日志Mysql 的慢查询日志是 Myql 提供的一种日志记录&#xff0c;用来记录在 Myql 中响应时间查过阈值的语句&#xff0c;具体指运行时间超过 long_query_time 值的 SQL&#xff0c;则会被记录在日志中。long_query_time 默认为 10&#xff0c;单位为秒。默认情况下&#…

C#多线程开发-任务并行库

你好&#xff0c;我是阿辉。正文共2090字&#xff0c;预计阅读时间&#xff1a;6min。之前学习了线程池&#xff0c;知道了它有很多好处。使用线程池可以使我们在减少并行度花销时节省操作系统资源。可认为线程池是一个抽象层&#xff0c;其向程序员隐藏了使用线程的细节&#…

为什么数学不好,和语文有关系?

▲ 点击查看苏步青教授在担任复旦大学校长时曾经说过:“如果允许复旦大学单独招生考试&#xff0c;我的意见是第一堂课就考语文&#xff0c;考后就批卷子。不合格的&#xff0c;以下的功课就不要考了。语文你都不行&#xff0c;别的是学不通的。”苏步青作为享誉世界的数学家&a…

python string length_如何使用python获取字符串长度?哪些方法?

掌握多种python技巧&#xff0c;对于我们更好的灵活应用python是非常重要的&#xff0c;比如接下来给大家介绍的获取字节长度&#xff0c;那大家脑海里就该有印象了&#xff0c;有几种方法呢&#xff1f;一起来看下吧~1、使用len()函数这是最直接的方法。 在这里&#xff0c;我…

python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法

大家知道&#xff0c;PyCharm是一款著名的Python IDE开发工具&#xff0c;是拥有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;具备基本的调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。该IDE分为社区免费版(…

python中线程和进程_python中线程和进程的简单了解

一、操作系统、应用程序1.硬件&#xff1a;硬盘、cpu、主板、显卡........2.装系统(本身也是一个软件)&#xff1a;系统就是一个由程序员写出来的软件&#xff0c;该软件用于控制计算机得硬盘&#xff0c;让他们之间进行互相配合。3.安装软件&#xff1a;各种应用程序二、并发和…

一份干货满满的PPT,答辩加分手到擒来!

全世界只有3.14 % 的人关注了爆炸吧知识对很多童鞋来说&#xff0c;PPT可以说是使用频率很高的办公软件了。毕业答辩需要PPT&#xff0c;项目总结需要PPT&#xff0c;演讲也都需要PPT……可你是否因为PPT陷入这样的——脑壳疼状态&#xff01;花费大量时间&#xff0c;结果PPT效…

Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

前面文章已经演示过&#xff0c;将我们的示例微服务程序DaprTest1部署到k8s上并运行。当时用的k8s是Docker for desktop 自带的k8s&#xff0c;只要在Docker for desktop中启用就可以了。但是我发现&#xff0c;启用了k8s后&#xff0c;Docker for desktop会消耗大量的系统资源…

记一次 .NET 某新能源汽车锂电池检测程序 UI挂死分析

一&#xff1a;背景 1. 讲故事这世间事说来也奇怪&#xff0c;近两个月有三位朋友找到我&#xff0c;让我帮忙分析下他的程序hangon现象&#xff0c;这三个dump分别涉及&#xff1a;医疗&#xff0c;新能源&#xff0c;POS系统。截图如下&#xff1a;那这篇为什么要拿其中的 新…

这个女生躲在衣柜等男友回家,结果竟是......

1 不要什么都怪爸爸我妈明明也是这样帮我脱的▼2 这就是现实版大女主反杀女二的故事啊▼3 我猜到了开头却没有猜到结尾▼4 &#xff1f;&#xff1f;&#xff1f;一定是我被饿出了幻觉▼5 小小的孩子在极短的时间内经历了人生的大戏和大悲▼6 这个令人羡慕的发量啊&#…

mysql savepoint作用_savepoint原理

保存点在MySQL中, 保存点SAVEPOINT属于事务控制处理部分。利用SAVEPOINT可以回滚指定部分事务&#xff0c;从而使事务处理更加灵活和精细。SAVEPOINT相关的SQL语句如下SAVEPOINT identifier设置SAVEPOINT。如果重复设置同名savepoint,新的会覆盖老的.RELEASE SAVEPOINT identif…

路由器笔记 CCNA

配置路由器应用性<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1配置端口1&#xff09; 配置局域网端口&#xff1a;进入&#xff08;config-if&#xff09;#模式 配置ip地址和掩码 &#xff08;config-if&#xff09;#ip a…

图片裁剪和异步上传插件--一步到位(记录)

图片上传裁剪这功能随处可见&#xff0c;有的自己写&#xff0c;不过太耗费时间了&#xff0c;插件的话感觉好多&#xff0c;前段时间就想挑一款好的插件&#xff0c;以后就用那款&#xff0c;可是挑了几款插件用上去&#xff0c;效果很好&#xff0c;问题就出在合并了&#xf…

git checkout 单个文件_git 如何回退单个文件

1.进入到文件所在文件目录&#xff0c;或者能找到文件的路径查看文件的修改记录git log fileName结果&#xff1a;如果文件修改记录太多&#xff0c;则使用git log -number fileName结果&#xff1a;2.回退到指定版本git reset ** fileName1.git reset -mixed&#xff1a;此为默…

未来十年最吃香专业大盘点,有你的吗?

全世界只有3.14 % 的人关注了爆炸吧知识这个世界上理工科到底有多吃香&#xff1f;如果你是理工男/女&#xff0c;先恭喜一下你&#xff0c;不知道喜从何来&#xff1f;不妨先来看这几组数据&#xff1a;高薪职业平均薪资一览表薪资最高的专业前20名这并不只是中国的情况&#…

mysql挂载到iscsi_corosync+pacemaker+iscsi磁盘实现mysql高可用

实验用主机&#xff1a;提供iscsi磁盘:172.16.103.1,提供iscsi磁盘高可用主机:172.16.103.2&#xff0c;172.16.103.3实验拓扑&#xff1a;实验步骤&#xff1a;一、配置172.16.103.1&#xff0c;输出iscsi磁盘&#xff0c;创建的磁盘分区为/dev/sda3&#xff0c;在实际的使用环…

一种在未来互联网中的面向用户的云操作系统体系

本文描述了一个欲将整个网络当做计算机使用&#xff0c;可以极大增强云计算应用能力和提高用户体验的一个类操作系统体系结构。望有识之士能做下去。 价值1&#xff09;用户的痛苦在哪里&#xff1f;对于终端用户&#xff0c;他们的痛苦在于使用Web应用不方便&#xff0c;可以使…

提高「搜商」,挣大钱

大家好&#xff0c;我是Z哥。在之前的一篇讲述数据分析的文章《这个时代最重要的技能之一》中提到了这周要和大家聊聊「搜商」的事情。搜商这个词诞生于互联网时代&#xff0c;体现的是一个人利用搜索引擎查找自己所需信息的能力。我觉得在当下这个时代&#xff0c;搜商的重要性…

idea 配置jdk版本_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置

电脑上已经安装过 JDK 8 版本(C:Javajdk1.8.0_111)。安装好 JDK 11 版本(C:Program FilesJavajdk-11.0.2)之后&#xff0c;目录如下&#xff0c;分别有&#xff1a;安装过程&#xff1a;1. 开始安装 JDK 11&#xff1b;2. 完成安装JDK 11&#xff1b;配置过程&#xff1a;1. 将…

老师,你和我的文具撞衫了!

全世界只有3.14 % 的人关注了爆炸吧知识来看越南学生拍摄的一组图&#xff0c;主题是老师和文具“撞衫”&#xff01;老师你和我的胶水撞了&#xff01;老师你和我的笔袋撞了&#xff01;老师你和我的手机壳撞了&#xff01;这个铅笔和老师好像啊书皮和老师很像老师今天穿得像面…