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

📄 yuvtorgb.asm

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

.586p
.model FLAT

.data
ALIGN 8

UVOff	DQ	00080008000800080h

UVCoe1	DQ	0E9FAD24C4B570000h
;Coeff of convert U V to G-Y B-Y
;-0.34414  -0.71414   1.1772  0
;        G-Y			   B-Y 

UVCoe2	DQ	04B570000000059BAh
;Coeff of convert U V to B-Y R-Y
;1.1772   0			  0		  1.402
;        B-Y			   R-Y 

UVCoe3	DQ	059BAE9FAD24Ch
;Coeff of convert U V to R-Y G-Y
;0		  1.402       -0.34414 -0.71414
;        R-Y			   G-Y 

AndMask1 DQ	0FFFFFFFFFFFFh
AndMask2 DQ 0FFFFFFFFh
AndMask3 DQ 0FFFF000000000000h
AndMask4 DQ 0FFFFh
AndMask5 DQ 0FFFFFFFF00000000h
AndMask6 DQ 0FFFFFFFFFFFF0000h


.const


.code


COMMENT ^
void YUVRGBTwoLine (
    BYTE *Y,
	BYTE *U,
	BYTE *V,
	BYTE *RGB,
	int Pixel,
	BYTE *LTemp
	);
^
;
; X    X  X    X  X    X  X    X
;   U0      U1      U2      U3
;   V0	    V1      V2	    V3
; Y00 Y01 Y10 Y11 Y20 Y21 Y30 Y31 
; Y02 Y03 Y12 Y13 Y22 Y23 Y32 Y33
; X    X  X    X  X    X  X    X
;
;
YUVRGBTwoLine PROC NEAR C USES ESI EDI EAX EBX ECX EDX,
            Y:PTR BYTE,U:PTR BYTE,V:PTR BYTE,RGB:PTR BYTE,
            Pixel:DWORD,LTemp: PTR BYTE
; above (commented) line is an example of declaring local parameters

	mov			ebx,	Pixel

	mov			esi,	U
	mov			edx,	ebx

	xor			eax,	eax
	mov			ecx,	ebx

	mov			edi,	V
	add			edx,	ebx

	add			edx,	ebx

LINELOOP:
	movq		mm0,	[esi+eax]		;U Pipe
	pxor		mm7,	mm7			;V

	movq		mm1,	[edi+eax]		;U
	punpcklbw	mm0,	mm7			;V

	psubw		mm0,dword ptr UVOff	;U
	punpcklbw	mm1,	mm7			;V

	psubw		mm1,dword ptr UVOff	;U
;mm0--U3-128 U2-128 U1-128 U0-128
;mm1--V3-128 V2-128 V1-128 V0-128

	movq		mm2,	mm0			;V

	movq		mm3,	mm1			;U
	punpcklwd	mm3,	mm2			;U
	
	movq		mm5,	mm3			;U
	movq		mm4,	mm3			;V
	
	pmaddwd	mm4,dword ptr UVCoe2	;U
	punpckldq	mm3,	mm3			;V
	
	pmaddwd	mm3,dword ptr UVCoe1	;U
	punpckhdq	mm5,	mm5			;V
	
	pmaddwd	mm5,dword ptr UVCoe3	;U
	movq		mm2,	mm0			;V

	psrad		mm4,	14			;U
	movq		mm6,	mm1			;V

	punpckhwd	mm6,	mm2			;U

	psrad		mm3,	14			;U
	movq		mm7,	mm6			;V

	mov			edi,	LTemp
	punpckhdq	mm7,	mm7			;V

	pmaddwd	mm7,dword ptr UVCoe3	;U
	packssdw	mm3,	mm4			;V
	psrad		mm5,	14			;U
