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

📄 basic_prediction_mmx.c

📁 <VC++视频音频开发>一书的光盘资料。
💻 C
📖 第 1 页 / 共 2 页
字号:
		 mov cl, [esi+ebx]
		 add eax, ecx
		 inc eax
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 //14
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 inc eax
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 //15
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 inc eax
		 shr eax, 1
		 mov [edi], al

		 add esi, ebx
		 sub esi, 15
		 add edi, ebx
		 sub edi, 15
		 dec edx
		 jnz start_again0
	}
}
/**/
void CopyMBlockHorVer(unsigned char * Src, unsigned char * Dst, int Stride)
{
	_asm {
		 xor eax, eax
		 mov ebx, Stride
		 xor ecx, ecx
		 mov edx, 16
		 mov esi, dword ptr [Src]
		 mov edi, dword ptr [Dst]

start_again1:
		 // 0
		 //xor eax, eax
		 mov al, [esi]
		 mov cl, [esi+1]
		 add eax, ecx
		 mov cl, [esi+ebx]
		 add eax, ecx
		 mov cl, [esi+ebx+1]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi], al

		 // 1
		 //xor eax, eax
		 mov al, [esi+1]
		 mov cl, [esi+2]
		 add eax, ecx
		 mov cl, [esi+ebx+1]
		 add eax, ecx
		 mov cl, [esi+ebx+2]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+1], al

		 // 2
		 mov al, [esi+2]
		 mov cl, [esi+3]
		 add eax, ecx
		 mov cl, [esi+ebx+2]
		 add eax, ecx
		 mov cl, [esi+ebx+3]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+2], al

		 // 3
		 mov al, [esi+3]
		 mov cl, [esi+4]
		 add eax, ecx
		 mov cl, [esi+ebx+3]
		 add eax, ecx
		 mov cl, [esi+ebx+4]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+3], al

		 // 4
		 //xor eax, eax
		 mov al, [esi+4]
		 mov cl, [esi+5]
		 add eax, ecx
		 mov cl, [esi+ebx+4]
		 add eax, ecx
		 mov cl, [esi+ebx+5]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+4], al

		 // 5
		 //xor eax, eax
		 mov al, [esi+5]
		 mov cl, [esi+6]
		 add eax, ecx
		 mov cl, [esi+ebx+5]
		 add eax, ecx
		 mov cl, [esi+ebx+6]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+5], al

		 // 6
		 mov al, [esi+6]
		 mov cl, [esi+7]
		 add eax, ecx
		 mov cl, [esi+ebx+6]
		 add eax, ecx
		 mov cl, [esi+ebx+7]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+6], al

		 // 7
		 mov al, [esi+7]
		 mov cl, [esi+8]
		 add eax, ecx
		 mov cl, [esi+ebx+7]
		 add eax, ecx
		 mov cl, [esi+ebx+8]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+7], al

		 // 8
		 mov al, [esi+8]
		 mov cl, [esi+9]
		 add eax, ecx
		 mov cl, [esi+ebx+8]
		 add eax, ecx
		 mov cl, [esi+ebx+9]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+8], al

		 // 9
		 mov al, [esi+9]
		 mov cl, [esi+10]
		 add eax, ecx
		 mov cl, [esi+ebx+9]
		 add eax, ecx
		 mov cl, [esi+ebx+10]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+9], al

		 // 10
		 mov al, [esi+10]
		 mov cl, [esi+11]
		 add eax, ecx
		 mov cl, [esi+ebx+10]
		 add eax, ecx
		 mov cl, [esi+ebx+11]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+10], al

		 // 11
		 mov al, [esi+11]
		 mov cl, [esi+12]
		 add eax, ecx
		 mov cl, [esi+ebx+11]
		 add eax, ecx
		 mov cl, [esi+ebx+12]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+11], al

		 //12
		 mov al, [esi+12]
		 mov cl, [esi+13]
		 add eax, ecx
		 mov cl, [esi+ebx+12]
		 add eax, ecx
		 mov cl, [esi+ebx+13]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+12], al

		 //13 
		 //xor eax, eax
		 mov al, [esi+13]
		 mov cl, [esi+14]
		 add eax, ecx
		 mov cl, [esi+ebx+13]
		 add eax, ecx
		 mov cl, [esi+ebx+14]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+13], al

		 //14
		 mov al, [esi+14]
		 mov cl, [esi+15]
		 add eax, ecx
		 mov cl, [esi+ebx+14]
		 add eax, ecx
		 mov cl, [esi+ebx+15]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+14], al

		 //15
		 mov al, [esi+15]
		 mov cl, [esi+16]
		 add eax, ecx
		 mov cl, [esi+ebx+15]
		 add eax, ecx
		 mov cl, [esi+ebx+16]
		 add eax, ecx
		 add eax, 2
		 shr eax, 2
		 mov [edi+15], al

		 add esi, ebx
		 add edi, ebx
		 dec edx
		 jnz start_again1
	}
}
/**/
void CopyMBlockHorRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
	_asm {
		 xor eax, eax
		 mov ebx, Stride
		 sub ebx, 15
		 xor ecx, ecx
		 mov edx, 16
		 mov esi, dword ptr [Src]
		 mov edi, dword ptr [Dst]

start_again:
		 // 0
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 1
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 2
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 3
		 //xor eax, eax
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 4
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 5
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 6
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 7
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 8
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 9
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 10
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 // 11
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 //12
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 //13 
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 //14
		 mov al, [esi]
		 inc esi
		 mov cl, [esi]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc edi

		 //15
		 mov al, [esi]
		 mov cl, [esi+1]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al

		 add esi, ebx
		 add edi, ebx
		 dec edx
		 jnz start_again
	}
}
/**/
void CopyMBlockVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
	_asm {
		 xor eax, eax
		 mov ebx, Stride
		 xor ecx, ecx
		 mov edx, 16
		 mov esi, dword ptr [Src]
		 mov edi, dword ptr [Dst]

start_again:
		 // 0
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 1
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 2
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 3
		 //xor eax, eax
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 4
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 5
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 6
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 7
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 8
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 9
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 10
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 // 11
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 //12
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 //13 
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 //14
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al
		 inc esi
		 inc edi

		 //15
		 mov al, [esi]
		 mov cl, [esi+ebx]
		 add eax, ecx
		 shr eax, 1
		 mov [edi], al

		 add esi, ebx
		 sub esi, 15
		 add edi, ebx
		 sub edi, 15
		 dec edx
		 jnz start_again
	}
}
/**/
void CopyMBlockHorVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
	_asm {
		 xor eax, eax
		 mov ebx, Stride
		 xor ecx, ecx
		 mov edx, 16
		 mov esi, dword ptr [Src]
		 mov edi, dword ptr [Dst]

start_again:
		 // 0
		 mov al, [esi]
		 mov cl, [esi+1]
		 add eax, ecx
		 mov cl, [esi+ebx]
		 add eax, ecx
		 mov cl, [esi+ebx+1]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi], al

		 // 1
		 mov al, [esi+1]
		 mov cl, [esi+2]
		 add eax, ecx
		 mov cl, [esi+ebx+1]
		 add eax, ecx
		 mov cl, [esi+ebx+2]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+1], al

		 // 2
		 mov al, [esi+2]
		 mov cl, [esi+3]
		 add eax, ecx
		 mov cl, [esi+ebx+2]
		 add eax, ecx
		 mov cl, [esi+ebx+3]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+2], al

		 // 3
		 mov al, [esi+3]
		 mov cl, [esi+4]
		 add eax, ecx
		 mov cl, [esi+ebx+3]
		 add eax, ecx
		 mov cl, [esi+ebx+4]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+3], al

		 // 4
		 mov al, [esi+4]
		 mov cl, [esi+5]
		 add eax, ecx
		 mov cl, [esi+ebx+4]
		 add eax, ecx
		 mov cl, [esi+ebx+5]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+4], al

		 // 5
		 mov al, [esi+5]
		 mov cl, [esi+6]
		 add eax, ecx
		 mov cl, [esi+ebx+5]
		 add eax, ecx
		 mov cl, [esi+ebx+6]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+5], al

		 // 6
		 mov al, [esi+6]
		 mov cl, [esi+7]
		 add eax, ecx
		 mov cl, [esi+ebx+6]
		 add eax, ecx
		 mov cl, [esi+ebx+7]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+6], al

		 // 7
		 mov al, [esi+7]
		 mov cl, [esi+8]
		 add eax, ecx
		 mov cl, [esi+ebx+7]
		 add eax, ecx
		 mov cl, [esi+ebx+8]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+7], al

		 // 8
		 mov al, [esi+8]
		 mov cl, [esi+9]
		 add eax, ecx
		 mov cl, [esi+ebx+8]
		 add eax, ecx
		 mov cl, [esi+ebx+9]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+8], al

		 // 9
		 mov al, [esi+9]
		 mov cl, [esi+10]
		 add eax, ecx
		 mov cl, [esi+ebx+9]
		 add eax, ecx
		 mov cl, [esi+ebx+10]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+9], al

		 // 10
		 mov al, [esi+10]
		 mov cl, [esi+11]
		 add eax, ecx
		 mov cl, [esi+ebx+10]
		 add eax, ecx
		 mov cl, [esi+ebx+11]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+10], al

		 // 11
		 mov al, [esi+11]
		 mov cl, [esi+12]
		 add eax, ecx
		 mov cl, [esi+ebx+11]
		 add eax, ecx
		 mov cl, [esi+ebx+12]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+11], al

		 //12
		 mov al, [esi+12]
		 mov cl, [esi+13]
		 add eax, ecx
		 mov cl, [esi+ebx+12]
		 add eax, ecx
		 mov cl, [esi+ebx+13]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+12], al

		 //13 
		 mov al, [esi+13]
		 mov cl, [esi+14]
		 add eax, ecx
		 mov cl, [esi+ebx+13]
		 add eax, ecx
		 mov cl, [esi+ebx+14]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+13], al

		 //14
		 mov al, [esi+14]
		 mov cl, [esi+15]
		 add eax, ecx
		 mov cl, [esi+ebx+14]
		 add eax, ecx
		 mov cl, [esi+ebx+15]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+14], al

		 //15
		 //xor eax, eax
		 mov al, [esi+15]
		 mov cl, [esi+16]
		 add eax, ecx
		 mov cl, [esi+ebx+15]
		 add eax, ecx
		 mov cl, [esi+ebx+16]
		 add eax, ecx
		 inc eax
		 shr eax, 2
		 mov [edi+15], al

		 add esi, ebx
		 add edi, ebx
		 dec edx
		 jnz start_again
	}
}

⌨️ 快捷键说明

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