国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

雷軍 1994 年寫的代碼,像詩一樣優(yōu)雅!

共 14528字,需瀏覽 30分鐘

 ·

2020-12-07 00:17

點擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)?”

讓一部分開發(fā)者看到未來

作者:程序員的那些事

程序員曬貼:94年雷軍寫的代碼水平如何?網(wǎng)友直呼:跪著讀完!


雷軍曾自夸自己寫的代碼像詩一樣優(yōu)雅,網(wǎng)友感覺這雷軍寫的94年代碼如何?2019年世界500強企業(yè)排行榜,僅成立9年的小米全球排名第468位,這讓小米的創(chuàng)始人雷軍興奮的像個孩子一樣。雷軍一高興就給小米的每一位員工包了1000股公司的股票,總價值超過了一億。


最近有人在網(wǎng)上曬出了雷軍94年的時候?qū)懗龅拇a,引來了很多網(wǎng)友的圍觀,小編雖然不是學(xué)編程出身,但是從下面網(wǎng)友的評論中還是能感覺到雷軍的實力,有網(wǎng)友甚至直呼跪著讀完,還有網(wǎng)友表示,當(dāng)時大學(xué)的時候武漢大學(xué)用的就是雷軍編的教程。

雷軍的代碼像詩一樣優(yōu)雅

↓↓↓


有些網(wǎng)友在評論中質(zhì)疑,說雷軍代碼不會是「屎」一樣優(yōu)雅吧。說這話的網(wǎng)友,也許是開玩笑的,也許是真沒看過雷軍寫過的代碼。


在 2011 年的時候,我們在微博轉(zhuǎn)過雷軍在 1994 年寫的一段完整的匯編代碼。雷軍這段匯編代碼,有程序員評價「如今能寫出這么高質(zhì)量的代碼的程序員恐怕也不多」。


后來雷軍在轉(zhuǎn)發(fā)我們微博時還補充說:「這個程序第一個版本是我 1989 年寫的,懷念當(dāng)初寫程序的快樂時光?!?/span>



之前微博帖子中引用的鏈接已掛,今天重新在網(wǎng)上找到了完整版,如下:


(在移動端窄屏看大篇幅代碼,可能體驗不如 PC 端。大家可以試試點擊右上角的「……」,然后「復(fù)制鏈接」,方便的時候,在 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)
; ..........................................................................
;
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 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 RightCtrl

DataBegin 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/AT

AuxHotKey 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 port

Status dw 0
XMSbit equ 00000001b
EMSbit equ 00000010b
SKbit equ 10000000b

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 ; Set stack
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 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 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

; -----------------------------------------------------------------------
; Display string
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 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 main0

Print Macro Str
Lea dx, Str
call DisplayStr
endm

InstMsg 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 False

Main0:
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 ModifyHotKeyPrompt

mov ax, 0c0d7h
int 2fh
mov es, ax
cmp word ptr es:[101h], 'IE' ; 'LEI'
jnz @@0
mov cs:Self, ax
@@0:
call CmdLine
call PrintHotKeyPrompt

cmp 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], 'I'

push 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 bx

Here:
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 BackupBiosData

sti
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 movsw

mov 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
ret

SaveFreeMCB:
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 di

cmp 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 21h

mov 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 21h

mov 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 cx

add 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 Msg0

push 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 ax

add ax, bx
inc ax
mov es, ax
cmp word ptr es:[0], 'OC'
jz @@_0

mov bx, cs
cmp ax, bx
pop es
jz @@2
Print Msg_0
mov ah, 1 int 21h

push ax
Print crlf
pop ax

cmp al, 'y'
jz @@3 cmp al, 'Y'
jz @@3
@@2: ; Print Msg_1
mov ax, 4c01h
int 21h
@@3:
@@1: mov cs:tsrOK, true
ret

PrintCopies:
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 es

mov 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 ; NUL

pop 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 @@9

