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

📄 mmxmem.asm

📁 这是G.723和G.729的音频编解码的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		short *Data,
		int pixel);
^


MMXStoreBlock PROC NEAR C USES ESI EDI EAX EBX ECX EDX,
			Loss: PTR BYTE, Data: PTR SWORD,
			pixel: DWORD

		mov		esi,	Data
		mov		edi,	Loss
		mov		eax,	pixel

		mov		ebx,	eax
		mov		ecx,	eax

		add		ebx,	eax
		add		ecx,	eax

		mov		edx,	ebx
		add		ecx,	eax

		add		edx,	edx

		movq	mm0,	[esi]
		movq	mm1,	[esi+8]

		movq	mm2,	[esi+16]
		movq	mm3,	[esi+24]
		packuswb mm0,	mm1

		movq	mm4,	[esi+32]
		movq	mm5,	[esi+40]
		packuswb mm2,	mm3
		movq	[edi],	mm0

		movq	mm6,	[esi+48]
		movq	mm7,	[esi+56]
		packuswb mm4,	mm5
		movq	[edi+eax],mm2

		movq	mm0,	[esi+64]
		movq	mm1,	[esi+72]
		packuswb mm6,	mm7
		movq	[edi+ebx],mm4


		movq	mm2,	[esi+80]
		movq	mm3,	[esi+88]
		packuswb mm0,	mm1
		movq	[edi+ecx],	mm6

		movq	mm4,	[esi+96]
		movq	mm5,	[esi+104]
		packuswb mm2,	mm3
		movq	[edi+edx],mm0
		add		edi,	edx

		movq	mm6,	[esi+112]
		movq	mm7,	[esi+120]
		packuswb mm4,	mm5
		movq	[edi+eax],mm2
		packuswb mm6,	mm7
		movq	[edi+ebx],mm4
		movq	[edi+ecx],mm6


		emms
		ret
MMXStoreBlock ENDP



COMMENT ^
	void MMXFillBlock(
		BYTE *Src,
		short *Data,
		int pixel);
^


MMXFillBlock PROC NEAR C USES ESI EDI EAX EBX,
			Src: PTR BYTE, Data: PTR SWORD,
			pixel: DWORD

		mov		esi,	Src
		mov		edi,	Data
		mov		eax,	pixel

		mov		ebx,	eax
		add		ebx,	eax
		add		ebx,	eax
		pxor	mm7,	mm7

		
		movq	mm0,	[esi]

		movq	mm2,	[esi+eax]
		movq	mm1,	mm0

		movq	mm3,	mm2
		punpcklbw mm0,	mm7

		movq	mm4,	[esi+2*eax]
		punpckhbw mm1,	mm7

		punpcklbw mm2,	mm7
		add		esi,	ebx

		movq	[edi],	mm0
		movq	mm5,	mm4

		movq	[edi+8],mm1
		punpckhbw mm3,	mm7

		movq	[edi+16],mm2
		punpcklbw mm4,	mm7

		movq	mm0,	[esi]
		punpckhbw mm5,	mm7

		movq	[edi+24],mm3
		movq	mm1,	mm0

		movq	mm2,	[esi+eax]
		punpcklbw mm0,	mm7

		movq	[edi+32],mm4
		punpckhbw mm1,	mm7

		movq	[edi+40],mm5
		movq	mm3,	mm2


		movq	[edi+48],mm0
		punpcklbw mm2,	mm7

		movq	mm4,	[esi+2*eax]
		punpckhbw mm3,	mm7

		movq	[edi+56],mm1
		movq	mm5,	mm4

		punpcklbw mm4,	mm7
		add		esi,	ebx

		movq	mm0,	[esi]
		punpckhbw mm5,	mm7

		movq	[edi+64],mm2
		movq	mm1,	mm0
		movq	[edi+72],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+eax]
		punpckhbw mm1,	mm7

		movq	[edi+80],mm4
		movq	mm3,	mm2
		movq	[edi+88],mm5
		punpcklbw mm2,	mm7


		movq	[edi+96],mm0
		punpckhbw mm3,	mm7
		movq	[edi+104],mm1


		movq	[edi+112],mm2
		movq	[edi+120],mm3


		emms
		ret
MMXFillBlock ENDP


COMMENT ^
	void MMXFillMB(
		BYTE *Src,
		short *Data,
		int pixel);
^


