亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lzd.asm

?? 這是資料最全的有關匯編語言的示例源代碼
?? ASM
字號:
title	Lempel-Ziv Decompressor
; $Source: /usr/home/dhesi/zoo/RCS/lzd.asm,v $
; $Id: lzd.asm,v 1.3 91/07/07 09:36:23 dhesi Exp $

;Derived from Tom Pfau's public domain assembly code.
;The contents of this file are hereby released to the public domain.
;                                   -- Rahul Dhesi 1988/08/24

UNBUF_IO	equ	1		;use unbuffered I/O

public	_lzd,memflag,docrc

	include	asmconst.ai
	include macros.ai

;Hash table entry
hash_rec	struc
next	dw	?			; prefix code
char	db	?			; suffix char
hash_rec	ends

extrn	_addbfcrc:near			;External C function for CRC

ifdef	UNBUF_IO
extrn	_read:near
extrn	_blockwrite:near
else
extrn	_zooread:near
extrn	_zoowrite:near
endif

;Declare segments
_text	segment byte public 'code'
_text	ends

dgroup	group	_data
	assume ds:dgroup,es:dgroup
_data	segment word public 'data'
extrn	_out_buf_adr:word		;address of C output buffer
extrn	_in_buf_adr:word		;address of C input buffer

memflag		db	0		;Memory allocated?  flag
save_bp		dw	?
save_sp		dw	?

input_handle	dw	?
output_handle	dw	?
hash_seg	dw	?
cur_code	dw	?
old_code	dw	?
in_code		dw	?
free_code	dw	first_free

;Note:  for re-entrancy, following 3 must be re-initialized each time
stack_count	dw	0
nbits		dw	9
max_code	dw	512

fin_char	db	?
k		db	?
masks		dw	1ffh,3ffh,7ffh,0fffh,1fffh

;Note:  for re-entrancy, following 2 must be re-initialized each time
bit_offset	dw	0
output_offset	dw	0
_data	ends

memory	segment para public 'memory'
hash	label	hash_rec
memory	ends

call_index macro
	mov	bp,bx			;bx = bx * 3 (3 byte entries)
	shl	bx,1			;bp = bx
	add	bx,bp			;bx = bx * 2 + bp
	endm

call_write_char macro
	local	wc$1
	mov	di,output_offset	;Get offset in buffer
	cmp	di,outbufsiz		;Full?
	jb	wc$1			;no
	call	write_char_partial
	sub	di,di			;so we add zero in next statement
wc$1:	add	di,[_out_buf_adr]	;di <- buffer address + di
	stosb				;Store char
	inc	output_offset		;Increment number of chars in buffer
	endm

add_code macro
	mov	bx,free_code		;Get new code
	;call	index			;convert to address
	call_index
	push	es			;point to hash table
	mov	es,hash_seg
	mov	al,k			;get suffix char
	mov	es:[bx].char,al		;save it
	mov	ax,old_code		;get prefix code
	mov	es:[bx].next,ax		;save it
	pop	es
	inc	free_code		;set next code
	endm

;Start coding
_text	segment
	assume	cs:_text,ds:dgroup,es:dgroup,ss:nothing

write_char_partial proc	near
	push	cx
	mov	cx,di			;byte count
	call	write_block
	pop	cx
	mov	output_offset,0		;Restore buffer pointer
	ret
write_char_partial endp

_lzd	proc	near

	push	bp			;Standard C entry code
	mov	bp,sp
	push	di
	push	si
	
	push	ds			;Save ds to be sure
	mov	[save_bp],bp		;And bp too!
	mov	bx,ds
	mov	es,bx

;Get two parameters, both integers, that are input file handle and
;output file handle
	mov	ax,[bp+4]
	mov	[input_handle],ax
	mov	ax,[bp+6]
	mov	[output_handle],ax

	call	decompress		;Compress file & get status in AX

	mov	bp,[save_bp]		;Restore bp
	pop	ds
	pop	si			;Standard C return code
	pop	di
	mov	sp,bp
	pop	bp
	ret
_lzd	endp

;Note:  Procedure decompress returns AX=0 for successful decompression and
;	AX=1 for I/O error and AX=2 for malloc failure.  
decompress	proc	near
	mov	[save_sp],sp		;Save SP in case of error return

;Initialize variables -- required for serial re-entrancy
	mov	[nbits],9
	mov	[max_code],512
	mov	[free_code],first_free
	mov	[stack_count],0
	mov	[bit_offset],0
	mov	[output_offset],0

	test	memflag,0ffH		;Memory allocated?
	jnz	gotmem			;If allocated, continue
	malloc	<((maxmax * 3) / 16 + 20)>	;allocate it
	jnc	here1
	jmp	MALLOC_err
here1:
	mov	hash_seg,ax		;Save segment address of mem block
	mov	memflag,0ffh		;Set flag to remind us later