pop 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 movsb

mov 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'
stosw

mov 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_begin

push 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
ret

XMS_stat:
mov ah, 0
call dword ptr cs:xms_control
mov hma_exist, dl
ret
hma_exist db 0

XMS_alloc:
mov ah, 9
call dword ptr cs:xms_control
or ax, ax
ret

XMS_lock:
mov ah, 0ch
call dword ptr cs:xms_control
or ax, ax
ret

XMS_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
ret

XMS_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 es

push 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 ds

pop 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 @@41

push ax
call ColorDisplayStr
; mov ah, 9
; int 21h
pop ax

or al, al
jz @@42

push 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
ret

ColorDisplayStr:
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 21h

DosVerErr 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: ret

HotKeyErr db 'Sorry, please setup hotkey again. ',0dh,0ah,'$'

eof:
ends
end Start

; ------------- The End !
---------------------------------------------------


朋友們,你們還記得自己寫的第一行代碼是什么嗎?


—?完?—


前線推出學(xué)習(xí)交流群一定要備注:研究/工作方向+地點+學(xué)校/公司+昵稱(如java+上海+上交+可可),根據(jù)格式備注,可更快被通過且邀請進(jìn)群

掃碼加我微信進(jìn)群,內(nèi)推和技術(shù)交流,大佬們零距離




END