MMXFillMB PROC NEAR C USES ESI EDI EAX EBX,
			Src: PTR BYTE, Data: PTR SWORD,
			pixel: DWORD

		mov		esi,	Src
		mov		edi,	Data
		mov		eax,	pixel

		mov		ebx,	eax
		add		ebx,	eax
		add		ebx,	eax
		pxor	mm7,	mm7


		movq	mm0,	[esi]

		movq	mm2,	[esi+8]
		movq	mm1,	mm0

		movq	mm3,	mm2
		punpcklbw mm0,	mm7

		movq	mm4,	[esi+eax]
		punpckhbw mm1,	mm7

		punpcklbw mm2,	mm7
		movq	mm5,	mm4

		movq	[edi],mm0
		punpckhbw mm3,	mm7

		movq	[edi+8],mm1
		punpcklbw mm4,	mm7

		movq	mm0,	[esi+eax+8]
		punpckhbw mm5,	mm7

		movq	[edi+16],mm2
		movq	mm1,	mm0
		movq	[edi+24],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+2*eax]
		punpckhbw mm1,	mm7

		movq	[edi+32],mm4
		movq	mm3,	mm2
		movq	[edi+40],mm5
		punpcklbw mm2,	mm7


		movq	mm4,	[esi+2*eax+8]
		punpckhbw mm3,	mm7

		add		esi,	ebx
		movq	mm5,	mm4
		movq	[edi+48],mm0
		punpcklbw mm4,	mm7

		movq	[edi+56],mm1
		punpckhbw mm5,	mm7

		movq	mm0,	[esi]

		movq	[edi+64],mm2
		movq	mm1,	mm0
		movq	[edi+72],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+8]
		punpckhbw mm1,	mm7
		movq	[edi+80],mm4
		movq	mm3,	mm2
		movq	[edi+88],mm5
		punpcklbw mm2,	mm7


		movq	mm4,	[esi+eax]
		punpckhbw mm3,	mm7

		movq	[edi+96],mm0
		movq	mm5,	mm4
		movq	[edi+104],mm1
		punpcklbw mm4,	mm7

		movq	mm0,	[esi+eax+8]
		punpckhbw mm5,	mm7
		movq	[edi+112],mm2
		movq	mm1,	mm0
		movq	[edi+120],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+2*eax]
		punpckhbw mm1,	mm7
		movq	[edi+128],mm4
		movq	mm3,	mm2
		movq	[edi+136],mm5
		punpcklbw mm2,	mm7


		movq	mm4,	[esi+2*eax+8]
		punpckhbw mm3,	mm7

		add		esi,	ebx
		movq	mm5,	mm4
		movq	[edi+144],mm0
		punpcklbw mm4,	mm7

		movq	[edi+152],mm1
		punpckhbw mm5,	mm7


		movq	mm0,	[esi]

		movq	[edi+160],mm2
		movq	mm1,	mm0
		movq	[edi+168],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+8]
		punpckhbw mm1,	mm7
		movq	[edi+176],mm4
		movq	mm3,	mm2
		movq	[edi+184],mm5
		punpcklbw mm2,	mm7


		movq	mm4,	[esi+eax]
		punpckhbw mm3,	mm7

		movq	[edi+192],mm0
		movq	mm5,	mm4
		movq	[edi+200],mm1
		punpcklbw mm4,	mm7

		movq	mm0,	[esi+eax+8]
		punpckhbw mm5,	mm7
		movq	[edi+208],mm2
		movq	mm1,	mm0
		movq	[edi+216],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+2*eax]
		punpckhbw mm1,	mm7
		movq	[edi+224],mm4
		movq	mm3,	mm2
		movq	[edi+232],mm5
		punpcklbw mm2,	mm7

		movq	mm4,	[esi+2*eax+8]
		punpckhbw mm3,	mm7
		movq	mm5,	mm4
		add		esi,	ebx

		movq	[edi+240],mm0
		punpcklbw mm4,	mm7
		movq	[edi+248],mm1
		punpckhbw mm5,	mm7

		movq	mm0,	[esi]

		movq	[edi+256],mm2
		movq	mm1,	mm0
		movq	[edi+264],mm3
		punpcklbw mm0,	mm7
		movq	mm2,	[esi+8]
		punpckhbw mm1,	mm7

		movq	[edi+272],mm4
		movq	mm3,	mm2
		movq	[edi+280],mm5
		punpcklbw mm2,	mm7

		movq	mm4,	[esi+eax]
		punpckhbw mm3,	mm7


		movq	[edi+288],mm0
		movq	mm5,	mm4
		movq	[edi+296],mm1
		punpcklbw mm4,	mm7

		movq	mm0,	[esi+eax+8]
		punpckhbw mm5,	mm7
		movq	[edi+304],mm2
		movq	mm1,	mm0
		movq	[edi+312],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+2*eax]
		punpckhbw mm1,	mm7
		movq	[edi+320],mm4
		movq	mm3,	mm2
		movq	[edi+328],mm5
		punpcklbw mm2,	mm7

		movq	mm4,	[esi+2*eax+8]
		punpckhbw mm3,	mm7
		movq	mm5,	mm4
		add		esi,	ebx
		movq	[edi+336],mm0
		punpcklbw mm4,	mm7
		movq	[edi+344],mm1
		punpckhbw mm5,	mm7

		movq	mm0,	[esi]
		movq	[edi+352],mm2
		movq	mm1,	mm0
		movq	[edi+360],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+8]
		punpckhbw mm1,	mm7
		movq	[edi+368],mm4
		movq	mm3,	mm2
		movq	[edi+376],mm5
		punpcklbw mm2,	mm7

		movq	mm4,	[esi+eax]
		punpckhbw mm3,	mm7



		movq	[edi+384],mm0
		movq	mm5,	mm4
		movq	[edi+392],mm1
		punpcklbw mm4,	mm7

		movq	mm0,	[esi+eax+8]
		punpckhbw mm5,	mm7
		movq	[edi+400],mm2
		movq	mm1,	mm0
		movq	[edi+408],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+2*eax]
		punpckhbw mm1,	mm7
		movq	[edi+416],mm4
		movq	mm3,	mm2
		movq	[edi+424],mm5
		punpcklbw mm2,	mm7

		movq	mm4,	[esi+2*eax+8]
		punpckhbw mm3,	mm7
		movq	mm5,	mm4
		add		esi,	ebx
		movq	[edi+432],mm0
		punpcklbw mm4,	mm7
		movq	[edi+440],mm1
		punpckhbw mm5,	mm7

		movq	mm0,	[esi]
		movq	[edi+448],mm2
		movq	mm1,	mm0
		movq	[edi+456],mm3
		punpcklbw mm0,	mm7

		movq	mm2,	[esi+8]
		punpckhbw mm1,	mm7
		movq	[edi+464],mm4
		movq	mm3,	mm2
		movq	[edi+472],mm5
		punpcklbw mm2,	mm7




		movq	[edi+480],mm0
		punpckhbw mm3,	mm7
		movq	[edi+488],mm1

		movq	[edi+496],mm2
		movq	[edi+504],mm3


		emms
		ret