;mm3--B1-Y R0-Y G0-Y B0-Y
;mm5--   R1-Y     G1-Y

	movq		mm4,	mm6			;V
	pmaddwd	mm4,dword ptr UVCoe2	;U
	punpckldq	mm6,	mm6			;V
	pmaddwd	mm6,dword ptr UVCoe1	;U
	movq		mm2,	mm3			;V

	movq		[edi+56],mm3		;U
	psrad		mm7,	14			;V
	pand		mm3,dword ptr AndMask1;U
	psrad		mm4,	14			;V

	psrad		mm6,	14			;U			
	packssdw	mm5,	mm6			;U

	psllq		mm2,	48			;U
	packssdw	mm4,	mm7			;U

;mm3--B1-Y R0-Y G0-Y B0-Y
;mm5--G2-Y B2-Y R1-Y G1-Y
;mm4--R3-Y G3-Y B3-Y R2-Y
		
	por			mm3,	mm2			;V
	movq		[edi+48],mm5		;U
	movq		mm2,	mm3			;V

	psrlq		mm2,	16			;U
	movq		mm6,	mm2			;U

	pand		mm6,dword ptr AndMask2;U
;mm6--B0-Y R0-Y G0-Y B0-Y
;mm3--  0    0  R0-Y G0-Y
	
	movq		mm2,	[edi+56]	;U
	psllq		mm5,	32			;V
	
	pand		mm2,	dword ptr AndMask3;U
	mov			esi,	Y
	psrlq		mm2,	32			;V

	movq		[edi],	mm3			;U
	por			mm5,	mm2			;V

	movq		mm7,	mm5			;U
	movq		mm2,	mm5			;V
	add			esi,	ebx
	psrlq		mm2,	48			;V

	sub			esi,	ecx
	por			mm5,	mm2			;V



	movq		mm2,	[edi+48]	;U
	psllq		mm7,	16			;V
	psrlq		mm2,	32			;U
	por			mm6,	mm7			;V
;mm6--B0-Y R0-Y G0-Y B0-Y
;mm3--G1-Y B1-Y R0-Y G0-Y
;mm5--R1-Y G1-Y B1-Y R1-Y	

	movq		[edi+16],mm5		;U
	movq		mm5,	mm4			;V

	pand		mm5,	dword ptr AndMask4;U
	movq		[edi+8],mm6			;U
	psllq		mm5,	32			;V

	por			mm2,	mm5			;U
	movq		mm6,	mm4			;V
	movq		mm5,	mm2			;U
	psllq		mm6,	16			;V
	movq		mm3,	mm2			;U
	psllq		mm5,	48			;V
	pand		mm6,	dword ptr AndMask5;U
	psrlq		mm3,	16			;V
	por			mm2,	mm5			;U
	por			mm3,	mm6			;V
;mm2--B2-Y R2-Y G2-Y B2-Y
;mm3--G3-Y B3-Y R2-Y G2-Y
	movq		mm0,	[esi]		;U
	movq		mm5,	mm4			;V
	pand		mm4,	dword ptr AndMask6;U
	psrlq		mm5,	48			;V
	movq		[edi+24],mm2		;U
	por			mm4,	mm5			;V
;mm4--R3-Y G3-Y B3-Y R3-Y

	movq		[edi+32],mm3		;U
	pxor		mm5,	mm5			;V

	mov			esi,	RGB
	movq		mm1,	mm0			;V


	movq		[edi+40],mm4		;U
	punpcklbw	mm1,	mm5			;V

;[LTemp]   --B0-Y R0-Y G0-Y B0-Y
;[LTemp+8] --G1-Y B1-Y R0-Y G0-Y
;[LTemp+16]--R1-Y G1-Y B1-Y R1-Y	
;[LTemp+24]--B2-Y R2-Y G2-Y B2-Y
;[LTemp+32]--G3-Y B3-Y R2-Y G2-Y
;[LTemp+40]--R3-Y G3-Y B3-Y R3-Y
;mm0--Y31 Y30 Y21 Y20 Y11 Y10 Y01 Y00
;mm1--   Y11     Y10     Y01     Y00

	movq		mm2,	mm1			;U
	add			esi,	edx

	pxor		mm7,	mm7			;U
	sub			esi,	ecx

	movq		mm3,	mm2			;U
	sub			esi,	ecx

	punpckhbw	mm0,	mm7			;U
	sub			esi,	ecx

	punpcklwd	mm2,	mm2			;U
