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

📄 jpeg.txt

📁 此代码的TI DSP 5000系列的DSP汇编源代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;---------------------
;JPEG编码
;---------------------
JPEGEN.ASM
      .MMREGS
      .GLOBAL JPEG_EN
      .DEF JPEG_EN
      .DEF J_STATUS,J_STACK
      .REF PICT,NEXT_LINE
      .REF IMAGE_LENGTH,IMAGE_WIDTH
      .REF BLOCK_ENCODE,HUFF_EN
      .REF DCT_CODE,Y_QUANTIZE_TABLE

      .REF QUANT_TABLE,ZIGZAG_TABLE
      .REF DCTB1,COMPRESS_DATA
      .REF MASKDATA,MASKSIZE,EOB
      .REF DIFF1,RZERO,IN_SIZE,COWORD
      .REF ABSDIFF,ABSDIFF1,TRANSDIFF
      .REF DC_HEAD,DC_TAIL,LESS_BIT
      .REF DIFF,USER_BIT,RNDOFF
      .REF LAST_DC,LAST_RESULT
      .REF ZIGZAG_TABLE0,RDCHUFF
      .REF DCHUFF,NEXT_SECTION
      .BSS J_STATUS,2

J_STACK         .USECT "J_STACK",10H
DCTB1_ADDR      .SET DCTB1
                .TEXT

JPEG_EN:

;----------------------
;保存程序运行环境
;----------------------
       MVMD ST0,J_STATUS
       MVMD ST1,J_STATUS+1
       LD #J_STACK,DP
       MVMD AR1,J_STACK+1
       MVMD AR2,J_STACK+2
       MVMD AR3,J_STACK+3
       MVMD AR4,J_STACK+4
       MVMD AR5,J_STACK+5
       POPD J_STACK+8
;------------------------
;JPEG编码初始化
;------------------------

      CALL JPEG_EN_INIT
      STM #IMAGE_WIDTH-1,AR7
BLOCKEN_LOOP0:
      STM #IMAGE_LENGTH-1,AR6
BLOCKEN_LOOP:
;--------------------------
;块编码
;--------------------------
        CALL BLOCK_INIT
        CALL BLOCK_ENCODE
        MAR AR6
	BANZ BLOCK_LOOP,#AR6-
	STM #NEXT_SECTION,AR0
	MAR AR4
	MAR *AR4+0
	MAR AR7
	BANZ BLOCKEN_LOOP0,*AR7-
;----------------------------
;恢复程序运行环境
;----------------------------

	LD #J_STACK,DP
	PSHD J_STACK+8
	MVMD J_STACK+5,AR5	
	MVMD J_STACK+4,AR4	
	MVMD J_STACK+3,AR3	
	MVMD J_STACK+2,AR2	
	MVMD J_STACK+1,AR1
	LD #0,DP
	MVMD J_STATUS+1,ST1
        MVMD J_STATUS,ST0
        RET
;--------------------------
;块编码初始化
;--------------------------
BLOCK_INIT;
	STM #NEXT_LINE,AR0
	MAR AR4
	RPT #7
	MVDK *AR4,#DCTB1
	MAR *AR4+0
	RPT #7
	MVDK *AR4+,#DCTB1+8
	MAR *AR4+0
	RPT #7
	MVDK *AR4+,#DCTB1+16
	MAR *AR4+0
	PRT #7	
	
	MVDK *AR4+,#DCTB1+24
	MAR *AR4+0
	RPT #7
        MVDK *AR4+,#DCTB1+32
	MAR *AR4+0
	RPT #7
        MVDK *AR4+,#DCTB1+40
	MAR *AR4+0
	RPT #7
        MVDK *AR4+,#DCTB1+48
	MAR *AR4+0
	RPT #7
        MVDK *AR4+,#DCTB1+56
	STM #NEXT_SECTION,AR0
	MAR *AR4-0
	MAR AR2
	STM #DCTB1,AR2
	STM #63,AR3