MMXFillMB ENDP


COMMENT ^
	 void MMXTransFomeMB(
		short *Data,
		short *MBPtr);
^

MMXTransFromMB PROC NEAR C USES ESI EDI,
			Data: PTR SWORD,MBPtr:PTR SWORD


		mov		esi,	MBPtr
		mov		edi,	Data


		movq	mm0,	[esi]
		movq	mm1,	[esi+8]

		movq	mm2,	[esi+32]
		movq	mm3,	[esi+40]

		movq	[edi],	mm0
		movq	[edi+8],mm1

		movq	mm4,	[esi+64]
		movq	mm5,	[esi+72]



		movq	[edi+16],	mm2
		movq	[edi+24],	mm3


		movq	mm6,	[esi+96]
		movq	mm7,	[esi+104]


		movq	[edi+32],	mm4
		movq	[edi+40],	mm5

		movq	mm0,	[esi+128]
		movq	mm1,	[esi+136]



		movq	[edi+48],	mm6
		movq	[edi+56],	mm7

		movq	mm2,	[esi+160]
		movq	mm3,	[esi+168]


		movq	[edi+64],	mm0
		movq	[edi+72],mm1


		movq	mm4,	[esi+192]
		movq	mm5,	[esi+200]


		movq	[edi+80],	mm2
		movq	[edi+88],mm3

		movq	mm6,	[esi+224]
		movq	mm7,	[esi+232]


		movq	[edi+96],	mm4
		movq	[edi+104],mm5




		movq	[edi+112],	mm6
		movq	[edi+120],mm7

		emms
		ret
MMXTransFromMB ENDP

END


		
		
		

⌨️ 快捷键说明

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