;mm2--Y01  Y01  Y00  Y00

	punpckldq	mm2,	mm2			;U
	movq		mm7,	mm0			;V

	pand		mm2,dword ptr AndMask1;U
	psrlq		mm3,	32			;V
;mm3--0  0  Y01  Y01
;mm2--Y00 Y00 Y00 Y00
	movq		mm4,	mm3			;U
	punpcklwd	mm7,	mm7			;V

	psllq		mm4,	48			;U
	movq		mm6,	mm7			;V
	por			mm2,	mm4			;U
	psrlq		mm6,	32			;V
;mm2--Y01 Y00 Y00 Y00

	movq		mm4,	mm1			;U
	punpckldq	mm7,	mm7			;V

	punpckhwd	mm4,	mm4			;U
	movq		mm1,	mm6			;V
;mm4--Y11  Y11  Y10  Y10
	psllq		mm1,	48			;U
	movq		mm5,	mm4			;V
	pand		mm7,dword ptr AndMask1;U
	psllq		mm5,	32			;V
	por			mm3,	mm5			;U
;mm3--Y10  Y10  Y01  Y01
	punpckhdq	mm4,	mm4			;V
	pand		mm4,	dword ptr AndMask6;U
;mm4--Y11  Y11  Y11  0
	psrlq		mm5,	48			;V
	paddw		mm2,	[edi]		;U
	por			mm4,	mm5			;V
;mm4--Y11  Y11  Y11  Y10


	paddw		mm3,	[edi+8]		;U
	por			mm7,	mm1			;V
	packuswb	mm2,	mm3			;U
	movq		mm5,	mm0			;V
	paddw		mm4,	[edi+16]	;U
	punpckhwd	mm5,	mm5			;V


	paddw		mm7,	[edi+24]	;U
	movq		mm1,	mm5			;V



	movq		[esi],	mm2			;U
	psllq		mm1,	32			;V

	
;mm0--Y31  Y30  Y21  Y20
	


;mm7--Y21  Y21  Y20  Y20
;mm6--0  0  Y21  Y21
;mm7--Y20 Y20 Y20 Y20
;mm7--Y21 Y20 Y20 Y20

;mm5--Y31  Y31  Y30  Y30
	por			mm6,	mm1			;U
	punpckhdq	mm5,	mm5			;V
	pand		mm5,	dword ptr AndMask6;U
;mm5--Y31  Y31  Y31  0
	psrlq		mm1,	48			;V
	por			mm5,	mm1			;U
	packuswb	mm4,	mm7			;V
;mm5--Y31  Y31  Y31  Y30

	
	paddw		mm6,	[edi+32]	;U
	pxor		mm7,	mm7			;V

	paddw		mm5,	[edi+40]	;U


	movq		[esi+8],mm4			;U
	packuswb	mm6,	mm5			;V
	movq		[esi+16],mm6		;U



	mov			esi,	Y
	add			esi,	ebx
	add			esi,	ebx
	sub			esi,	ecx

;The next line of Y

	movq		mm0,	[esi]	;U

	movq		mm1,	mm0			;U

	punpcklbw	mm1,	mm7			;U
	movq		mm2,	mm1			;U


	


	mov			esi,	RGB
	punpcklwd	mm2,	mm2			;V

	sub			esi,	ecx
	movq		mm3,	mm2			;V
	sub			esi,	ecx
	punpckhbw	mm0,	mm7			;V
	sub			esi,	ecx
	punpckldq	mm2,	mm2			;V