JI_LOOP:
	MAR AR2
	LD *AR2,A
	SUB #128,A
	STLM A,*AR2+
	MAR AR3
	BANZ JI_LOOP,*AR3-
	LD #RNDOFF,DP
	STM #800OH,RNDOFF
	RET
;----------------------------
;JPEG编码初始化
;包括DCT、量化和Huffman编码三部分
;-----------------------------
JPEG_EN_INIT:
DCT_INIT
	ORM #0000H,PMST
	RSBX OVLY
	SSBX SXM
	SSBX OVM
	MAR AR5
	STM #0FF00H,AR5
	RPT #63
	MVPD #DCT_COEF,*AR5+
	ORM #0020H,PMST
	SSBX OVLY
QUANT_INIT
	MAR AR5
	STM #QUANT_TABLE,AR5
	RPT #63
	MVPD #Y_QUANTIZE_TABLE,*AR5+
	STM #ZIGZAG_TABLE,AR5
	RPT #63
	MVPD #ZIGZAG_TABLE0,*AR5+
HUFFEN_INIT:
	STM #DCHUFF,AR1
	MAR AR1
	RPT #220
	MVPD #RDCHUFF,*AR1+
	STM #COMPRESS_DATA,AR1
	LD #0,A
	RPT #255
	STM 0,*AR1+
	STM #COMPRESS_DATA,AR5
	STM #PICT,AR4
	LD #DIFF,DP
	ST #0FFF0H,MASKDATA
	ST #0F000H,MASKSIZE
	ST #0AH,EOB
	ST #0H,LAST_DC
	ST #0H,LAST_RESULT
	ST #010H,USER_BIT
	ST #0H,LESS_BIT
	RET
;------------------------
;块编码
;------------------------
BLOCKEN.ASM
	.MMREGS
	.DEF BLOCK_ENCODE,IDCT
	.DEF RNDOFF,BLK2_ADDR,DCTB1
	.DEF QUANT_TABLE,ZIGZAG_TABLE
	.DEF B_STATUS,B_STACK
	.REF DCT_CODE,Y_QUANTIZE_TABLE
	.REF MAX_VALUE,MIN_VALUE
	.DEF DIFF,DIFF1,ABSDIFF,ABSDIFF1
	.DEF RZERO,IN_SIZE,COWORD,EOB
	.DEF MASKDATA,MASKSIZE
	.DEF SRC,DST,DC_TAIL,DC_HEAD
	.DEF ACHUFF,DCHUFF,LMASK
	.DEF QZBI,QZBR,LESS_BIT,DATA
	.DEF HUFF_EN,DCT2,EOB_SIZE
	.DEF DCHUFF,TRANSDIFF,LAST_DC
	.DEF LAST_RESULT,USER_BIT
	.REF RDCHUFF,DIFFSIZE
	.REF COMPRESS_DATA
	.REF ZIGZAG_TABLE0
 
	B_STACK		.USER".B_STACK",10H


