⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extract.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	beq	?Addtoonebit
	iny
	iny
	iny
	iny
	bra	?_compthreeByte
?Addtoonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL	
	jmp	?_0	
?cmpnextbyte:	
	iny
	lda	(<INS),y
	cmp	<ByteM
	beq	?_cmpnextnextbyte
	dex
	beq	?Addtoonebit
	iny
	iny
	iny
	bra	?_compthreeByte	
?_cmpnextnextbyte:
	iny
	lda	(<INS),y
	cmp	<ByteH
	beq	?_FindmaOK
	dex
	beq	?Addtoonebit
	iny
	iny
	bra	?_compthreeByte	
?_FindmaOK:
	iny
	lda	(<INS),y
	cmp	#lijufenge	;;英文与中文的分隔
	beq	?_lijuchEnd
	sta	(<IND)
	jsr	inc1_IND
	jsr	jisuan_threeByte
	jmp	?_extractloop
?_lijuchEnd:
	lda	#0dh
	sta	(<IND)
	jsr	inc1_IND
	jsr	jisuan_threeByte
	rts
	
	
;;============================================
;;function:解压例句的英文部分
;;input:指向英文开始的地址<indxd &<bitcount
;;output:指向中文的地址<indxd & <bitcount 
;;===========================================
extract_lijuen:
?_extractloop:
	lda	<indxd+2
	sta	<DrrL
	lda	<indxd+3
	sta	<DrrH
	lda	(<indxd)
	sta	<byteL
	jsr	inc1_indxd
	lda	(<indxd)
	sta	<byteM
	jsr	inc1_indxd
	lda	(<indxd)
	sta	<byteH
	jsr	inc1_indxd
	lda	(<indxd)
	sta	<byteP
	lda	<bitcount
	beq	?_Noneedturn
?_turn:	
	asl	<ByteP
	rol	<byteH
	rol	<byteM
	rol	<ByteL
	dec
	bne	?_turn
?_Noneedturn:
	lda	#EnStrstarNum
	sta	<bitcmp
	lda	<ByteL
	sta	<byteLsave	
	lda	<ByteM
	sta	<byteMsave
	lda	<ByteH
	sta	<byteHsave		
?_0:	
	ldy	<bitcmp
?_getmashuloop:
	lda	lijuen,y
	bne	?_getdaimashu	;;找到了此码长的个数
	inc	<bitcmp
	iny
	bra	?_getmashuloop
?_getdaimashu:
	tax	;;将此数位码的个数-->x
	cpy	#9
	bcs	?_twobyte
	
	lda	and_tab,y
	and	<ByteL
	sta	<BYteL
	
	tya
	asl
	tay
	lda	lijuentab,y
	sta	<INSL
	iny
	lda	lijuentab,y
	sta	<INSH
	
	ldy	#0
?_cmploop:	
	lda	(<INS),y
	cmp	<ByteL
	beq	?_finddaimaOk
	dex
	beq	?_addonebit  ;;此位数比较完毕,位数加一
	iny
	iny
	bra	?_cmploop
?_addonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL
	bra	?_0
?_finddaimaOk:
	iny
	lda	(<INS),y
	cmp	#lijufenge	;;英文与中文的分隔
	bne	?notcitiaoend
	jmp	?_lijuenEnd
?notcitiaoend:
	cmp	#'~'
	bne	?_saveit1
	ldy	#0ffh
?_skipzhongyin:	
	iny
?_moveloop1:
	lda	citiaobuff,y
	beq	?_moveOK1
	cmp	#1eh ;次重音(在例句里去掉)
	beq	?_skipzhongyin
	cmp	#60h ;重音(在例句里去掉)
	beq	?_skipzhongyin
	sta	(<IND)
	iny
	jsr	inc1_IND
	bra	?_moveloop1
?_saveit1:
	sta	(<IND)
	jsr	inc1_IND
?_moveOK1:
	jsr	jisuan_twoByte
	jmp	?_extractloop

?_twobyte:	;;比较两字节
	lda	<byteMsave	
	sta	<ByteM
	
	cpy	#17
	bcs	?_ThreeByte
	
	phy
	tya
	sec
	sbc	#8
	tay
	lda	and_tab,y
	and	<ByteM
	sta	<BYteM
	ply
	tya
	asl
	tay
	lda	lijuentab,y
	sta	<INSL
	iny
	lda	lijuentab,y
	sta	<INSH
	
	ldy	#0
?_comptwobit:	
	lda	(<INS),y
	cmp	<ByteL
	beq	?_cmpnextbyte
	dex
	beq	?Addonebit
	iny
	iny
	iny
	bra	?_comptwobit
?Addonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL	
	jmp	?_0	
?_cmpnextbyte:	
	iny
	lda	(<INS),y
	cmp	<ByteM
	beq	?_FindmaOK
	dex
	beq	?Addonebit
	iny
	iny
	bra	?_comptwobit
?_ThreeByte:	;;比较三字节
	lda	<byteHsave	
	sta	<ByteH
	phy
	tya
	sec
	sbc	#16
	tay
	lda	and_tab,y
	and	<ByteH
	sta	<BYteH
	ply
	tya
	asl
	tay
	lda	lijuentab,y
	sta	<INSL
	iny
	lda	lijuentab,y
	sta	<INSH
	
	ldy	#0
?_compthreeByte:	
	lda	(<INS),y
	cmp	<ByteL
	beq	?cmpnextbyte
	dex
	beq	?Addtoonebit
	iny
	iny
	iny
	iny
	bra	?_compthreeByte
?Addtoonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL	
	jmp	?_0	
?cmpnextbyte:	
	iny
	lda	(<INS),y
	cmp	<ByteM
	beq	?_cmpnextnextbyte
	dex
	beq	?Addtoonebit
	iny
	iny
	iny
	bra	?_compthreeByte	
?_cmpnextnextbyte:
	iny
	lda	(<INS),y
	cmp	<ByteH
	beq	?_FindmaOK
	dex
	beq	?Addtoonebit
	iny
	iny
	bra	?_compthreeByte	
?_FindmaOK:
	iny
	lda	(<INS),y
	cmp	#lijufenge	;;英文与中文的分隔
	beq	?_lijuenEnd
	cmp	#'~'
	bne	?_saveit
	ldy	#0ffh
?_skipzhongyin1:	
	iny
?_moveloop:	
	lda	citiaobuff,y
	beq	?_moveOK
	cmp	#1eh ;次重音(在例句里去掉)
	beq	?_skipzhongyin1
	cmp	#60h ;重音(在例句里去掉)
	beq	?_skipzhongyin1
	sta	(<IND)
	iny
	jsr	inc1_IND
	bra	?_moveloop
?_saveit:		
	sta	(<IND)
	jsr	inc1_IND
?_moveOK:
	jsr	jisuan_threeByte
	jmp	?_extractloop
?_lijuenEnd:
	lda	#0dh
	sta	(<IND)
	jsr	inc1_IND
	jsr	jisuan_threeByte
	rts	

;;======================================
;;function;解压出汉英的中文词条
;;input;;从解压词条出来的<bitcount&<bitcmp&大库地址
;;output;解压结果存入cdict_result(<IND),<bitcount,<bitcmp
;;======================================
extract_Hychword:
	rmb0	<ChenFlag
?_extractloop:
	lda	<indxd+2
	sta	<DrrL
	lda	<indxd+3
	sta	<DrrH
	lda	(<indxd)
	sta	<byteL
	jsr	inc1_indxd
	lda	(<indxd)
	sta	<byteM
	jsr	inc1_indxd
	lda	(<indxd)
	sta	<byteH
	jsr	inc1_indxd
	lda	(<indxd)
	sta	<byteP
	
	bne	?_notlibend
;        lda     <byteH
;        bne     ?_notlibend
	lda	<byteH
	bne	?_notlibend
	lda	<byteM
	bne	?_notlibend
	lda	<byteL
	bne	?_notlibend
	jsr	dec3_indxd
	smb0	<ChenFlag
	rts
?_notlibend:	
	lda	<bitcount
	beq	?_Noneedturn
?_turn:	
	asl	<ByteP
	rol	<byteH
	rol	<byteM
	rol	<ByteL
	dec
	bne	?_turn
?_Noneedturn:
	lda	#PhoneticstarNum
	sta	<bitcmp
	lda	<ByteL
	sta	<byteLsave	
	lda	<ByteM
	sta	<byteMsave
	lda	<ByteH
	sta	<byteHsave		
?_0:	
	ldy	<bitcmp
?_getmashuloop:
	lda	hycode,y
	bne	?_getdaimashu	;;找到了此码长的个数
	inc	<bitcmp
	iny
	bra	?_getmashuloop
?_getdaimashu:
	tax	;;将此数位码的个数-->x
	cpy	#9
	bcs	?_twobyte
	
	lda	and_tab,y
	and	<ByteL
	sta	<BYteL
	
	tya
	asl
	tay
	lda	hycodetab,y
	sta	<INSL
	iny
	lda	hycodetab,y
	sta	<INSH
	
	ldy	#0
?_cmploop:	
	lda	(<INS),y
	cmp	<ByteL
	beq	?_finddaimaOk
	dex
	beq	?_addonebit  ;;此位数比较完毕,位数加一
	iny
	iny
	bra	?_cmploop