;mm0--Y31 Y30 Y21 Y20 Y11 Y10 Y01 Y00
;mm1--   Y11     Y10     Y01     Y00



;mm2--Y01  Y01  Y00  Y00

	movq		mm7,	mm0			;V

	pand		mm2,dword ptr AndMask1;U
	psrlq		mm3,	32			;V
;mm3--0  0  Y01  Y01
;mm2--Y00 Y00 Y00 Y00
	movq		mm4,	mm3			;U
	punpcklwd	mm7,	mm7			;V

	psllq		mm4,	48			;U
	movq		mm6,	mm7			;V
	por			mm2,	mm4			;U
	psrlq		mm6,	32			;V
;mm2--Y01 Y00 Y00 Y00

	movq		mm4,	mm1			;U
	punpckldq	mm7,	mm7			;V

	punpckhwd	mm4,	mm4			;U
	movq		mm1,	mm6			;V
;mm4--Y11  Y11  Y10  Y10
	psllq		mm1,	48			;U
	movq		mm5,	mm4			;V
	pand		mm7,dword ptr AndMask1;U
	psllq		mm5,	32			;V
	por			mm3,	mm5			;U
;mm3--Y10  Y10  Y01  Y01
	punpckhdq	mm4,	mm4			;V
	pand		mm4,	dword ptr AndMask6;U
;mm4--Y11  Y11  Y11  0
	psrlq		mm5,	48			;V
	paddw		mm2,	[edi]		;U
	por			mm4,	mm5			;V
;mm4--Y11  Y11  Y11  Y10


	paddw		mm3,	[edi+8]		;U
	por			mm7,	mm1			;V
	packuswb	mm2,	mm3			;U
	movq		mm5,	mm0			;V
	paddw		mm4,	[edi+16]	;U
	punpckhwd	mm5,	mm5			;V


	paddw		mm7,	[edi+24]	;U
	movq		mm1,	mm5			;V



	movq		[esi],	mm2			;U
	psllq		mm1,	32			;V

	
;mm0--Y31  Y30  Y21  Y20
	


;mm7--Y21  Y21  Y20  Y20
;mm6--0  0  Y21  Y21
;mm7--Y20 Y20 Y20 Y20
;mm7--Y21 Y20 Y20 Y20

;mm5--Y31  Y31  Y30  Y30
	por			mm6,	mm1			;U
	punpckhdq	mm5,	mm5			;V
	pand		mm5,	dword ptr AndMask6;U
;mm5--Y31  Y31  Y31  0
	psrlq		mm1,	48			;V
	por			mm5,	mm1			;U
	packuswb	mm4,	mm7			;V
;mm5--Y31  Y31  Y31  Y30

	
	paddw		mm6,	[edi+32]	;U
	paddw		mm5,	[edi+40]	;U

	mov			edi,	V
	packuswb	mm6,	mm5			;U

	movq		[esi+8],mm4			;U
	movq		[esi+16],mm6		;U









	mov			esi,	U

	movq		mm0,	[esi+eax]		;U Pipe
	pxor		mm7,	mm7			;V
	movq		mm1,	[edi+eax]		;U
	punpckhbw	mm0,	mm7			;V
	psubw		mm0,dword ptr UVOff	;U
	punpckhbw	mm1,	mm7			;V
	psubw		mm1,dword ptr UVOff	;U