gotmem:

	mov	ax,inbufsiz
	push	ax			;byte count
	push	_in_buf_adr		;buffer address
	push	input_handle		;zoofile
ifdef	UNBUF_IO
	call	_read
else
	call	_zooread
endif
	add	sp,6

	cmp	ax,-1
	jz	IO_err			;I/O error
here2:

l1:	call	read_code		;Get a code
	cmp	ax,eof			;End of file?
	jne	l2			;no
	cmp	output_offset,0		;Data in output buffer?
	je	OK_ret			;no
	mov	cx,[output_offset]	;byte count
	call	write_block		;write block of cx bytes
OK_ret:	
	xor	ax,ax			;Normal return -- decompressed
	ret				;done
IO_err:
	mov	ax,2			;I/O error return 
	mov	sp,[save_sp]		;Restore stack pointer
	ret	

MALLOC_err:
	mov	ax,1			;Malloc error return
	mov	sp,[save_sp]		;Restore stack pointer
	ret

l2:	cmp	ax,clear		;Clear code?
	jne	l7			;no
	call	init_tab		;Initialize table
	call	read_code		;Read next code
	mov	cur_code,ax		;Initialize variables
	mov	old_code,ax
	mov	k,al
	mov	fin_char,al
	mov	al,k
	;call	write_char		;Write character
	call_write_char
	jmp	l1			;Get next code
l7:	mov	cur_code,ax		;Save new code
	mov	in_code,ax
	mov	es,hash_seg		;Point to hash table
	cmp	ax,free_code		;Code in table? (k<w>k<w>k)
	jb	l11			;yes
	mov	ax,old_code		;get previous code
	mov	cur_code,ax		;make current
	mov	al,fin_char		;get old last char
	push	ax			;push it
	inc	stack_count

;old code -- two memory references
;l11:	
;	cmp	cur_code,255		;Code or character?
;	jbe	l15			;Char
;	mov	bx,cur_code		;Convert code to address
;new code -- 0 or 1 memory references
	mov	ax,cur_code
l11:
	;All paths in must have ax containing cur_code
	cmp	ax,255
	jbe	l15
	mov	bx,ax
;end code
	;call	index
	call_index
	mov	al,es:2[bx]		;Get suffix char
	push	ax			;push it
	inc	stack_count
	mov	ax,es:[bx]		;Get prefix code
	mov	cur_code,ax		;Save it
	jmp	l11			;Translate again
l15:	
;old code
;	push	ds			;Restore seg reg
;	pop	es
;new code
	mov	ax,ds			;faster than push/pop
	mov	es,ax
;end code
	mov	ax,cur_code		;Get code
	mov	fin_char,al		;Save as final, k
	mov	k,al
	push	ax			;Push it

;old code
;	inc	stack_count
;	mov	cx,stack_count		;Pop stack
;new code -- slightly faster because INC of memory is slow
	mov	cx,stack_count
	inc	cx
	mov	stack_count,cx
;end code
	jcxz	l18			;If anything there
l17:	pop	ax
	;call	write_char
	call_write_char
	loop	l17

;old code
;l18:	
;	mov	stack_count,cx		;Clear count on stack
;new code -- because stack_count is already zero on earlier "jcxz l18"
	mov	stack_count,cx
l18:
;end code

	;call	add_code		;Add new code to table
	add_code
	mov	ax,in_code		;Save input code
	mov	old_code,ax
	mov	bx,free_code		;Hit table limit?
	cmp	bx,max_code
	jb	l23			;Less means no
	cmp	nbits,maxbits		;Still within maxbits?
	je	l23			;no (next code should be clear)
	inc	nbits			;Increase code size
	shl	max_code,1		;Double max code
l23:	jmp	l1			;Get next code
decompress	endp	

read_code	proc	near

;old code
;	mov	ax,bit_offset		;Get bit offset
;	add	ax,nbits		;Adjust by code size
;	xchg	bit_offset,ax		;Swap
;	mov	dx,ax			;dx <- ax
;new code
	mov	ax,bit_offset
	mov	dx,ax			;dx <- bit_offset
	add	ax,nbits
	mov	bit_offset,ax
	mov	ax,dx
;end code

	shr	ax,1
	shr	ax,1
	shr	ax,1			;ax <- ax div 8
	and	dx,07			;dx <- ax mod 8
	cmp	ax,inbufsiz-3		;Approaching end of buffer?
	jb	rd0			;no
	push	dx			;Save offset in byte
	add	dx,nbits		;Calculate new bit offset
	mov	bit_offset,dx
	mov	cx,inbufsiz
	mov	bp,ax			;save byte offset
	sub	cx,ax			;Calculate bytes left
	add	ax,_in_buf_adr
	mov	si,ax
	mov	di,_in_buf_adr