?_addonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL
	bra	?_0
?_finddaimaOk:
	iny
	lda	(<INS),y
	cmp	#Hyyingfenge	;;中文和英文的分割符
	bne	?notyinbiaoend
	jmp	?_yinbiaoEnd
?notyinbiaoend:	
	sta	(<IND)
	jsr	inc1_IND
	jsr	jisuan_twoByte
	jmp	?_extractloop

?_twobyte:	;;比较两字节
	lda	<byteMsave	
	sta	<ByteM
	cpy	#17
	bcs	?_ThreeByte
	phy
	tya
	sec
	sbc	#8
	tay
	lda	and_tab,y
	and	<ByteM
	sta	<BYteM
	ply
	tya
	asl
	tay
	lda	hycodetab,y
	sta	<INSL
	iny
	lda	hycodetab,y
	sta	<INSH
	
	ldy	#0
?_comptwobit:	
	lda	(<INS),y
	cmp	<ByteL
	beq	?_cmpnextbyte
	dex
	beq	?Addonebit
	iny
	iny
	iny
	bra	?_comptwobit
?Addonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL	
	jmp	?_0	
?_cmpnextbyte:	
	iny
	lda	(<INS),y
	cmp	<ByteM
	beq	?_FindmaOK
	dex
	beq	?Addonebit
	iny
	iny
	bra	?_comptwobit
?_ThreeByte:	;;比较三字节
	lda	<byteHsave	
	sta	<ByteH
	phy
	tya
	sec
	sbc	#16
	tay
	lda	and_tab,y
	and	<ByteH
	sta	<BYteH
	ply
	tya
	asl
	tay
	lda	hycodetab,y
	sta	<INSL
	iny
	lda	hycodetab,y
	sta	<INSH
	
	ldy	#0
?_compthreeByte:	
	lda	(<INS),y
	cmp	<ByteL
	beq	?cmpnextbyte
	dex
	beq	?Addtoonebit
	iny
	iny
	iny
	iny
	bra	?_compthreeByte
?Addtoonebit:
	inc	<bitcmp
	lda	<byteLsave	
	sta	<ByteL	
	jmp	?_0	
?cmpnextbyte:	
	iny
	lda	(<INS),y
	cmp	<ByteM
	beq	?_cmpnextnextbyte
	dex
	beq	?Addtoonebit
	iny
	iny
	iny
	bra	?_compthreeByte	
?_cmpnextnextbyte:
	iny
	lda	(<INS),y
	cmp	<ByteH
	beq	?_FindmaOK
	dex
	beq	?Addtoonebit
	iny
	iny
	bra	?_compthreeByte	
?_FindmaOK:
	iny
	lda	(<INS),y
	cmp	#Hyyingfenge	;;中文和英文的分割符
	beq	?_yinbiaoEnd
	sta	(<IND)
	jsr	inc1_IND
	jsr	jisuan_threeByte
	jmp	?_extractloop
?_yinbiaoEnd:
	lda	#0dh
	sta	(<IND)
	jsr	inc1_IND
	jsr	jisuan_threeByte
	rts	;exit