RNDOFF		.USECT".DCT_VAR",1
DCTB1		.USECT"DCT_BLK",64
DCTB2		.USECT"DCT_BLK",64
QZBI		.USECT".QZ_BLK",64
QZBR		.USECT".QZ_BLK",64
QUANT_TABLE	.USECT".QZ_TBL",64
ZIGZAG_TABLE	.USECT".QZ_TBL",64
DIFF		.USECT".HUF_VAR",1
DIFF1		.USECT".HUF_VAR",1
ABSDIFF		.USECT".HUF_VAR",1
ABSDIFF1	.USECT".HUF_VAR",1
RZERO		.USECT".HUF_VAR",1
IN_SIZE		.USECT".HUF_VAR",1
COWORD		.USECT".HUF_VAR",1
TRANSDIFF	.USECT".HUF_VAR",1
MASKDATA	.USECT".HUF_VAR",1
MASKSIZE	.USECT".HUF_VAR",1
EOB		.USECT".HUF_VAR",1
LAST_DC		.USECT".HUF_VAR",1
LAST_RESULT	.USECT".HUF_VAR",1
USER_BIT	.USECT".HUF_VAR",1
LESS_BIT	.USECT".HUF_VAR",1
DC_HEAD		.USECT".HUF_VAR",1
DC TALL		.USECT".HUF_VAR",1
BLOCK_NUMBER	.USECT".HUF_VAR",1
SRC		.USECT".HUF_VAR",1
DST		.USECT".HUF_VAR",1
LENGTH		.USECT".HUF_VAR",1
DATA		.USECT".HUF_VAE",12R",1
DCHUFF		.USECT"HUFTABL
DIFFSIZE	.USECT"HUFTABLE",16
LMASK		.USECT"HUFTABLE",17
ACHUFF		.USECT"HUFTABLE",176
		.BSS B_STATUS,2
EOB_SIZE .SET 4
BLK2_ADDR.SET QZBR
	.TEXT
BLOCK_ENCODE
;----------------------------------
;保存程序运行环境
;----------------------------------
MVMD ST0,B_STATUS
MVMD ST1,B_STATUS+1
LD #B_STACK,DP
MVMD AR1,B_STACK
MVMD AR2,B_STACK+1
MVMD AR3,B_STACK+2
MVMD AR6,B_STACK+3
POPD B_STACK+4
;----------------------------------
;块编码包括DCT、量化和Huffman编码三部分
;----------------------------------
CALL DCT
CALL QUANT
CALL HUFF_EN
;----------------------------------
;恢复程序运行环境
;----------------------------------
LD #B_STACK,DP
PSHD B_STACK+4
MVDM B_STACK+3,AR6
MVDM B_STACK+2,AR3
MVDM B_STACK+1,AR2
MVDM B_STACK,AR1
LD #0,DP
MVDM B_STATUS+1,ST1
MVDM B_STATUS,ST0
RET
;-----------------------------------
;DCT与IDCT
;-----------------------------------
IDCT:
DCT:
	STM #DCTB1,AR1
	STM #DCTB2,AR2
	CALL DCT1D
	STM #DCTB2,AR1
	STM #DCTB1,AR2
	CALL DCT1D
	RET
;-----------------------------------
;一维DCT变换
;----------------------------------
DCT1D:
	STM #64,AR0
	LD #RNDOFF,DP
	MAR AR1
	STM #7,AR3
ROW1:
	MAR AR1
	LD #0,A
	RPT #7
	MACP *AR1+,0FF00H,A
	MAR AR2
	ADDS RNDOFF,A
	STH A,*AR2+
	MAR AR3
	BANZ ROW1,*AR3-
	MAR *AR1-0
	ST #7,AR3
ROW2:
	MAR AR1
	LD #0,A
	RPT #7
	MACP *AR1+,0FF08H,A
	MAR AR2
	ADDS RNDOFF,A
	STH A,*AR2+
	MAR AR3
	BANZ ROW2,*AR3-
	MAR *AR1-0
	ST #7,AR3
ROW3:
	MAR AR1
	LD #0,A
	RPT #7
	MACP *AR1+,0FF10H,A
	MAR AR2
	ADDS RNDOFF,A
	STH A,*AR2+
	MAR AR3
	BANZ ROW3,*AR3-
	MAR *AR1-0
	ST #7,AR3
ROW4:
	MAR AR1
	LD #0,A
	RPT #7
	MACP *AR1+,0FF18H,A
	MAR AR2
	ADDS RNDOFF,A
	STH A,*AR2+
	MAR AR3
	BANZ ROW4,*AR3-
	MAR *AR1-0
	ST #7,AR3