rep	movsb				;Move last chars down

	push	bp			;byte count
	push	di			;buffer address
	push	input_handle		;zoofile
ifdef	UNBUF_IO
	call _read
else
	call	_zooread
endif
	add	sp,6

	cmp	ax,-1
	jnz	here4
	jmp	IO_err			;I/O error

here4:
	xor	ax,ax			;Clear ax
	pop	dx			;Restore offset in byte
rd0:	
	add	ax,_in_buf_adr
	mov	si,ax
	lodsw				;Get word
	mov	bx,ax			;Save in AX
	lodsb				;Next byte
	mov	cx,dx			;Offset in byte
	jcxz	rd2			;If zero, skip shifts
rd1:	shr	al,1			;Put code in low (code size) bits of BX
	rcr	bx,1
	loop	rd1
rd2:	mov	ax,bx			;put code in ax
	mov	bx,nbits		;mask off unwanted bits
	sub	bx,9
	shl	bx,1
	and	ax,masks[bx]
	ret
read_code	endp

init_tab	proc	near
	mov	nbits,9			;Initialize variables
	mov	max_code,512
	mov	free_code,first_free
	ret
init_tab	endp

comment #
index		proc	near
	mov	bp,bx			;bx = bx * 3 (3 byte entries)
	shl	bx,1			;bp = bx
	add	bx,bp			;bx = bx * 2 + bp
	ret
index		endp
#end comment

docrc	proc	near
;On entry, ax=char count, dx=buffer address.
;Do crc on character count, in buffer.
;****** Update CRC value -- call external C program
	;External program is:	addbfcrc(buffer, count)
	;			char *buffer;
	;			int count;

	push	ax		;SAVE AX
	push	bx		;SAVE BX
	push	cx
	push	dx

	push	ax		;param 2: char count
	push	dx		;param 1: buffer address
	call	_addbfcrc
	add	sp,4		;Restore 2 params from stack

	pop	dx
	pop	cx
	pop	bx		;RESTORE BX
	pop	ax		;RESTORE AX
	ret
docrc	endp

write_block proc near
;Input:  CX=byte count to write
	push	ax
	push	bx
	push	cx
	push	dx
	push	si			;may not be necessary to save si & di
	push	di

	push	cx			;save count

	push	cx			;count
	push	_out_buf_adr		;buffer
	push	output_handle		;zoofile
ifdef	UNBUF_IO
	call	_blockwrite
else
	call	_zoowrite
endif
	add	sp,6

	pop	cx			;restore count

	;ax = actual number of bytes written
	cmp	ax,cx			;all bytes written?
	je	written			;if yes, OK
	jmp	IO_err
written:
	mov	dx,_out_buf_adr
	call	docrc			;do crc on ax bytes in buffer dx
	mov	output_offset,0		;restore buffer ptr to zero

	pop	di
	pop	si
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
write_block endp