;mm0--U3-128 U2-128 U1-128 U0-128
;mm1--V3-128 V2-128 V1-128 V0-128

	movq		mm2,	mm0			;V

	movq		mm3,	mm1			;U
	punpcklwd	mm3,	mm2			;U
	movq		mm5,	mm3			;U
	movq		mm4,	mm3			;V
	pmaddwd	mm4,dword ptr UVCoe2	;U
	punpckldq	mm3,	mm3			;V
	pmaddwd	mm3,dword ptr UVCoe1	;U
	punpckhdq	mm5,	mm5			;V
	pmaddwd	mm5,dword ptr UVCoe3	;U
	movq		mm2,	mm0			;V

	psrad		mm4,	14			;U
	movq		mm6,	mm1			;V

	punpckhwd	mm6,	mm2			;U

	psrad		mm3,	14			;U
	movq		mm7,	mm6			;V

	mov			edi,	LTemp
	punpckhdq	mm7,	mm7			;V

	pmaddwd	mm7,dword ptr UVCoe3	;U
	packssdw	mm3,	mm4			;V
	psrad		mm5,	14			;U
;mm3--B1-Y R0-Y G0-Y B0-Y
;mm5--   R1-Y     G1-Y

	movq		mm4,	mm6			;V
	pmaddwd	mm4,dword ptr UVCoe2	;U
	punpckldq	mm6,	mm6			;V
	pmaddwd	mm6,dword ptr UVCoe1	;U
	movq		mm2,	mm3			;V

	movq		[edi+56],mm3		;U
	psrad		mm7,	14			;V
	pand		mm3,dword ptr AndMask1;U
	psrad		mm4,	14			;V

	psrad		mm6,	14			;U			
	packssdw	mm5,	mm6			;U

	psllq		mm2,	48			;U
	packssdw	mm4,	mm7			;U

;mm3--B1-Y R0-Y G0-Y B0-Y
;mm5--G2-Y B2-Y R1-Y G1-Y
;mm4--R3-Y G3-Y B3-Y R2-Y
		
	por			mm3,	mm2			;V
	movq		[edi+48],mm5		;U
	movq		mm2,	mm3			;V

	psrlq		mm2,	16			;U
	movq		mm6,	mm2			;U

	pand		mm6,dword ptr AndMask2;U
;mm6--B0-Y R0-Y G0-Y B0-Y
;mm3--  0    0  R0-Y G0-Y
	
	movq		mm2,	[edi+56]	;U
	psllq		mm5,	32			;V
	
	pand		mm2,	dword ptr AndMask3;U
	mov			esi,	Y
	psrlq		mm2,	32			;V

	movq		[edi],	mm3			;U
	por			mm5,	mm2			;V

	movq		mm7,	mm5			;U
	movq		mm2,	mm5			;V
	add			esi,	ebx
	psrlq		mm2,	48			;V

	sub			esi,	ecx
	por			mm5,	mm2			;V



	movq		mm2,	[edi+48]	;U
	psllq		mm7,	16			;V
	psrlq		mm2,	32			;U
	por			mm6,	mm7			;V
;mm6--B0-Y R0-Y G0-Y B0-Y
;mm3--G1-Y B1-Y R0-Y G0-Y
;mm5--R1-Y G1-Y B1-Y R1-Y	

	movq		[edi+16],mm5		;U
	movq		mm5,	mm4			;V

	pand		mm5,	dword ptr AndMask4;U
	movq		[edi+8],mm6			;U
	psllq		mm5,	32			;V

	por			mm2,	mm5			;U
	movq		mm6,	mm4			;V
	movq		mm5,	mm2			;U
	psllq		mm6,	16			;V
	movq		mm3,	mm2			;U
	psllq		mm5,	48			;V
	pand		mm6,	dword ptr AndMask5;U
	psrlq		mm3,	16			;V
	por			mm2,	mm5			;U
	por			mm3,	mm6			;V
;mm2--B2-Y R2-Y G2-Y B2-Y
;mm3--G3-Y B3-Y R2-Y G2-Y
	movq		mm0,	[esi+8]		;U
	movq		mm5,	mm4			;V
	pand		mm4,	dword ptr AndMask6;U
	psrlq		mm5,	48			;V
	movq		[edi+24],mm2		;U
	por			mm4,	mm5			;V
;mm4--R3-Y G3-Y B3-Y R3-Y

	movq		[edi+32],mm3		;U
	pxor		mm5,	mm5			;V

	mov			esi,	RGB
	movq		mm1,	mm0			;V


	movq		[edi+40],mm4		;U
	punpcklbw	mm1,	mm5			;V

;[LTemp]   --B0-Y R0-Y G0-Y B0-Y
;[LTemp+8] --G1-Y B1-Y R0-Y G0-Y
;[LTemp+16]--R1-Y G1-Y B1-Y R1-Y	
;[LTemp+24]--B2-Y R2-Y G2-Y B2-Y
;[LTemp+32]--G3-Y B3-Y R2-Y G2-Y
;[LTemp+40]--R3-Y G3-Y B3-Y R3-Y
;mm0--Y31 Y30 Y21 Y20 Y11 Y10 Y01 Y00
;mm1--   Y11     Y10     Y01     Y00

	add			esi,	edx
	movq		mm2,	mm1			;U
	sub			esi,	ecx
	pxor		mm7,	mm7			;V
	sub			esi,	ecx
	punpcklwd	mm2,	mm2
;mm2--Y01  Y01  Y00  Y00
	sub			esi,	ecx
	movq		mm3,	mm2			;U
	punpckhbw	mm0,	mm7			;V

	punpckldq	mm2,	mm2			;U
	movq		mm7,	mm0			;V

	pand		mm2,dword ptr AndMask1;U
	psrlq		mm3,	32			;V
;mm3--0  0  Y01  Y01
;mm2--Y00 Y00 Y00 Y00
	movq		mm4,	mm3			;U
	punpcklwd	mm7,	mm7			;V

	psllq		mm4,	48			;U
	movq		mm6,	mm7			;V
	por			mm2,	mm4			;U
	psrlq		mm6,	32			;V
;mm2--Y01 Y00 Y00 Y00

	movq		mm4,	mm1			;U
	punpckldq	mm7,	mm7			;V

	punpckhwd	mm4,	mm4			;U
	movq		mm1,	mm6			;V
;mm4--Y11  Y11  Y10  Y10
	psllq		mm1,	48			;U
	movq		mm5,	mm4			;V
	pand		mm7,dword ptr AndMask1;U
	psllq		mm5,	32			;V
	por			mm3,	mm5			;U
;mm3--Y10  Y10  Y01  Y01
	punpckhdq	mm4,	mm4			;V
	pand		mm4,	dword ptr AndMask6;U
;mm4--Y11  Y11  Y11  0
	psrlq		mm5,	48			;V
	paddw		mm2,	[edi]		;U
	por			mm4,	mm5			;V
;mm4--Y11  Y11  Y11  Y10


	paddw		mm3,	[edi+8]		;U
	por			mm7,	mm1			;V
	packuswb	mm2,	mm3			;U
	movq		mm5,	mm0			;V
	paddw		mm4,	[edi+16]	;U
	punpckhwd	mm5,	mm5			;V


	paddw		mm7,	[edi+24]	;U
	movq		mm1,	mm5			;V



	movq		[esi+24],	mm2			;U
	psllq		mm1,	32			;V

	
;mm0--Y31  Y30  Y21  Y20
	


;mm7--Y21  Y21  Y20  Y20
;mm6--0  0  Y21  Y21
;mm7--Y20 Y20 Y20 Y20
;mm7--Y21 Y20 Y20 Y20

;mm5--Y31  Y31  Y30  Y30
	por			mm6,	mm1			;U
	punpckhdq	mm5,	mm5			;V
	pand		mm5,	dword ptr AndMask6;U
;mm5--Y31  Y31  Y31  0
	psrlq		mm1,	48			;V
	por			mm5,	mm1			;U
	packuswb	mm4,	mm7			;V
;mm5--Y31  Y31  Y31  Y30

	
	paddw		mm6,	[edi+32]	;U
	pxor		mm7,	mm7			;V

	paddw		mm5,	[edi+40]	;U


	movq		[esi+32],mm4			;U
	packuswb	mm6,	mm5			;V
	movq		[esi+40],mm6		;U



	mov			esi,	Y
	add			esi,	ebx
	add			esi,	ebx
	sub			esi,	ecx

;The next line of Y

	movq		mm0,	[esi+8]	;U
	movq		mm1,	mm0			;U
	punpcklbw	mm1,	mm7			;U
	movq		mm2,	mm1			;U


	



	mov			esi,	RGB
	punpcklwd	mm2,	mm2			;V

	sub			esi,	ecx
	movq		mm3,	mm2			;V
	sub			esi,	ecx
	punpckhbw	mm0,	mm7			;V
	sub			esi,	ecx
	punpckldq	mm2,	mm2			;V

;mm0--Y31 Y30 Y21 Y20 Y11 Y10 Y01 Y00
;mm1--   Y11     Y10     Y01     Y00



;mm2--Y01  Y01  Y00  Y00

	movq		mm7,	mm0			;V

	pand		mm2,dword ptr AndMask1;U
	psrlq		mm3,	32			;V
;mm3--0  0  Y01  Y01
;mm2--Y00 Y00 Y00 Y00
	movq		mm4,	mm3			;U
	punpcklwd	mm7,	mm7			;V

	psllq		mm4,	48			;U
	movq		mm6,	mm7			;V
	por			mm2,	mm4			;U
	psrlq		mm6,	32			;V
;mm2--Y01 Y00 Y00 Y00

	movq		mm4,	mm1			;U
	punpckldq	mm7,	mm7			;V

	punpckhwd	mm4,	mm4			;U
	movq		mm1,	mm6			;V
;mm4--Y11  Y11  Y10  Y10
	psllq		mm1,	48			;U
	movq		mm5,	mm4			;V
	pand		mm7,dword ptr AndMask1;U
	psllq		mm5,	32			;V
	por			mm3,	mm5			;U
;mm3--Y10  Y10  Y01  Y01
	punpckhdq	mm4,	mm4			;V
	pand		mm4,	dword ptr AndMask6;U
;mm4--Y11  Y11  Y11  0
	psrlq		mm5,	48			;V
	paddw		mm2,	[edi]		;U
	por			mm4,	mm5			;V
;mm4--Y11  Y11  Y11  Y10


	paddw		mm3,	[edi+8]		;U
	por			mm7,	mm1			;V
	packuswb	mm2,	mm3			;U
	movq		mm5,	mm0			;V
	paddw		mm4,	[edi+16]	;U
	punpckhwd	mm5,	mm5			;V


	paddw		mm7,	[edi+24]	;U
	movq		mm1,	mm5			;V



	movq		[esi+24],	mm2			;U
	psllq		mm1,	32			;V

	
;mm0--Y31  Y30  Y21  Y20
	


;mm7--Y21  Y21  Y20  Y20
;mm6--0  0  Y21  Y21
;mm7--Y20 Y20 Y20 Y20
;mm7--Y21 Y20 Y20 Y20

;mm5--Y31  Y31  Y30  Y30
	por			mm6,	mm1			;U
	punpckhdq	mm5,	mm5			;V
	pand		mm5,	dword ptr AndMask6;U
;mm5--Y31  Y31  Y31  0
	psrlq		mm1,	48			;V
	por			mm5,	mm1			;U
	packuswb	mm4,	mm7			;V
;mm5--Y31  Y31  Y31  Y30

	
	paddw		mm6,	[edi+32]	;U
	paddw		mm5,	[edi+40]	;U

	mov			edi,	V
	packuswb	mm6,	mm5			;V

	movq		[esi+32],mm4			;U
	movq		[esi+40],mm6		;U



	mov			esi,	U



	add			eax,	8
	sub			ecx,	16

	jnz			LINELOOP

	emms
	ret
YUVRGBTwoLine ENDP

END

⌨️ 快捷键说明

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