ROW5:
	MAR AR1
	LD #0,A
	RPT #7
	ADDS RNDOFF,A
	STH A,*AR2+
	MAR AR3
	BANZ ROW8,*AR3-
	MAR *AR1
	RET	
;------------------------
;量化
;注意ZIGZAG表的应用
;量化间隔是不均匀的
;------------------------
QUANT:
	STM #63,AR0
	STM #DCTB1,AR1
	STM #ZIGZAG_TABLE,AR2
	STM #QUANT_TABLE,AR6
Q_LOOP:
	MAR AR2
	MVDK *AR2+,AR3
	MAR AR1
	MVDK *AR1+,T
	MAR AR6
	MPY *AR6+,A
	ADD #0,1,A,A
	MAR AR3
	ADDS RNDOFF,A
	STH A,*AR3
	MAR AR0
	BANZ Q_LOOP,*AR0-
	RET
;------------------------
;Huffman编码
;------------------------
HUFF_EN:
		LD #DIFF,DP
		LD #0,A
		STL A,DIFF
		STL A,IN_SIZE
		STL A,RZERO
DCENHUFF:
		MAR AR1
		STM #QZBR,AR1
		LD *AR1,A
		SUB LAST_DC,A
		CALL GSIZE
		MAR AR3
		STM #DCHUFF,AR3
		MVDM ABSDIFF,AR0
		MAR *AR3+0
		LD *AR3-0,12,A
		MAR AR5
		CALL GCOWORD
ACENHUFF:
		STM #QZBR,AR1
		STM #3EH,AR6
		MAR AR1
		LD *AR1+,A
		STL A,LAST_DC
CHECKZERO:
		LD *AR1+,A
		MAR AR6
		BC CKZERO,AEQ
		CALL GSIZE
CONCHECK:
		LD RZERO.A
		SUB #10H,A
		BC NEXT1,ALT
		LTD ABSDIFF
		LTD DIFF
		STL A,RZERO
		LD #07F9BH,12,A
		STL A,4,ABSDIFF
		STL A,4,DIFF
		CALL GCOWORD
		LD ABSDIFF1,A
		STL A,ABSDIFF
		LD DIFF1,A
		B CONCHECK
NEXT1:
		RSBX SXM
		LD RZERO,A
		ADD ABSDIFF,4,A
		STL A,TRANSDIFF
		MAR AR3
		MVDM ACHUFF,AR3
		MVDM TRANSDIFF,AR0
		MAR *AR3+0
		BIT *AR3,15
		BC NOUSER_16,NTC
		BIT *AR3,7
		BC NOUSER_16,NTC
USER_16:
		LD *AR3-0,16,A
		B CONTE
NOUSER_16:
		LD *AR3-0,12,A
		MAR AR5
CONTE:
		MAR AR5
		CALL GCOWORD
		LD #0,A
		STL A,RZERO
		MAR AR6
		BANZ CHEKZERO,*ARC6-
		B INSERT_EOB
CKZERO:
		MAR AR6
		LD RZERO,A
		ADD #1H,A
		STL A,RZERO
		BANZ CHECKZERO,*AR6-
INSERT_EOB:
		MAR AR3
		STM ACHUFF,AR3
		LD *AR3,12,A
		STL A,4,ABSDIFF
		STL A,4,DIFF
		CALL GCOWORD
		RET
GSIZE:
		MAR AR2
		STL A,DIFF
		BITF DIFF,#8000H
		BC POSTIVE,NTC
NEGATIVE:
		ABS A
		CMPL A
		STL A,DIFF
		CMPL A
POSTIVE:
		STL A,ABSDIFF
		AND MASKDATA,A
		MAR AR2
		BC GETSIZE,AEQ
		LD ABSDIFF,12,A
		STH A,ABSDIFF
		LDU IN_SIZE,A
		ADD #04H,A
		STL A,IN_SIZE
		LDU ABSDIFF,A
		B POSTIVE