好文點個在看吧!
瀏覽 67
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 中文最新天堂8√| 日韩理论片| 国产午夜成人| 伊人综合大香蕉| 亚洲无吗视频| 一区二区三区四区不卡| 亚洲一区二区成人网站戴套| 久久噜噜噜精品国产亚洲综合| 国产亲子乱XXXXimim/| а√天堂中文官网8| 婷婷丁香五月激情一区综合网 | 中文字幕日本在线| 日韩无码免费电影| 嫩草国产在线| 3d动漫一区二区| 色交视频| 欧美激情五月天| 2022黄片| 亚洲砖区区免费| 日本在线视频不卡| 久久久久久无码日韩欧美电影| 午夜福利院| 啪啪毛片| 一起草在线视频| 91精品久久久久久久久久久久| 美女少妇激情BBBB| 亚洲综合免费观看高清完整版在线 | 日韩黄色网| 日韩中文字幕不卡| 熟睡侵犯の奶水授乳在线| 亚洲色操| 五月天无码免费视频| 夏目あきら被续侵犯7天| 亚洲男人天堂网| 超碰91在线观看| 国产一级操逼视频| AA丁香综合激情| 久久久久黄片| 影音先锋91| 精品国产一二三| 精品无码一区二区| 国产乱伦免费| 人妻FrXXeeXXee护士| 久久精品99久久久久久| 天天日天天操天天摸天天干天日射天天插 | WWW.豆花视频精品| 久草视频在线播放| 国产综合久久| 99热精品在线播放| 日韩| 91网在线| 久久牛牛| 91亚洲免费视频| 中文字幕性爱电影| 人妻体体内射精一区二区| 精品无码一| 成人在线免费观看视频| 天天干,夜夜操| 日本操逼电影| 日韩小电影免费观看高清完整版在线观| 亚洲AV无码精品久久一区二区 | www.91av| 国产高清在线观看| 久热无码| 精品天堂| 日本成人黄色视频| 最近中文字幕mv第三季歌词| 亚洲美女视频在线观看| 乱子伦国产精品视频一级毛| gogogo日本免费观看高清电视剧的注意 | 中文字幕东京热加勒比| 久热久热| www.超碰| 免费a在线| 国产91无码精品秘入口新欢| 午夜无码AV| 99在线精品视频免费观看20 | 人人干人人摸人人操| 国产成人无码区免费AV片在线| 日本高清不卡视频| 蜜臀AV在线播放| 男女av免费| 亚洲精品国产精品国自产| 夜夜撸天天操| 日韩精品极品视频在线观看免费| 黄色视频网站观看| 亚洲加勒比久久88色综合| 嫩草A片www在线观看| 亚洲精品乱码久久久久久蜜桃欧美 | 毛片操逼| 一本一本久久a久久精品牛牛影视| 亚洲男女免费视频| 五月丁香婷婷基地| 国产久久久久久久久久| 特级西西人体444www高清| 亚洲国产欧美在线| 91高清无码视频| 水蜜桃一区二区三区| 激情五月天av| 波多一区| 日本黄色片在线播放| 凸凹翔田千里无码| 国产一级A片免费播放| 国产在线色视频| 亚洲精品乱码在线| 黄色网址在线观看视频| 国精产品九九国精产品| 日韩三级视频在线观看| 影音先锋亚洲无码| 久久精品无码一区二区无码性色| 久久艹精品视频| 中日韩中文字幕一区二区区别| 国产青娱乐在线视频| 色婷婷91| 丁香五月婷婷综合网| 亚州AV在线| 人妻无码在线观看| 久久久久久久久久久亚洲| 波多野结衣被操| 内射日韩| 伊人影院在线免费观看| 中文字幕精品三区无码| 欧美成人精品激情在线观看| 女生自慰网站免费| 国产在线播放91| 国外成人性视频免费| 韩国人妻无码| 不卡无线在一区| 亚洲操B视频| 欧美成人超碰| 亚洲AV秘无码苍井空| 台湾成人综合网| 欧美v日韩| 国产永久免费| 国产日韩精品无码去免费专区国产 | 毛片无遮挡| 色婷婷色婷婷| 桃花岛tⅴ+亚洲品质| 精产国品一区二区三区| 日本成人黄色电影| 精品一区二区三区在线观看| 日本天堂在线| 自拍偷拍一区| 国产精品AV在线| 国产伦子伦一级A片免费看小说| 91嫖妓站街按摩店老熟女| 91人妻人人澡人人精品| 日韩综合| 国产欧美视频在线| 色噜噜在线观看| 青草国产| 91色婷婷综合久久中文字幕二区| 一级女婬片A片AAAA片| 欧美色图第一页| 蜜臀久久99精品久久久巴士| 日韩精品在线免费视频| 亚洲视频中文| 精品人妻二区中文字幕| www亚洲无码A片贴吧| 亚洲高清无码视频在线观看| 无码a区天堂| 九九热无码| 艹B视频| www.91在线视频| 国产一道本| 欧美日韩一区视频| 先锋影音一区二区| 北条麻妃99| 亚洲AV无码成人精品区国产| 无码一区二区三区四区五区| 激情小视频国产在线播放| 69AV视频网站| 日韩欧美成人网| 蜜臀AV午夜精品| 西西特级WWW444无码| 无码人妻精品一区二区三区蜜桃91| 亚洲视频中文字幕在线观看| 日韩一区无码| 无码成人AV在线看免费| 一级毛AA片| 日韩一级黄色视频| 色玖玖| 午夜老司机福利| 特级西西444www| 日本黄色免费在线观看| 亚洲精品一二三| 中国黄色大片| 内射视频在线观看| 五丁香在线观看AV| 免费无码一区二区三区四区五区| 中文免费高清在线| 五月天一区二区三区| 人人插人人爽| 99热香蕉| 97色色网| 在线观看免费欧美操逼视频| 99免费视频在线| 久久久久久伊人| 欧美黄片一区| 成人乱无码AV在线观看| 狠狠躁日日躁夜夜躁A片无码视频 强伦轩一区二区三区四区播放方式 | 安徽妇搡BBBB搡BBBB| 免费的AV| 北条麻妃无码在线| 18XXX亚洲HD护士JD| 看操逼视频| 国产一级a毛一级a毛片视频黑人 | 日韩女人性爱| 俺来也俺去| 成人自拍电影| 亚洲视频网站在线观看| 麻豆mdapp03.tⅴ| 激情五月婷婷| 特级西西444WWW高清大视频 | 国产精品乱子伦一区二区三区视频| 天天天天天天操| 91免费观看视频| 成人女人18女人毛片| 日韩在线免费看| 91丨九色丨国产在线| 黄色影院在线观看| 国产操屄视频| 中文字幕线观看| 蝌蚪窝在线视频免费观看| 欧美拍拍| 国产理论电影| 色呦呦一欧美| 一区二区三区在线看| 黑人vs亚洲人在线播放| xxxxx无码| 欧美色视频一区二区三区在线观看| 日本不卡视频在线| 波多野结衣无码高清| 特级大毛片| 天天操欧美| 天天做天天爽| 亚洲精品一区二区三区| 大香蕉伊人成人网| 国产色悠悠| 欧美网站在线观看| 免费在线观看黄色视频网站| 成人黄色毛片视频| 1000部毛片A片免费视频| 日韩AⅤ| 嫩BBB搡BBB搡BBB搡| 曰本精品综合网在线| 国产又爽又黄网站免费观看| 国产尤物视频| 久久精品福利视频| 豆花无码视频一区二区| 久久8| 91成人电影在线| 成人三级视频| 婷婷色吧| av无码不卡| 亚洲尤物在线| 正在播放国产精品| 成人精品一区二区三区视频| 屁屁影院CCYYCOM发布地| 国产秘精品一区二区三区免费| 山东wBBBB搡wBBBB| 夜夜夜久久久| 日韩AV高清无码| 国产黄| 乱伦无码高清麻豆视频一区二区| 三级无码高清| 日韩高清在线播放| 国产精品揄拍一区二区| 午夜人妻无码| 国产成人精品一区二| 免费A片国产毛无码A片| 天天天天天天天天干| 亚洲狼人综合网| 日韩欧美高清第一期| 韩日无码| 欧产日产国产swag| 久久精品亚洲无码| 日本精品一区二区| 日韩黄色片在线观看| 嫩BBB槡BBBB槡BBBB视频-百度| 色婷婷无码| a片在线免费| 亚洲v在线观看| 久久艹免费视频| 欧美性精品| 六月天av| 国产亚洲三级| 精品国产国产没封| 91精品国产乱码久久久| 9l视频自拍蝌蚪9l成人| 国产高清视频在线观看| 国产熟妇搡BBBB搡BBBB搡| AV资源网站| 精品国产乱子伦一区二区三区最新章 | 性感欧美美女| 亚洲一| 91欧美视频| 一级国产黄色视频| 99操逼网| 欧美成人色图| 九月丁香| 亚洲黄色免费| 超碰人人在线| 少妇搡BBBB搡BBB搡小说 | 亚洲福利电影| 久久av一区二区三区观看| 日韩一区二区在线视频| 日韩成人无码全裸视频| 亚洲一| 波多野结衣亚洲无码| 免费黄色毛片| 伊人精品大香蕉| 一道本无码在线观看| 久久婷婷视频| 欧美日韩成人网站| 欧美激情亚洲| 日韩中文字幕成人| 一二三区免费视频| 亚洲乱妇| 26uuu国产| 亚洲精品大片| 日韩色妇| 91资源超碰| 中文字幕三级片在线观看| 欧美在线视频网| 日本爱爱网站| 性爱福利导航| 五月婷久久| 午夜探花视频| 国产区欧美去区在线| a片免费在线观看| 亚洲男女啪啪视频| 91插逼| 加勒比久久88| 91调教视频| 日本最新免费二区| 国产高潮白浆喷| 亚洲成人黄色| 亲子伦一区二区三区观看方式| 五月精品| 乱伦91| 蜜桃人妻| 大香蕉黄色网| 一级a片在线免费观看| 麻豆一区二区三区四区| 亚洲成人视频在线观看| 操B电影| 老熟女视频| 亚洲无码一级视频| 在线永久看片免费的视频| 亚洲欧美激情小说另类| 欧美成人性爱网站| 久久久久久亚洲精品| 国产经典午夜福利视频合集| 丰臀肥逼高清视频电影播放| 无码A级片| 中文字幕av在线播放| 日韩精品小电影| 91站街农村熟女露脸| 国产系列精品AV| 17c精品麻豆一区二区免费| 国产乱伦视屏| 香蕉视频在线看| 超碰997| 男人AV在线| 国产免费成人在线观看| 亚洲日韩成人电影| 在线观看免费视频无码| 激情国产视频| 性猛交╳XXX乱大交| 人妻av中文字幕| 黄色av免费| 日本精品三级| 黄色影片在线观看| 久久久偷拍视频| 三级精品| 日韩一区二区视频在线观看| 99热免费| 国产男人天堂| 成人黄色一级片| 日韩综合| 精品秘一区性综合三区| 久久免费视频精品| 午夜视频18| 97干干| 十八禁网站在线观看| 91露脸熟女四川熟女在线观看| 久久国产精品影院| 九九黄片| 91成人在线影院| 无码人妻精品一区二区三| 51嘿嘿嘿国产精品伦理| 91绿帽人妻-ThePorn| 动漫人物插画动漫人物的视频软件| 国产一二三| 99精品999| 最新中文字幕在线| 免费一级无码婬片A片AAA毛片| 麻豆精品秘国产| 亚洲小电影| 久久黄色视频免费观看| 被男友内S~高H文| 成人伊人综合| 久草中文在线视频| 亚洲高清AV| 欧美午夜影院| 丁香激情网| 国产21区| 激情亚洲| 国产a片免费看| 日本欧洲三级| 成人激情在线观看| 操老骚逼视频| 亚洲第一福利视频| 国产毛片久久久久久久| 日本特级黄色毛片| 亚洲欧洲av| 天天干在线观看视频| 国产AⅤ爽aV久久久久成人| 一区二区三区四区成人| 婷婷五月中文字幕| 国产一级a一片成人AV| gogogo视频在线观看黑人| 青草国产视频| 老女人操屄| 色播五月婷婷| 337P粉嫩大胆噜噜噜55569| 91探花足浴店按摩店| 综合婷婷久久| 日本成人免费电影| 国产黄色视频免费在线观看| 97爱爱| 精品美女视频在线观看免费软件| 麻豆视频在线看| 蜜桃精品在线观看| 少妇BBB| 亚洲AⅤ| 精品成人视频| 无码婬片A片AAA毛片艳谭| 高清av无码| 欧美人成人无码| 国产激倩都市一区二区三区欧美 | 国产性爱网址| 就爱av| 成人毛片网站| 亚洲AV无一区二区三区久久| 国产在线观看一区| 日韩无码中文字幕| 国产精品国产三级国产专区53| 99re6热在线精品视频功能 | 日韩操逼逼| 高清无码高潮| 不卡在线视频| 97国产精品人人爽人人做| 日本色情网| 国产av中文字幕| 无码av免费| 色狠狠网| 91啪啪视频| 亚洲人成人无码.www粉色| 淫乱人妻| 天天日天天干美女| 无码视频在线免费观看| 俺也去五月婷婷| 成人精品亚洲人成在线| 黄色片网站| 欧美一级在线免费观看| 国产夫妻av| 97超碰大香蕉| 中文区中文字幕免费看| 大香蕉尹人在线视频| 在线视频91| 欧美内射网站| 欧美日韩在线观看一区二区三区| 日日碰狠狠| 久草久久| 国产乱叫456在线| 在线观看亚洲| 国产黄色免费乱伦片| 999热视频| 久久久久久无码日韩欧美电影| 成人黄网免费观看视频| 午夜福利视频3000| 涩久久久| 亚洲无码福利| 天天爽天天爽成人A片影院| 五香丁香天堂网| 欧美成人网站在线观看| 18禁黄色免费网站| 日韩1区2区| 激情AV在线观看| 亚洲视频国产| 99久热在线精品视频| 青青操人人操| 欧美黄色A片| 亚州av| 亚洲黄色视频在线观看网站| 亚洲无码AV麻豆| 五十路av| 久久婷婷六月| 大陆搡BBBBB搡BBBBBB| 一区二区三区久久久| 九色PORNY9l原创自拍| 五月天久久精品| 亚洲国产欧美日韩在线| 亚洲美女视频在线| 伊人毛片| 特极西西444WWW大胆无码| 久久嫩草国产成人一区| 五月丁香激情在线| 自拍毛片| 最新中文字幕| 日韩人妻无码一区二区三区99| 大香蕉欧美视频| 精产国品一区二区三区| 激情日韩| 人妻av一区二区三区| 熟女导航| 亚洲欧美国产精品专区久久| 老熟女一区二区三区| 亚洲区一| 久草欧美| 国产无遮挡又黄又爽又色视频软件| 俺去俺来也www色视频| 99色综合| 免费看国产黄色视频| 91香蕉视频免费在线观看| 伊人久久五月| 国产91嫩草乱婬A片2蜜臀| 黑人Av在线| 色欲影视插综合一区二区三区| 久久久国产精品视频| 豆花视频logo进入官网| 新妺妺窝窝777777野外| 日产电影一区二区三区| 18禁一区二区| 欧美粗大| 999精品| 久久99精品久久久久| 性做久久久久久| 日韩中文字幕无码| 天天干天天做| 91视频一区二区三区| 欧美一级片在线| 国产性爱精品| 中文有码视频| 黄色电影网站在线观看| 色色色色五月| 中文字幕内射| 亚洲成人不卡| 91热爆TS人妖系列| 北条麻妃99精品青青久久| 天天射中文| 日日夜夜超碰| 亚州一级二级| 免费观看成人片| 综合玖玖| 亚洲精品乱码久久久久久蜜桃欧美| 翔田千里无码在线观看| 日本黄色视频电影| 2025最新国产精品每日更新| 一区二区三区免费| 国产精品的电影| 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 中文字幕无码人妻在线视频| 国产成人AV在线观看| 香蕉视频成人在线| 操操av| 97亚洲综合| 色婷婷国产精品| 蜜臀AV在线播放| 永久免费黄色视频| 俺去也在线视频| 日韩中文字幕免费在线观看| 99久久99久久久精品棕色圆| 九九福利| 欧美黄色录像| 久久aa| 波多野结衣无码电影| 97国产精品视频| www.五月婷婷| 亚洲成人无码电影| 蜜臀色欲AV无码人妻| 日韩在线免费| www.日韩| 狠狠躁夜夜躁人人爽人妻| 久久精品水多多www| 日韩一区二区AV| 国产精品亚洲一区| 国产男女无套免费| 翔田千里无码免费播放| 国产亚洲精品成人a| 日韩欧美黄| 久久九热| 国产无码免费在线观看| 韩国无码一区二区三区| 免费在线观看毛片| 天天爽日日澡AAAA片| 亚洲黄色片| 中文字幕在线观看一区二区三区| 国产女同在线观看| 午夜福利日本| 翔田千里无码AV在线观看| 777中文字幕| 三个黑人猛躁我一晚上| 国产视频二区| 天天干天天撸| 久操| 国产乱婬片视频| 一级特黄大片录像i| 操亚洲| 成人精品一区二区区别解析| 国产情侣在线视频| av电影在线观看| 免费亚洲视频| 老太奶性BBwBBw侧所| 欧美AAAAA| 一级片黄片| 国产传媒_色哟哟| 亚洲AV成人精品日韩在线播放| 精品久久久久久久久久| 麻豆传媒在线观看| 岛国av片| 亚洲AV图片| 欧美性高潮| 中文字幕乱码亚州无线码日韩理论电| 性BBwBBwBBwBBw禽| 亚洲性爱AV网站| 家庭乱伦影视| 在线色网站| 天天肏夜夜肏| 欧美一级在线| 黄色成人毛片| 成人H在线| 亚洲免费一级| A级网站| 青青草资源站| 中文字幕婷婷五月天| 日本免费无码| 国产精品无码白浆高潮| 日韩99| 亚洲精品18在线观看| 中字无码制服| 国产在线一区二区三区| 亚洲成人在线视频| 青娱乐国产精品一区二区| 九九九AV| 久热官网| 肏少妇女情人大骚逼直播一区二区| 日韩一区二区视频在线观看 | 猛男大粗猛爽h男人味| 亚洲国产精品午夜福利| 91乱子伦国产乱子伦!| 激情av在线观看| 中文字幕av网| 国产欧美综合在线| 成人自拍偷拍视频| 一级a在线| 爱操影院| 最近最好的2019中文| 欧美一区二区丁香五月天激情| 国产又爽又黄视频在线看| 亚洲日韩欧美视频| 国产午夜视频| 高清无码视频直接看| 北条麻妃在线不卡| 日本中文在线| 国产又粗又猛又黄又爽无遮挡| 四虎成人无码| 久久久久久av| 在线成年人视频| 911国产精品| 日本日韩欧美| 精品操逼视频| 强伦轩人妻一区二区三区四区 | 91精品大屁股白浆自慰久久久| 北条麻妃无码在线| 免费看黄色毛片| 国产视频二区| 五月天婷婷在线无码| 西西WWW888大胆无码| 日日骚av一区二区三区| 国产18| 东京热av一区二区| 亚洲字幕无码| 日本高清一区二区高清免费视频| 亚洲婷婷在线视频| 在线无码视频播放| 色一本| 中文字幕在线观看日本| 久久久黄色| 玩弄大荫蒂视频| 免费大黄网站| 大香焦草久| 亚洲AV无码精品久久一区二区| 嫩BBB槡BBBB槡BBB| 欧美日韩性色无码免费| 91九色视频| 国产女人免费| 谁有毛片网站| 91av视频在线观看| 北条麻妃91人妻互换| 91精品久久香蕉国产线看观看| 日本AⅤ中文字幕| 四虎永久在线精品| 国产精品视频在线看| 老司机视频在线视频18| 亚洲AV无码乱码| 免费观看一级毛一片| 成人黄片网站| 天堂视频在线观看亚洲美女| 日日夜夜av| 成人a电影| 中文国产字幕| 国产传媒av| 国产棈品久久久久久久久久九秃| 久久精品国产亚洲AV麻豆痴男| 亚洲天堂精品在线| 思思久久高颜值| 免费在线观看视频黄| 久久高清免费视频| 在线亚洲一区| 18禁在线播放| 在线亚洲一区| www日韩| 黄片免费高清| 8050午夜| 无码一区二区久久| 成人性生活A级毛片网站| 大地影视中文第三页最新在线观看| 波多野结衣AV在线| 中文字幕在线观看二区| 乱码少妇| 日本黄色电影在线| 日韩激情网| 免费视频99| 91在线亚洲| 北条麻妃JUX-869无码播放| 中文字幕在线观看第一页| 91人妻人人澡人人爽人人爽| 毛片毛片毛片毛片| 中文字幕人妻丝袜二区电影| 婷婷五月天AV| 91干干| 黄色大片在线免费观看| AV天堂资源| 成人一级片| 青青草社区| 亚洲区无码| 操日韩| 亚洲AV无码乱码A片无码沈樵| 中文字幕无码在线播放| 精品国内自产拍在线观看视频| 欧美福利视频| 午夜九九九| 日韩色妇| 中文字幕第八页| 特黄色视频| 亚州精品国产精品乱码不99勇敢| 天天狠狠干| 高清在线无码视频| 中文一级片| 中文字幕av免费观看| 亚洲性爱片| 不卡视频在线观看| 操逼视频在线免费看| 五月婷婷中文字幕| 日本毛片在线观看| 东北女人毛多又黑A片| 国产成人精品免费视频| 一级日逼视频| 安徽妇搡BBBB搡BBBB,另类老妇 | 亚洲日韩精品中文字幕| 国产97在线观看| 在线观看成人三级片| 特级西西WWW888| AAA成人| 尤物视频网站在线观看| 日韩中文字幕无码| jizz日韩| 91毛片观看| 人妻视频在线| 亚洲性爱视频| 亚洲欧洲自拍| 免费看a| 黄色免费在线观看| 国产无遮挡又黄又爽又色视频软件| 韩国AV在线| 手机av免费| 三级片无码在线| 欧美高清在线综合| 日韩无码黄片| 最新免费一区二区三区| 黄片91| 日韩一级a片| 性爱视频免费| 在线观看中文字幕一区| 999高清无码| 色色无码| 中文字幕操逼| 亚洲国产精品成人综合色在线婷婷 | 999reav| 91夫妻视频| 九一国产| 操B图| 神马午夜av| 天天日天天干天天日| 中文在线a∨在线| 99精品视频在线免费观看| 国产P片内射天涯海角| 欧美日韩国产一区二区| 91三级电影| 超碰97人妻| 久久99草| 一本一道久久a久久精品蜜桃| 91免费成人| 91人妻人人澡人人爽人人爽| 欧美老女人逼| 最新精品视频| 永久免费一区二区三区| 日韩视频精品| 一级黄色免费片| 色婷婷俺来也| 字幕一区二区久久人妻网站| yw·163.爆乳尤物com| 黄色小视频在线免费看| 成人在线一区二区三区| 亚洲黄片在线| 欧美色色色网| 成人自拍偷拍视频| 999久久久| 一本色综合亚洲精品| 人人人人人人操| 91人妻人人澡人人爽人人精品一| 东京热久久综合色五月老师| 最近中文字幕免费| 国产视频二区| 日韩视频――中文字幕| 国产乱论视频| 黑人无码AV| 人妻av一区二区三区| 日韩中文字幕| 天天天天天天干| 丁香成人五月天| 亚洲欧美激情小说| 成人黄色性爱视频| 免费视频99| 亚洲精品美女视频| 91久久精品国产91久久公交车| 午夜乱伦| 欧美性爱小说| 久久99精品久久久久久| JiZZjiZZ亚洲成熟熟妇| AV一区二区在线观看| 一级黄色视频免费观看| 2019天天操| 精品无码不卡| 黄色美女毛片| 婷婷欧美色图| 一区二区操逼| 国产中文字幕在线观看| 日韩一级黄色视频| 最近中文字幕免费| 亚洲va国产天堂va久久en| 91成人一区| 四川少妇BBBB| 成人免费激情视频| 人妻斩り43歳| 欧美熟妇一区二区三区| 中国丰满妇BBwBBwHD| 无码人妻一区二区三一区免费n狂飙| 日本大香蕉在线视频| 99性爱视频| 中文字幕视频一区| 91黄色片| 日本三级视频| 黄色精品| 亚洲成人免费| 精品欧美一区二区三区| 人人艹人人摸| 人妻免费视频| 特级特黄AAAAAAAA片| 精品人妻一区| 操逼无码视频| 最新超碰| www.黄色在线观看| 伊人久久大| 美女做爱视频| 69AV在线观看| 五月丁香六月婷| 婷婷色色五月天| 97无码精品人妻| 免费国产视频| 四虎网站| 99视频在线| 操逼逼一区二区三区| 日本成人不卡视频| 久久精品视频久久| 一级片黄色免费| 夜夜操操|