_text	ends

	end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品久久嫩草网站秘色| 日韩午夜激情视频| 国产丶欧美丶日本不卡视频| 日本视频中文字幕一区二区三区| 亚洲欧美另类图片小说| 亚洲视频一二三| 综合av第一页| 亚洲一区二区视频在线观看| 亚洲黄色性网站| 一区二区三区蜜桃网| 亚洲bt欧美bt精品| 日韩成人午夜电影| 国产在线国偷精品产拍免费yy| 国产专区综合网| 丰满白嫩尤物一区二区| 99久久综合国产精品| 色欲综合视频天天天| 欧美视频一区二区三区四区 | 精品日产卡一卡二卡麻豆| 欧美日韩美少妇| 欧美一区二区在线看| 久久精品视频一区二区| 国产精品伦一区二区三级视频| 亚洲欧洲av色图| 亚洲18女电影在线观看| 狠狠网亚洲精品| av激情成人网| 欧美日本精品一区二区三区| 精品成人在线观看| 亚洲欧美激情在线| 九一久久久久久| 91亚洲大成网污www| 5566中文字幕一区二区电影| 久久久蜜桃精品| 亚洲成人一区二区在线观看| 极品销魂美女一区二区三区| 91一区在线观看| 欧美成人一区二区三区在线观看| 国产精品福利一区二区三区| 日韩中文字幕区一区有砖一区| 国产精品夜夜爽| 欧美精品xxxxbbbb| 亚洲欧洲精品成人久久奇米网| 视频一区在线播放| 99re热这里只有精品视频| 日韩欧美久久一区| 亚洲国产精品视频| 成人一区二区三区视频在线观看| 欧美日韩高清一区二区| 中文字幕视频一区| 国产精品原创巨作av| 91精品国产福利在线观看| 亚洲日本一区二区| 成人亚洲精品久久久久软件| 日韩欧美色综合| 午夜久久久久久久久| 99久久婷婷国产综合精品电影 | 欧美电影免费提供在线观看| 日韩一区日韩二区| 国产成+人+日韩+欧美+亚洲| 91精品国产一区二区三区蜜臀| 亚洲精选一二三| av资源网一区| 国产精品嫩草影院av蜜臀| 国产盗摄女厕一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 亚洲福利视频导航| 欧美性生交片4| 亚洲一区二区三区四区在线| 91在线免费看| 中文字幕在线播放不卡一区| 国产成人自拍高清视频在线免费播放| 欧美一区二区三区日韩视频| 婷婷久久综合九色综合绿巨人| 日本高清不卡一区| 亚洲精品乱码久久久久久| 色爱区综合激月婷婷| 一区二区三区丝袜| 在线看日韩精品电影| 一区二区三区中文字幕| 91精品福利视频| 亚洲国产一区二区a毛片| 欧美色网站导航| 石原莉奈在线亚洲三区| 日韩欧美一区二区免费| 美女脱光内衣内裤视频久久影院| 欧美另类久久久品| 久久国产福利国产秒拍| 久久日韩粉嫩一区二区三区| 国产成人av一区二区| 国产精品色在线| 欧美亚洲国产一区二区三区 | 亚洲欧洲国产日本综合| 91丨porny丨中文| 午夜不卡av在线| 日韩一级片网站| 成人午夜激情视频| 亚洲日本在线a| 欧美一区二区三区人| 国产露脸91国语对白| 亚洲免费看黄网站| 91精品国产乱| 99riav一区二区三区| 日韩黄色在线观看| 中文字幕高清一区| 欧美系列日韩一区| 国内精品国产成人国产三级粉色| 国产精品素人视频| 欧美嫩在线观看| 国产成人8x视频一区二区| 一区二区三区四区av| 精品国产91乱码一区二区三区| 丁香激情综合国产| 日韩一区欧美二区| 国产精品久久久久婷婷二区次| 欧美精品视频www在线观看| 国产麻豆精品在线| 亚洲成在人线免费| 欧美激情自拍偷拍| 欧美一区二区播放| 91丨porny丨在线| 狠狠色丁香久久婷婷综| 亚洲女同女同女同女同女同69| 日韩欧美一二区| 欧美视频日韩视频| 91色在线porny| 国产大陆a不卡| 毛片av一区二区| 亚洲成a人在线观看| 国产精品久久久久久久裸模| 日韩精品中文字幕一区 | 亚洲伦在线观看| 国产性做久久久久久| 51久久夜色精品国产麻豆| 一本大道av一区二区在线播放| 国精产品一区一区三区mba桃花| 亚洲国产精品欧美一二99| 中文字幕一区av| 国产精品污网站| 国产喷白浆一区二区三区| 欧美一卡二卡在线观看| 欧美日韩在线观看一区二区 | 亚洲国产精品久久艾草纯爱| 中文字幕国产精品一区二区| 精品福利一区二区三区| 欧美一区二区免费视频| 制服丝袜av成人在线看| 欧美日韩免费高清一区色橹橹 | 国产.欧美.日韩| 九色综合国产一区二区三区| 天使萌一区二区三区免费观看| 一区二区三区自拍| 亚洲自拍偷拍九九九| 亚洲一区日韩精品中文字幕| 亚洲日本成人在线观看| 亚洲手机成人高清视频| 亚洲欧美日韩精品久久久久| 最近日韩中文字幕| 亚洲精品久久嫩草网站秘色| 中文字幕一区二区三区在线不卡 | 91丝袜美女网| 日本电影欧美片| 欧美视频你懂的| 91 com成人网| 久久亚洲二区三区| 亚洲国产成人私人影院tom| 亚洲国产高清aⅴ视频| 亚洲三级久久久| 日韩黄色一级片| 国产一区二区电影| 99精品一区二区| 欧美系列日韩一区| 精品国产乱码久久久久久夜甘婷婷 | 免费人成网站在线观看欧美高清| 日本中文字幕一区二区有限公司| 美洲天堂一区二卡三卡四卡视频 | 久久综合九色综合欧美亚洲| 26uuu亚洲综合色| 国产精品久久午夜夜伦鲁鲁| 亚洲精品美腿丝袜| 琪琪一区二区三区| 成人影视亚洲图片在线| 91国产免费观看| 精品国产一区二区三区忘忧草| 国产日产欧产精品推荐色| 亚洲精品五月天| 精品综合久久久久久8888| 成人理论电影网| 欧美性色黄大片| 精品欧美久久久| 色菇凉天天综合网| 555夜色666亚洲国产免| 中文字幕乱码久久午夜不卡 | 不卡的看片网站| 欧美日韩二区三区| 欧美国产精品久久| 日韩精品电影在线| 波多野结衣在线一区| 日韩一级高清毛片| 亚洲欧美日韩国产成人精品影院|