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

雷軍:有人說我寫的代碼像詩一樣優(yōu)雅~

共 14163字,需瀏覽 29分鐘

 ·

2020-04-23 23:22

eea35c64d8899413849e9fa048b14fc9.webp

整合整理:程序員的那些事(id:iProgrammer)

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

↓↓↓

46c6f3b768db68fb9b7bd7601454442b.webp


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


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

15f871d0a2d2e5c37cbf2c49d98cb933.webp


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


34ffac318de1929b13d51234198c33fa.webp


之前微博帖子中引用的鏈接已掛,今天重新在網(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 !
---------------------------------------------------


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

瀏覽 58
點贊
評論
收藏
分享

手機掃一掃分享

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

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 爱搞视频| 国产成人亚洲综合A∨婷婷| 在线无码不卡| A在线| 国产女人18毛片水18精| 国产精品tv| 天天肏天天干| 人人操人人干人人摸| 九九无码视频| 国产精品久久久久野外| 国产精品久久久久永久免费看| 中文字幕在线免费视频| 精品无码一区二区三区四区| 4虎亚洲人成人网www| 午夜精品久久久久久久久久久久| 亚洲AV色香蕉一区二区三区| 久久精品三级视频| 国产小视频在线看| 俺去俺来也在线www色情网| 12—13女人毛片毛片| 免费国产A片| 艹逼国产| 一道本一区二区| 操逼综合| 91在线无码精品国产三年| 久久精品国产AV一区二区三区 | 91一起草高清资源| 无码免费毛片一区二区三区古代| 肏屄视频免费| 婷婷色小说| 亚洲无码福利| 操逼日爱| 亚洲一道本在线| 亚洲最大网站| 日本高清不卡视频| 97超碰在| 黄色A级片| 欧美性爱香蕉视频| 91成人免费在线观看| 伊人成人在线视频观看| 国产成人性爱| 蜜桃精品在线| 韩国午夜激情| 日韩精品在线免费视频| 8x8拨牐拨牐拨牐永久免费| 日本黄色免费在线观看| 国产一级片网站| 亚洲做爱视频| 无码成人AV在线看免费| JIZZJIZZ国产精品喷水| 一级AA视频| 北条麻妃在线一区| 成人做爰A片一区二区app| 无码22p| 成人综合大香蕉| 99热免费精品| 在线有区别亚洲| 成人免费三级片| 婷婷视频网站| 99黄色电影| 欧美V∧| 怡春院av| 自慰喷水流白浆中文字幕| 狠狠躁夜夜躁人人爽视频| 毛片网站视频| 成人精品国产| 欧美高清无码| 乱伦一区二区三区| 欧美国产日韩在线观看| 国产高清无码视频在线观看| 青娱乐亚洲精品视频| 国产在线播放av| 中文字幕在线观看不卡| 97精品人妻| 欧美成人乱码一区二区三区| 日本欧美在线视频| 国产久久这里只有精品视频| 婷婷五月天丁香成人社区| 五月丁香花视频| 国产精品三级在线观看| 少妇被躁到高潮无码| 三级无码在线播放| 乖我硬了让老子cao你小视频| 嫩BBB嫩BBB嫩BBB| 一级视频免费观看| 欧美日韩黄色片| 国产一级无码| 在线观看亚洲| 国产色色视频| 大香蕉伊人在线观看视频| 一见钟情的韩国电影| 波多野结衣久久精品| 视色网| 日韩草比| 久热免费| 大荫蒂HD大荫蒂视频| 玖玖爱资源站| 激情久久AV一区AV二区AV三区| 精品91海角乱| 先锋资源男人站| 国产成人免费做爰视频| 漂亮人妻吃鸡啪啪哥哥真的好| 午夜视频网站| 韩国精品无码一区二区三区18| 91天天综合在线| 高清无码日本| 国产久久久| 黄色一级片免费| 人人爽夜夜爽| 人人插人人澡| 国产最新地址| 欧美亚洲综合手机在线| 天堂久久久久| 黄色小电影在线观看| 久操免费在线观看| 免费在线看a| 中文原创麻豆传媒md0052| 久久极品| 怡春院熟女精品AV| 在线国产中文字幕| 亚洲黄色片| 中文无码在线观看中文字幕av中文 | 免费无码毛片| 精品玖玖| 99久久婷婷国产综合精品电影| 一区二区国产视频| 99色网站| 无码一区二区三区免费看| 国产一级a一级a免费视频| 91人妻一区二区三区无不码超满 | 欧美日韩高清| 亚洲秘无码一区二区三区电影| 日韩城人免费| 午夜在线无码| 九九九色| 美女扣逼网站| 最新中文字幕777私人在线| 亚洲AV无码蜜桃| 综合天堂AV久久久久久久| 精品色哟哟| 香蕉成人A片视频| 另类性爱视频| 久久青青| 日本色婷婷| 亚洲欧美在线综合| 天堂在线www| 无码不卡一区| 18毛片| 国产精品一区一区三区| 日本超碰在线| 黄色视频网站在线播放| 97超碰大香蕉| 波多野结衣一级| 又a又黄高清无码视频| 做爰视频毛片下载蜜桃视频。| 黄色一级爱爱| 九九九在线| 草逼综合网| 欧一美一婬一伦一区二区三区自慰 | 欧美黄色小视频| 性欧美欧美巨大69| 国产精品免费av在线| 中文无码一区二区三区| 18禁在线看| 黄网站免费看| 中文字幕无码网站| 亚洲国产精品欧美久久| 91插逼| 国产一级二级三级片| 内射午夜福利在线免费观看视频 | P站免费版-永久免费的福利视频平台 | 午夜黄色小视频| 日本家庭乱伦视频| 国产福利视频在线| 97精品综合久久| 亚洲av网站在线观看| 国产天堂在线观看| 欧美操逼大片| 蜜臀久久久| 亚洲AV无码一区东京热久久| 丁香五月婷婷色| 黄视频免费在线观看| 久久精彩偷拍视频| 波多野结衣高清av久久直播免| 亚洲天堂网2025| 日本AⅤ| 青青草原在线免费| 豆花视频成人版www满18| 亚洲精品成人7777777| 狠狠撸狠狠干| 人妻精品一卡二卡| 精品无码在线观看视频| 欧美精品久久久久久久久| 日韩欧美视频在线播放| 亚洲视频黄色| 黄片免费视频在线观看| 51成人网站免费| 国产AV毛片| 日韩精品一区二区三区四区蜜桃视频| 精品中文一区二区三区| 豆花视频在线免费观看| 日韩不卡AV| 五月婷亚洲精品AV天堂| www.伊人| gogogo高清在线观看免费直播中国 | 亚洲国产精品一区二区三区| 91精品国产乱码久久久久| 老司机一区二区| 激情综合久久| 精品不卡| 苍井空亚洲精品AA片在线播放| 国产A级成人婬片1976| 国产成人69免费看| 日本免费黄| 国产精品福利小视频| 日韩中文字幕一区| 色情一级A片成人片| 久热热| 蜜臀久久99精品| 日韩在线播放视频| 免费精品视频| 高清无码在线免费观看| 香蕉一级视频| 国产91久久婷婷一区二区| 成人福利午夜A片公司| 天天艹夜夜艹| 99在线观看| 欧美爱爱视屏| 超碰成人在线免费观看| 成人国产精品在线看| 大香伊人| 国产毛片欧美毛片高潮| 大地中文资源5页的更新内容| 国产精品免费观看久久久久久久久| 丰滿人妻一区二区三区| 久久久三级片| 大学生18一19GAY169| 狼友自拍| 在线AⅤ| 午夜操一操| 成年人免费黄色视频| 国产久久久久久久久久| 3p绿帽黑人看自己老婆| 97色色网| 操逼操逼操| 欧美精产国品一二三区别| 久久AV影院| 日韩激情无码| 欧美男人天堂网| 国产酒店自拍| 亚洲色图一区二区三区| 日本精品视频| 丁香操逼| 日韩一级黄色毛片| 中文字幕一区二区三区精华液| 午夜成人三级| 地表最强网红八月未央道具大秀| 18禁激韩| 亚洲无码一区二区三区四区| 亚洲日韩欧美国产| 亚洲成人av无码| 中文字幕天天干| 91人妻人人澡人人爽| 99在线精品视频在线观看| 色婷婷久久综合| 影音先锋国产资源| 国产欧美一区二区三区视频| 久草综合网| 久久99久久99久久99| 日本不卡二区| 无码人妻91| 天天草天天撸| 天天干天天看| 干日本少妇| 肏屄视频网| 天天操免费视频| 老司机狠狠干| 亚洲丝袜av| 丰满人妻一区二区| 国产黄色一级片| 能看毛片的网站| 男人午夜天堂| 男女日逼视频| 午夜成人无码视频| 91福利视频网站| 超碰久草| 伊人日逼| 巨爆乳肉感一区二区三区| 黄色成人18| 无码在线播放观看| 精品视频第一页| 精品人妻少妇| 无码在线看| 国产日韩欧美一区| 大香蕉视频在线观看| 三级日韩视频| 日韩AV中文| 91豆花视频18| 久久秘成人久久无码| 丁香色五月婷婷| 黄片网站免费观看| 日韩黄色电影网| 牛牛影视av老牛影视av| 免费黄色网址啊不卡| 一区二区三区四区| 亚洲综合视频在线| 丁香五月天在线播放| 国产免费福利| 免费在线观看黄色| 亚洲二区无码| 久色悠悠| 北条麻妃无码视频| 国产日韩中文字幕| 成人午夜视频在线观看| 国产精品视频一区二区三区在线观看 | 日韩视频三区| 黄色片国产| 男女av在线| 91精品国产91久久久久久吃药| 欧美XXX黑人XYX性爽| 欧美大片视频| 国产人妻一区二区精选| 91精品视频在线播放| 五月天在线电影| 99ri精品| 蜜桔视频嫩草蜜桃| 欧美午夜爱爱| 99热18| 友田真希一级婬片A片| 少妇白洁视频| 一级色色片| 91艹逼| 中国操逼网| 日韩成人无码精品| 日日碰日日摸| 日韩性爱视频在线播放| 黄网免费| 日本韩国叼嘿片| 91精品久| 无码人妻一区二区三区精品不付款 | 91在线免费播放| 国模在线| 亚洲视频在线观看中文字幕| 豆花视频成人版www满18| 2025四虎在线视频观看| 蜜臀av在线免费观看| 无码午夜| 狼友视频免费在线观看| 北条麻妃二区| 日韩精品人妻| 热久久中文字幕| 在线免费三级| 中文电视剧字幕在线播放免费视频| 手机在线小视频| 国产av三级| 午夜AV在线| 天堂网一区二区三区| 日韩人妻无码中文字幕| 亚洲视频在线观看中文字幕| 3p绿帽黑人看自己老婆| 水多多成人网站A片| 国产精品粉嫩福利在线| 久久99精品国产.久久久久| 亚洲v在线观看| 中文字幕免费视频在线播放| Av黄色| 亚洲免费无码| 三级AV网站| 亚洲视频在线免费观看| 操B在线视频| 国产一区二区三区在线| 影音先锋国产在线| 大香蕉婷婷| 亚洲AV成人网| 国产日逼视频| 日韩熟妇视频| 91精品综合久久久久久五月丁香| 99热最新国产| 国产性爱精品影片免费看| 国产做受91电影| 俺来也官网欧美久久精品| 青青草日逼视频| 肉片无遮挡一区二区三区免费观看视频| 大香蕉尹人在线观看| 大a片| 福利视频一区二区三区| 人人妻人人爽| 99一区| 色色网站免费| 一级黄色电影免费观看| 东方成人AV| 亲子伦一区二区三区观看方式| 久久免费精品视频| 日韩欧美国产综合| 精品福利导航| 99热精品国产| www,操逼| 国产黄色小电影| 丁香花在线高清完整版视频 | 日韩高清AV| 波多野结衣在线观看一区二区 | 欧美日韩国产一区| 成人A片在线| 色婷婷视频在线观看| 内射老熟女| 褒姒AV无玛| 婷婷性爱五月天| 欧美精品无码一区二区| AAAA毛片| 色哟哟网站| 国产精品久久久久久久久久王安宇 | 清清草视频| 婷婷午夜精品久久久久久性色| 日韩高清国产一区在线| 97乱伦| 大地8免费高清视频观看大全| 特级毛片WWW| 日本性爱网址| 色天堂视频| 色欲av网站| 天天做天天干| 中文字幕在线免费播放| 日韩无码人妻系列| 一级A黄色片| 亚洲在线一区二区| 五月丁香综合| 婷婷综合素质二区| 亚洲av无码精品| 丁香花小说完整视频免费观看| 亚洲一二三四区| 男女啪啪免费| 丰满人妻一区二区三区免费| 中文字幕66页| 一级黄色免费电影| 亚洲综人网| 久操| 可以免费看AV的网站| 中文字幕9| 51午夜| AⅤ在线观看| 特黄特黄免费看| 91在线免费视频观看| 2024男人天堂| 欧美成人视频在线观看| 国产裸体网站| 免费无码一区二区三区四区五区| 成人H动漫精品一区二区三区蘑菇 高清无码视频在线免费观看 | 黄色视频毛片| 久久久人妻无码精品蜜桃| 精品99视频| 波多野结衣av在线观看| 国产又粗又长又硬黄色一级片| 午夜久久久久久久久久久久91| 六月综合激情| 91精品一区| 大荫蒂视频另类XX| 自拍偷拍福利视频网站| 伊人久久久| 亚洲无码图| 青青草99热| 国产精品国产精品国产专区不片 | 国产精品V日韩精品V在线观看| 蜜桃传媒一区二区| 午夜黄色小视频| 国产精品美女久久久| 亚洲高清视频在线观看| 翔田千里無碼破解| 日韩三区在线| 久久精品福利| 婷婷中文网| 黑种人配中国少妇HD| 在线观看国产视频| 日韩亚洲中文字幕| 日韩干网| 日韩操比| 一级片在线视频| 一级a免费| 久久嫩草在线影院| 五月天欧美性爱| 日日操人人操| 日韩一区二区三免费高清在线观看| 日韩va中文字幕无码免费| 怡春院熟女精品AV| 西西特级无码444www| 亚洲第一无码| 亚洲1234区| 免费看操逼视频| 在线观看黄色网| 高清无码网站在线观看| 四虎永久在线精品无码| 午夜高清视频| 一区二区经典| 国产精品色婷婷99久久精品| 亚洲中文无码字幕| 亚洲无码91| 久久久久久无码精品亚洲日韩麻豆 | 亚洲精品一区二区三区蜜桃| 玩弄人妻少妇500系列视频| 日韩专区在线观看| 亚洲av无码精品| 超碰c| 肏逼视频网站| 青青草视频偷拍| 日本一区二区三区免费看| 夜夜爽久久精品91| 内射视频在线免费观看| 激情综合网五月婷婷| 成人网站在线免费观看| 成人特级毛片| 免费成人一级片| 国产极品无码| 99热免费| 日本a级视频| WWW色色| 激情婷婷丁香| 国产三级在线| av日韩无码| 日本人妻在线视频| 亚洲午夜福利视频在线观看 | 五月婷婷六月丁香综合| 99精品视频在线免费观看| 天堂麻豆天美| 日韩在线视频播放| 看黄片网站| 成人免费视频网站| 国产91在线中日| 成人精品免费视频| 亚洲国产日本| 69人人| 精品中文一区二区三区| 日韩人妻中文字幕| A免费视频| 日本精品人妻| 国产无码操逼视频| a片视频免费观看| 欧美视频免费| 日逼网站免费观看| 久久久久久免费毛片精品| 99免费视频在线| 久久青留社区金玉| 黄片视频免费在线观看| 一级片视频在线观看| 呦小性Free小U女HD| 久久yy| 美国一级A片草草视频| 97人妻人人澡人人爽人人精品| 日日摸日日操| 日韩a√| 亚洲成a人无码| 自慰喷水流白浆中文字幕| 国产精品福利视频| 97色色超碰| 欧美成人无码一区二区三区| 特黄视频在线观看| 日韩三级片av| 亚洲无码高清在线观看| 亚洲色天堂网| 亚洲男人天堂AV| 国产一级片内射| 黄色网址在线观看视频| 久久夜色精品噜噜亚洲AV| 黄色成人网站在线免费观看| 国精产品秘成人一区二| 午夜神马影院| 欧美麻豆| 日韩大片在线| 偷拍视频网站北条麻妃| 亚洲人人操| 天天干干| 探花视频在线观看| 成年人国产| 影音先锋三级资源| 精品视频在线免费| 男女嫩草视频| 欧美激情一区二区三区| 日韩无码黄片| 欧美日韩成人一区二区三区| 青青草视频免费| aV无码av天天aV天天爽第一| 日逼一级| 国产黄色av| 九色91| 国产福利视频导航| 先锋影音中文字幕| 97AV人妻无码视频二区| 亚洲二区视频| 日韩av无码中文字幕| 蜜桃导航-精品导航| 日韩中文字幕在线播放| www.婷婷五月天| 日韩高清无码电影| 日本爱爱免费| 久久精品无码视频| av手机天堂| www.俺去啦| 99国产精品久久久久久久| 黄色777| 樱桃AV| 中文无码熟妇人妻AV在线| 欧洲一区二区三区| а√最新版在线中文8| BBB搡BBB搡BBB搡BBB| 五月六月丁香| 91成人区| 日韩AV免费在线播放| 熟女一区二区三区| 一级a片激情啪啪免费观| 免费亚洲婷婷| 欧美三级片网址| 97成人人妻一区二区三区| 少妇白洁在线观看| 午夜AV电影| 欧美成年人视频| 国产免费一级特黄A片| 亚洲Av秘无码一区二区| 免费观看成人毛片A片直播千姿| 3d动漫一区二区| 一级做a爰片毛片A片| 亚洲777| 成人精品无码| 91无码在线观看| 日韩人妻精品无码制服| 婷婷伊人大香蕉| 色老板亚洲| 亚洲最大黄色视频| 免费看黄在线看| 韩国三级HD中文字幕的背景音乐| 97视频精品| 青青草原免费在线视频| 围内精品久久久久久久久白丝制服 | 人人草人人看| 一级欧美一级日韩片| 日韩欧美国产成人| 七六十路の高齢熟妇无码| 大香蕉尹人在线观看| 亚洲日韩欧美一厂二区入| 亚洲AV无码蜜桃| 日韩成人免费在线| 亚洲中文无码AV在线| 在线看的av| 日韩精品免费一区二区在线观看| AV在线播放中文字幕| 亚洲欧美激情视频| 日日骚中文字幕| 日韩中字无码黄片| 国产日韩欧美综合精品在线观看 | 国产真人无码| 欧美色图视频在线观看| 亚洲精品成人无码熟妇在线| 日皮视频网站| 人妻精品一区二区在线| 乱伦a片| 日本久久人体视频| 午夜福利100| 男同人到爽无套狂欢| 香蕉婷婷亚洲丁香| h片在线免费观看视频| 日产久久视频| 肏屄视频在线看| 久久久久久久久成人| 苏妲己一级婬片A片| 亚洲精品一区二区三区四区高清 | 特级444www| 日韩香蕉网| 国产成人精品免高潮在线观看| 国产主播专区| 99热这里是精品| 综合AV在线| 97人妻精品一区二区三区免 | 在线日韩国产| 欧美老熟妇BBBBB搡BBB| 制服丝袜一区| 九九99精品视频| 在线播放91灌醉迷J高跟美女| 国内超碰| 日爽夜爽| 精品黄色电影| 中文字幕在线日本| 六月婷婷网| 97超级碰| 日韩成人性爱| 天堂网2014| 西西4444WWW无码精品| 国产午夜福利在线| 成人激情综合网| 色色色99| www.偷拍| 亚洲影音先锋| 日韩无码中字| 成人一级片| 人人操在线公开| 成人国产精品在线观看| 国产骚逼视频| 激情婷婷在线| 九九综合精品| 91免费观看网站| 在线一区二区三区| 一区二区三区福利| 日韩中文字幕一区二区三区| 中文字幕视频在线免费观看| 欧美日韩中文在线视频| 91在线观看免费视频| 噼里啪啦免费观看视频大全| 特黄色A级片视频| 动漫无码视频| 三级片亚洲无码| 97中文字幕在线| 日本毛片在线观看| 狠狠干2021| 性V天堂| 日韩成人在线播放| 亚洲高清无码在线| 天堂一区| 香蕉婷婷亚洲丁香| 成人在线观看无码| 国产91页| 97伊人大香蕉| 蜜臀AV午夜精品| 中国婬乱a| 五月天婷婷导航| 操逼在线播放| 91aaa在线观看| 手机看片久久| 大香蕉久久久| 婷婷色色五月天图片| 中文成人在线| 一级婬片A片AAAAA毛片| 阿v视频在线观看| 九九九欧美| 特级西西444www精品视频| 久久久久久久网站| 人人摸人人射| 久久婷婷秘精品日产538| 最近日韩中文字幕中文翻译歌词| 麻豆91网站| 免费看V片| 综合网操笔| 久热免费视频在线观看| 免费做a爰片77777| 亚洲欧美v| 国产AV中文字幕| 97综合| 91大神免费在线观看| 一级操逼大片| 在线成人自拍| 99国产在线观看免费视频| 大香久久| 日韩少妇视频| 777777视频| 丁香色综合人妻| 安徽妇搡BBBB搡BBB| 欧一美一婬一伦一区二区三区| 亚洲精品在线视频观看| 亚洲AV无码精品久久一区二区| 中文字幕av久久爽Av| 人人摸人人干人人操| 国产你懂的| 日韩无码18| 免费欧美成人网站| 久久久久久久伊人| 九九精品视频在线播放| 黄色国产av| 色色婷婷五月天| 肏少妇女情人大骚逼直播一区二区| 成人无码高清在线观看| 三级片无码在线| 夜夜夜叫天天天做| 久久黄视频| 男人的天堂黄色| 欧美伊人| 一级操逼大片| 欧美成人性爱在线| 久久免费在线视频| 一级黄色免费电影| AAA黄片| 久久人妻无码中文字幕系列| 91精品国产综合久久久蜜臀粉嫩| 亚洲AV无码乱码国产精品黑人| 蜜桃av秘无码一区三| 国产香蕉网| 97爱| 国产av一级片| 二级黄色视频| 俺来也俺就去www色情网| 欧美日韩无| 国产熟妇| 波多野结衣一级婬片A片免费下载| 色丁香视频在线观看的| 亚洲秘无码一区二区三区蜜桃中文| 北岛玲视频在线| 一本到无码| 激情乱伦网站| 三级黄片免费看| 狠狠2021| 精品孕妇孕交无码专区| 午夜成人毛片| 国产美女精品久久AV爽| 蜜臀久久99精品久久久久久宅男| 精品国产久久久久久| 日韩中文字幕人妻| 爱搞搞就要搞| 毛片2| 色五月激情小说| 激情五月在线| 黄网站免费看| 麻豆黄网| 国产又爽又黄视频在线看| 日日干av| 久久亚洲天堂| 亚洲激情性爱| 丁香五月天激情视频| 狠狠躁日日躁夜夜躁2022麻豆 | 精品成人免费视频| 国产在线拍揄自揄拍无码福利| 91成人片| 国产一级做a爱免费视频| 91丨九色丨国产在线| 一级大片| 精品无码一区二区三区| 国产suv精品一区二区6精华液 | 91人妻人人澡人人爽人人精品乱| 亚洲性爱在线观看| 第四色网站| 岛国电影av| 一区二区成人电影| 日韩一级黄色视频| 国产免费黄色视频网站| 国产手机拍视频推荐2023| 婷婷伊人大香蕉| 自拍偷拍网| 人妻综合第一页| 中文字幕精品人妻| 免费三级网址| aaa在线免费视频| 中文字幕成人网| 亚洲无码123| 内射婷婷| 日韩熟妇人妻中文字幕| 狠狠干狠狠操| 亚洲国产中文字幕| 欧美日韩大片| 免费在线观看黄色网址| 91无码在线观看| 久久精品91| 91极品视觉盛宴| 国产AV一卡| 成人无码视频在线| 操逼123首页| 欧美人妻激情| 日韩免费AV| 天天艹天天| 口爆AV| 激情视频网站| www.欧美精品| 欧美日韩成人一区二区三区 | 国产成人综合视频| 91香蕉| 国产亚洲精品久久久波多野结衣 | 欧美国产高清| 人妻无码中文字幕蜜桃| 三级无码在线播放| 热99视频| 中文无码在线观看| 中文免费高清在线| 99xxxxx| 黄色激情五月天| 久久久久久久久久免费视频| 亚洲中文无码第一页| 看一级黄色毛片| 日韩在线中文字幕亚洲| 激情导航| 亚洲国产精品成人综合色五月 | 三级免费| 成人黄色大片| 欧美成人网址在线观看| 亚洲狼人天堂| 亚洲视频无码| 香蕉视频成人在线观看| 深爱五月网| 欧美国产日韩综合在线观看170| 黄色免费AV| 午夜久久| 火淫玖玖免费精品| 这里只有精品视频在线| 翔田千里AV在线| 国产一级婬片A片免费妖精视频 | 99热在线观看| 国产激情视频在线观看| 男人的天堂2019| 丰满少妇在线观看网站| 91狠狠色丁香婷婷综合久久| 日本精品在线视频| 大香蕉av在线观看| 一级特黄大片色| 精品乱子伦一区二区三区免费播成| 中文日韩在线| 国产精品成人无码a无码| 国产在线拍揄自揄拍无码网站新闻 | 日韩成人网址| 99视频在线观看免费|