;;======================================
;;function;解压出汉英的英文词条
;;input;;从解压词条出来的<bitcount&<bitcmp&大库地址
;;output;解压结果存入cdict_result(<IND),<bitcount,<bitcmp
;;======================================
;extract_Hyenword:
;	bbr0	<Chenflag,?_extractloop
;	rts
;?_extractloop:
;	lda	<indxd+2
;	sta	<DrrL
;	lda	<indxd+3
;	sta	<DrrH
;	lda	(<indxd)
;	sta	<byteL
;	jsr	inc1_indxd
;	lda	(<indxd)
;	sta	<byteM
;	jsr	inc1_indxd
;	lda	(<indxd)
;	sta	<byteH
;	jsr	inc1_indxd
;	lda	(<indxd)
;	sta	<byteP
;
;	lda	<bitcount
;	beq	?_Noneedturn
;?_turn:	
;	asl	<ByteP
;	rol	<byteH
;	rol	<byteM
;	rol	<ByteL
;	dec
;	bne	?_turn
;?_Noneedturn:
;	lda	#PhoneticstarNum
;	sta	<bitcmp
;	lda	<ByteL
;	sta	<byteLsave	
;	lda	<ByteM
;	sta	<byteMsave
;	lda	<ByteH
;	sta	<byteHsave		
;?_0:	
;	ldy	<bitcmp
;?_getmashuloop:
;	lda	hycitiao,y
;	bne	?_getdaimashu	;;找到了此码长的个数
;	inc	<bitcmp
;	iny
;	bra	?_getmashuloop
;?_getdaimashu:
;	tax	;;将此数位码的个数-->x
;	cpy	#9
;	bcs	?_twobyte
;	
;	lda	and_tab,y
;	and	<ByteL
;	sta	<BYteL
;	
;	tya
;	asl
;	tay
;	lda	hycitiaotab,y
;	sta	<INSL
;	iny
;	lda	hycitiaotab,y
;	sta	<INSH
;	
;	ldy	#0
;?_cmploop:	
;	lda	(<INS),y
;	cmp	<ByteL
;	beq	?_finddaimaOk
;	dex
;	beq	?_addonebit  ;;此位数比较完毕,位数加一
;	iny
;	iny
;	bra	?_cmploop
;?_addonebit:
;	inc	<bitcmp
;	lda	<byteLsave	
;	sta	<ByteL
;	bra	?_0
;?_finddaimaOk:
;	iny
;	lda	(<INS),y
;	cmp	#Hyyingfenge	;;中文和英文的分割符
;	bne	?notyinbiaoend
;	jmp	?_yinbiaoEnd
;?notyinbiaoend:	
;	cmp	#hyhuiche
;	bne	?_nothuiche
;	lda	#0dh
;?_nothuiche:	
;	sta	(<IND)
;	jsr	inc1_IND
;	jsr	jisuan_twoByte
;	jmp	?_extractloop
;
;?_twobyte:	;;比较两字节
;	lda	<byteMsave	
;	sta	<ByteM
;	cpy	#17
;	bcs	?_ThreeByte
;	phy
;	tya
;	sec
;	sbc	#8
;	tay
;	lda	and_tab,y
;	and	<ByteM
;	sta	<BYteM
;	ply
;	tya
;	asl
;	tay
;	lda	hycitiaotab,y
;	sta	<INSL
;	iny
;	lda	hycitiaotab,y
;	sta	<INSH
;	
;	ldy	#0
;?_comptwobit:	
;	lda	(<INS),y
;	cmp	<ByteL
;	beq	?_cmpnextbyte
;	dex
;	beq	?Addonebit
;	iny
;	iny
;	iny
;	bra	?_comptwobit
;?Addonebit:
;	inc	<bitcmp
;	lda	<byteLsave	
;	sta	<ByteL	
;	jmp	?_0	
;?_cmpnextbyte:	
;	iny
;	lda	(<INS),y
;	cmp	<ByteM
;	beq	?_FindmaOK
;	dex
;	beq	?Addonebit
;	iny
;	iny
;	bra	?_comptwobit
;?_ThreeByte:	;;比较三字节
;	lda	<byteHsave	
;	sta	<ByteH
;	phy
;	tya
;	sec
;	sbc	#16
;	tay
;	lda	and_tab,y
;	and	<ByteH
;	sta	<BYteH
;	ply
;	tya
;	asl
;	tay
;	lda	hycitiaotab,y
;	sta	<INSL
;	iny
;	lda	hycitiaotab,y
;	sta	<INSH
;	
;	ldy	#0
;?_compthreeByte:	
;	lda	(<INS),y
;	cmp	<ByteL
;	beq	?cmpnextbyte
;	dex
;	beq	?Addtoonebit
;	iny
;	iny
;	iny
;	iny
;	bra	?_compthreeByte
;?Addtoonebit:
;	inc	<bitcmp
;	lda	<byteLsave	
;	sta	<ByteL	
;	jmp	?_0	
;?cmpnextbyte:	
;	iny
;	lda	(<INS),y
;	cmp	<ByteM
;	beq	?_cmpnextnextbyte
;	dex
;	beq	?Addtoonebit
;	iny
;	iny
;	iny
;	bra	?_compthreeByte	
;?_cmpnextnextbyte:
;	iny
;	lda	(<INS),y
;	cmp	<ByteH
;	beq	?_FindmaOK
;	dex
;	beq	?Addtoonebit
;	iny
;	iny
;	bra	?_compthreeByte	
;?_FindmaOK:
;	iny
;	lda	(<INS),y
;	cmp	#Hyyingfenge	;;中文和英文的分割符
;	beq	?_yinbiaoEnd
;	cmp	#hyhuiche
;	bne	?_nothuiche1
;	lda	#0dh
;?_nothuiche1:		
;	sta	(<IND)
;	jsr	inc1_IND
;	jsr	jisuan_threeByte
;	jmp	?_extractloop
;?_yinbiaoEnd:
;	lda	#0
;	sta	(<IND)
;	jsr	inc1_IND
;	jsr	jisuan_threeByte
;	rts	;exit

	end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -