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

📄 mmxrecon.asm

📁 这是G.723和G.729的音频编解码的源代码
💻 ASM
字号:
.nolist
INCLUDE iammx.inc                   ; IAMMX Emulator Macros
.list

.586p
.model FLAT

.data
ALIGN 8

ByteOne		DQ	0101010101010101h
AndMask1	DQ  0FEFEFEFEFEFEFEFEh

.const 

.code

COMMENT ^
	 void MMXReconBlock(
		BYTE *Select,
		BYTE *Source,
		short *Data,
		int pixel);
^

MMXReconBlock PROC NEAR C USES ESI EDI EAX EDX,
            Select:PTR BYTE,Source:PTR BYTE,Data: PTR SWORD,
			pixel:DWORD

		mov		esi,	Source
		mov		edx,	Data
		mov		edi,	Select
		mov		eax,	pixel

		movq	mm0,	[esi]	
		pxor	mm7,	mm7
			
		movq	mm5,	[edx]
		movq	mm1,	mm0

		movq	mm6,	[edx+8]
		punpcklbw mm0,	mm7

		punpckhbw mm1,	mm7
		paddw	mm0,	mm5

		movq	mm2,	[esi+8]	
		paddw	mm1,	mm6

		packuswb mm0,	mm1
		movq	mm6,	mm2

		movq	mm3,	[edx+16]
		punpcklbw mm6,	mm7
		movq	mm4,	[edx+24]
		punpckhbw mm2,	mm7
			
		movq	[edi],	mm0
		paddw	mm6,	mm3

		add		edi,	eax
		paddw	mm2,	mm4

		movq	mm0,	[esi+16]	
		packuswb mm6,	mm2

		movq	mm5,	[edx+32]
		movq	mm1,	mm0

		movq	mm4,	[edx+40]
		punpcklbw mm0,	mm7

		movq	[edi],	mm6
		punpckhbw mm1,	mm7
		add		edi,	eax
		paddw	mm0,	mm5

		movq	mm2,	[esi+24]		
		paddw	mm1,	mm4

		movq	mm6,	mm2
		packuswb mm0,	mm1

		movq	mm3,	[edx+48]
		punpcklbw mm6,	mm7

		movq	mm4,	[edx+56]
		punpckhbw mm2,	mm7

		movq	[edi],	mm0
		paddw	mm6,	mm3

		add		edi,	eax
		paddw	mm2,	mm4

		movq	mm0,	[esi+32]	
		packuswb mm6,	mm2

		movq	mm5,	[edx+64]
		movq	mm1,	mm0

		movq	mm3,	[edx+72]
		punpcklbw mm0,	mm7

		movq	[edi],	mm6
		punpckhbw mm1,	mm7
		add		edi,	eax
		paddw	mm0,	mm5


		movq	mm2,	[esi+40]		
		paddw	mm1,	mm3
			
		packuswb mm0,	mm1
		movq	mm6,	mm2

		movq	mm3,	[edx+80]
		punpcklbw mm6,	mm7

		movq	mm4,	[edx+88]
		punpckhbw mm2,	mm7

		movq	[edi],	mm0
		paddw	mm6,	mm3
		add		edi,	eax
		paddw	mm2,	mm4

		movq	mm0,	[esi+48]	
		packuswb mm6,	mm2

		movq	mm5,	[edx+96]
		movq	mm1,	mm0

		movq	mm3,	[edx+104]
		punpcklbw mm0,	mm7

		movq	[edi],	mm6
		punpckhbw mm1,	mm7
		add		edi,	eax
		paddw	mm0,	mm5

		movq	mm2,	[esi+56]		
		paddw	mm1,	mm3

		movq	mm6,	mm2
		packuswb mm0,	mm1

		movq	mm3,	[edx+112]
		punpcklbw mm6,	mm7
		movq	mm4,	[edx+120]
		punpckhbw mm2,	mm7

		movq	[edi],	mm0
		paddw	mm6,	mm3
		add		edi,	eax
		paddw	mm2,	mm4

		packuswb mm6,	mm2
		movq	[edi],	mm6

		emms
		ret
MMXReconBlock ENDP




COMMENT ^
	 void MMXReconMB(
		BYTE *Select,
		BYTE *Source,
		short *Data,
		int pixel);
^

MMXReconMB PROC NEAR C USES ESI EDI EAX ECX EDX,
            Select:PTR BYTE,Source:PTR BYTE,Data: PTR SWORD,
			pixel:DWORD

		mov		esi,	Source
		mov		edx,	Data
		mov		edi,	Select
		mov		eax,	pixel
		mov		ecx,	16

		movq	mm0,	[esi]
		pxor	mm7,	mm7
		movq	mm5,	[edx]
		movq	mm1,	mm0

LINE:
		movq	mm6,	[edx+8]
		punpcklbw mm0,	mm7

		punpckhbw mm1,	mm7
		paddw	mm0,	mm5

		movq	mm2,	[esi+8]
		paddw	mm1,	mm6

		movq	mm6,	mm2
		packuswb	mm0,mm1

		movq	mm3,	[edx+16]
		punpcklbw mm2,	mm7

		movq	mm4,	[edx+24]
		punpckhbw mm6,	mm7

		movq	[edi],	mm0
		paddw	mm2,	mm3

		add		esi,	16
		paddw	mm6,	mm4

		add		edx,	32
		packuswb	mm2,mm6

		movq	mm0,	[esi]
		movq	mm5,	[edx]
		movq	mm1,	mm0

		movq	[edi+8],mm2
		add		edi,	eax
		dec		ecx
		jnz		LINE

		emms
		ret
MMXReconMB ENDP




COMMENT ^
	 void MMXReconAPBlock(
		BYTE *Select,
		BYTE *Source,
		short *Data,
		int pixel);
^

MMXReconAPBlock PROC NEAR C USES ESI EDI EAX EDX,
            Select:PTR BYTE,Source:PTR BYTE,Data: PTR SWORD,
			pixel:DWORD

		mov		esi,	Source
		mov		edx,	Data
		mov		edi,	Select
		mov		eax,	pixel

		movq	mm0,	[esi]	
		pxor	mm7,	mm7

		
		movq	mm5,	[edx]
		movq	mm1,	mm0

		movq	mm6,	[edx+8]
		punpcklbw mm0,	mm7

		punpckhbw mm1,	mm7
		paddw	mm0,	mm5

		movq	mm2,	[esi+8]	
		paddw	mm1,	mm6

		packuswb mm0,	mm1
		movq	mm6,	mm2

		movq	mm3,	[edx+32]
		punpcklbw mm6,	mm7
		movq	mm4,	[edx+40]
		punpckhbw mm2,	mm7
			
		movq	[edi],	mm0
		paddw	mm6,	mm3

		add		edi,	eax
		paddw	mm2,	mm4

		movq	mm0,	[esi+16]	
		packuswb mm6,	mm2

		movq	mm5,	[edx+64]
		movq	mm1,	mm0

		movq	mm4,	[edx+72]
		punpcklbw mm0,	mm7

		movq	[edi],	mm6
		punpckhbw mm1,	mm7
		add		edi,	eax
		paddw	mm0,	mm5

		movq	mm2,	[esi+24]		
		paddw	mm1,	mm4

		movq	mm6,	mm2
		packuswb mm0,	mm1

		movq	mm3,	[edx+96]
		punpcklbw mm6,	mm7

		movq	mm4,	[edx+104]
		punpckhbw mm2,	mm7

		movq	[edi],	mm0
		paddw	mm6,	mm3

		add		edi,	eax
		paddw	mm2,	mm4

		movq	mm0,	[esi+32]	
		packuswb mm6,	mm2

		movq	mm5,	[edx+128]
		movq	mm1,	mm0

		movq	mm3,	[edx+136]
		punpcklbw mm0,	mm7

		movq	[edi],	mm6
		punpckhbw mm1,	mm7
		add		edi,	eax
		paddw	mm0,	mm5


		movq	mm2,	[esi+40]		
		paddw	mm1,	mm3
			
		packuswb mm0,	mm1
		movq	mm6,	mm2

		movq	mm3,	[edx+160]
		punpcklbw mm6,	mm7

		movq	mm4,	[edx+168]
		punpckhbw mm2,	mm7

		movq	[edi],	mm0
		paddw	mm6,	mm3
		add		edi,	eax
		paddw	mm2,	mm4

		movq	mm0,	[esi+48]	
		packuswb mm6,	mm2

		movq	mm5,	[edx+192]
		movq	mm1,	mm0

		movq	mm3,	[edx+200]
		punpcklbw mm0,	mm7

		movq	[edi],	mm6
		punpckhbw mm1,	mm7
		add		edi,	eax
		paddw	mm0,	mm5

		movq	mm2,	[esi+56]		
		paddw	mm1,	mm3

		movq	mm6,	mm2
		packuswb mm0,	mm1

		movq	mm3,	[edx+224]
		punpcklbw mm6,	mm7
		movq	mm4,	[edx+232]
		punpckhbw mm2,	mm7

		movq	[edi],	mm0
		paddw	mm6,	mm3
		add		edi,	eax
		paddw	mm2,	mm4

		packuswb mm6,	mm2
		movq	[edi],	mm6

		emms
		ret

MMXReconAPBlock ENDP

END

⌨️ 快捷键说明

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