GETSIZE:
		MAR AR2
		STM DIFFSIZE,AR2
		STM ABSDIFF,AR0
		LD *AR2+0,A
		ADD IN_SIZE,A
		STL A,ABSDIFF
		STH A,IN_SIZE
		STM LMASK,AR2
		STM ABSDIFF,AR0
		LD *AR2+0,A
		AND DIFF,A
		RET
GCOWORD:
		MAR AR5
		STH A,COWORD
		AND MASKSIZE,A
		BC NOT_16,ANEQ
		ADD #10,12,A
NOT_16:
		SUB USER_BIT,12,A
		NEG A
		STH A,4,USER_BIT
		BC SHIFT_LT,AGT
NEWORDL:
		LD USER_BIT,A
		ADD #10H,A
		STL A,USER_BIT
		LD USER_BIT,T
		LD *AR5,16,A
		ADD COWORD,TS,A
		STH A,*AR5+
		STL A,*AR5
		B CONDIFF
SHIFT_LT:
		LD USER_BIT,T
		LD *AR5,A
		ADD COWORD,TS,A
		STL A,*AR5
CONDIFF:
		LD USER_BIT,A
		SUB ABSDIFF,A
		STL A,USER_BIT
		BC NORMALS,AGT
NEWORD2:
		ADD #10H,A
		STL A,USER_BIT
		LD USER_BIT,T
		LD *AR5,16,A
		ADD DIFF,TS,A
		STH A,*AR5+
		STL A,*AR5
		B ENDSUB

NORMALS:
		LD USER_BIT,T
		LD *AR5,A
		ADD DIFF,TS,A
		STL A,*AR5
ENDSUB:
		SSBX SXM
		RET
;-----------------------
;JPEG编码
;-----------------------
JPEGDE.ASM
		.MMREGS
		.DEF JPEG_DEC
		.REF PICT,NEXT_SECTION,NEXT_LINE
		.REF IMAGE_LENGTH,IMAGE_WIDTH
		.REF BLOCK_DECODE,DCTB1
		.REF ZIGZAG_TABLE1,IDCT_COEF
		.REF J_STATUS,J_STACK,D12TAB
		.REF Y_DQUANTIZE_TABLE
		.REF RD48TAB,RD12TAB,LOWMASK
		.REF HDCDECODE_TABLE,DCDETAB
		.REF DZIGZAG_TABLE,DETABLE
		.REF DC_TAIL,DATA,LESS_BIT
		.REF DQZBR,DQZB1,DQUANT_TABLE
		.REF EMASK,COMPRESS_DATA,DST
		.REF MASKDATA,MASKSIZE,EOB
		.REF LASTRESULT,USER_BIT
		.REF LAST_DC
		
		BLOCK_RESULT .SET DCTB1
					.TEXT
JPEG_DEC:
;--------------------------------
;保存程序运行环境
;--------------------------------
		MVMD ST0,J_STATUS
		MVMD ST1,J_STATUS+1
		LD #J_STACK,DP
		MVMD AR1,J_STACK+1
		MVMD AR2,J_STACK+2
		MVMD AR3,J_STACK+3
		MVMD AR4,J_STACK+4
		MVMD AR5,J_STACK+5
		MVMD AR6,J_STACK+6
		MVMD AR7,J_STACK+7
		POPD J_STACK+8
;--------------------------------
;JPEG解码初始化
;--------------------------------
	CALL JPEG_DEC-INIT
	STM #IMAGE_WIDTH-1,AR7
BLOCKDE_LOOP0:
	STM #IMAGE_LENGTH-1,AR6
BLOCKDE_LOOP:
;--------------------------------
;块解码
;--------------------------------
	CALL BLOCK_DECODE
	CALL BLOCK_ASSEMBLE
	MAR AR6
	BANZ BLOCKDE_LOOP,*AR6-
	STM #NEXT_SECTION,AR0

⌨️ 快捷键说明

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