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

📄 block_mmx.asm

📁 由bmp生成mpeg2 的I_frame 数据
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 偍栺懇
.586
.mmx
.xmm
.model flat
_TEXT64 segment page public use32 'CODE'
		align 16


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; copy_i_block_to_frame_mmx - 僀儞僩儔僽儘僢僋偺僼儗乕儉捛壛
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; short block[64] 偐傜 unsigned char * 傊僐僺乕偡傞嵺丄僋儕僢僺儞僌
; 僥乕僽儖傪巊偆偺偱偼側偔丄MMX 偺朞榓墘嶼傪棙梡偡傞
;-------------------------------------------------------------------
; 僀儞僞乕僼僃乕僗
PUBLIC              C _copy_i_block_to_frame_mmx@12
;      void __stdcall  copy_i_block_to_frame_mmx(
; [esp + 4] = unsigned short           *in,
; [esp + 8] = unsigned char            *out,
; [esp +12] = int                       step
; )
_copy_i_block_to_frame_mmx@12     PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; edi - 弌椡
; esi - 擖椡
; ecx - 僗僥僢僾
; total 12 bytes
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
		push       edi
		push       esi
		push       ecx
;-------------------------------------------------------------------
; 堷悢偐傜僨乕僞傪庴偗庢偭偰偍偔
		mov        esi, [esp+12+ 4]
		mov        edi, [esp+12+ 8]
		mov        ecx, [esp+12+12]
;-------------------------------------------------------------------
; 僐傾
		movq       mm0, [esi]
		movq       mm1, [esi+8]
		movq       mm2, [esi+16]
		movq       mm3, [esi+24]
		movq       mm4, [esi+32]
		movq       mm5, [esi+40]
		movq       mm6, [esi+48]
		movq       mm7, [esi+56]
		packuswb   mm0, mm1
		packuswb   mm2, mm3
		packuswb   mm4, mm5
		packuswb   mm6, mm7
		movq       [edi], mm0
		lea        edi, [edi+ecx]
		movq       [edi], mm2
		lea        edi, [edi+ecx]
		movq       [edi], mm4
		lea        edi, [edi+ecx]
		movq       [edi], mm6
		lea        edi, [edi+ecx]
; 忋敿暘僐僺乕廔椆
		movq       mm0, [esi+64]
		movq       mm1, [esi+72]
		movq       mm2, [esi+80]
		movq       mm3, [esi+88]
		movq       mm4, [esi+96]
		movq       mm5, [esi+104]
		movq       mm6, [esi+112]
		movq       mm7, [esi+120]
		packuswb   mm0, mm1
		packuswb   mm2, mm3
		packuswb   mm4, mm5
		packuswb   mm6, mm7
		movq       [edi], mm0
		lea        edi, [edi+ecx]
		movq       [edi], mm2
		lea        edi, [edi+ecx]
		movq       [edi], mm4
		lea        edi, [edi+ecx]
		movq       [edi], mm6
		lea        edi, [edi+ecx]
; 壓敿暘僐僺乕廔椆
;-------------------------------------------------------------------
; 儗僕僗僞暅尦摍屻巒枛

		pop        ecx
		pop        esi
		pop        edi

		ret        12

_copy_i_block_to_frame_mmx@12 ENDP
;-------------------------------------------------------------------
; 廔椆



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; add_diff_to_frame_mmx - 嵎暘僽儘僢僋偺僼儗乕儉捛壛
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 婎杮曽恓
; 16 bit 惛搙偱 4 暲楍墘嶼丄僋儕僢僺儞僌僥乕僽儖偼巊傢偢丄
; MMX 偺朞榓墘嶼傪棙梡偡傞
;-------------------------------------------------------------------
; 僀儞僞乕僼僃乕僗
PUBLIC              C _add_diff_to_frame_mmx@12
;      void __stdcall  add_diff_to_frame_mmx(
; [esp + 4] = unsigned short           *in,
; [esp + 8] = unsigned char            *out,
; [esp +12] = int                       step
; )
_add_diff_to_frame_mmx@12     PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; edi - 弌椡
; esi - 擖椡
; ecx - 僗僥僢僾
; total 12 bytes
;-------------------------------------------------------------------
; 梡搑屌掕 MMX 儗僕僗僞
; mm7 - 0
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
		push       edi
		push       esi
		push       ecx
;-------------------------------------------------------------------
; 堷悢偐傜僨乕僞傪庴偗庢偭偰偍偔
		mov        esi, [esp+12+ 4]
		mov        edi, [esp+12+ 8]
		mov        ecx, [esp+12+12]
;-------------------------------------------------------------------
; 曄姺學悢偺嶌惉
		pxor       mm7, mm7
;-------------------------------------------------------------------
; 僐傾乮儖乕僾偼巊傢側偄丄偙偺掱搙偺婯柾側傜揥奐偟偨曽偑椙偄偼偢乯

; 0-1 峴
		movd       mm0, [edi]
                movd       mm1, [edi+4]
		movd       mm2, [edi+ecx]
                movd       mm3, [edi+ecx+4]
                punpcklbw  mm0, mm7
                punpcklbw  mm1, mm7
                punpcklbw  mm2, mm7
                punpcklbw  mm3, mm7
; 僼儗乕儉俀峴撉傒庢傝

                paddw      mm0, [esi]
                paddw      mm1, [esi+8]
                paddw      mm2, [esi+16]
                paddw      mm3, [esi+24]
		packuswb   mm0, mm1
		packuswb   mm2, mm3
; 嵎暘僽儘僢僋傪懌偟偰

		movq       [edi], mm0
		lea        edi, [edi+ecx]
		movq       [edi], mm2
		lea        edi, [edi+ecx]
; 彂偒栠偡

; 2-3 峴
		movd       mm0, [edi]
                movd       mm1, [edi+4]
		movd       mm2, [edi+ecx]
                movd       mm3, [edi+ecx+4]
                punpcklbw  mm0, mm7
                punpcklbw  mm1, mm7
                punpcklbw  mm2, mm7
                punpcklbw  mm3, mm7
; 僼儗乕儉俀峴撉傒庢傝

                paddw      mm0, [esi+32]
                paddw      mm1, [esi+40]
                paddw      mm2, [esi+48]
                paddw      mm3, [esi+56]
		packuswb   mm0, mm1
		packuswb   mm2, mm3
; 嵎暘僽儘僢僋傪懌偟偰

		movq       [edi], mm0
		lea        edi, [edi+ecx]
		movq       [edi], mm2
		lea        edi, [edi+ecx]
; 彂偒栠偡

; 4-5 峴
		movd       mm0, [edi]
                movd       mm1, [edi+4]
		movd       mm2, [edi+ecx]
                movd       mm3, [edi+ecx+4]
                punpcklbw  mm0, mm7
                punpcklbw  mm1, mm7
                punpcklbw  mm2, mm7
                punpcklbw  mm3, mm7
; 僼儗乕儉俀峴撉傒庢傝

                paddw      mm0, [esi+64]
                paddw      mm1, [esi+72]
                paddw      mm2, [esi+80]
                paddw      mm3, [esi+88]
		packuswb   mm0, mm1
		packuswb   mm2, mm3
; 嵎暘僽儘僢僋傪懌偟偰

		movq       [edi], mm0
		lea        edi, [edi+ecx]
		movq       [edi], mm2
		lea        edi, [edi+ecx]
; 彂偒栠偡

; 6-7 峴
		movd       mm0, [edi]
                movd       mm1, [edi+4]
		movd       mm2, [edi+ecx]
                movd       mm3, [edi+ecx+4]
                punpcklbw  mm0, mm7
                punpcklbw  mm1, mm7
                punpcklbw  mm2, mm7
                punpcklbw  mm3, mm7
; 僼儗乕儉俀峴撉傒庢傝

                paddw      mm0, [esi+96]
                paddw      mm1, [esi+104]
                paddw      mm2, [esi+112]
                paddw      mm3, [esi+120]
		packuswb   mm0, mm1
		packuswb   mm2, mm3
; 嵎暘僽儘僢僋傪懌偟偰

		movq       [edi], mm0
		lea        edi, [edi+ecx]
		movq       [edi], mm2
		lea        edi, [edi+ecx]
; 彂偒栠偡

;-------------------------------------------------------------------
; 儗僕僗僞暅尦摍屻巒枛

		pop        ecx
		pop        esi
		pop        edi

		ret        12

_add_diff_to_frame_mmx@12 ENDP
;-------------------------------------------------------------------
; 廔椆


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; setup_qw_mmx - 検巕壔峴楍偲検巕壔學悢偐傜廳傒僥乕僽儖傪嶌惉偡傞
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 僀儞僞乕僼僃乕僗
PUBLIC              C _setup_qw_mmx@12
;      void __stdcall  setup_qw_mmx(
; [esp + 4] = unsigned short           *qw,
; [esp + 8] = unsigned short           *qm,
; [esp +12] = int                       q
; )
_setup_qw_mmx@12     PROC
;-------------------------------------------------------------------
; 巊梡偡傞儗僕僗僞
; edi - 弌椡
; esi - 擖椡
; total 8 bytes
;-------------------------------------------------------------------
; 儗僕僗僞偺戅旔
		push       edi
		push       esi
;-------------------------------------------------------------------
; 堷悢偐傜僨乕僞傪庴偗庢偭偰偍偔
		mov        edi, [esp+ 8+ 4]
		mov        esi, [esp+ 8+ 8]
;-------------------------------------------------------------------
; 曄姺學悢偺嶌惉
		movd       mm7, [esp+ 8+12]
		punpcklwd  mm7, mm7;
		punpckldq  mm7, mm7;
		movq       mm0, [esi];
		movq       mm1, [esi+8];
		movq       mm2, [esi+16];
		movq       mm3, [esi+24];
		movq       mm4, [esi+32];
		movq       mm5, [esi+40];
		movq       mm6, [esi+48];
		lea        esi, [esi+56]; 28
		pmullw     mm0, mm7;
		pmullw     mm1, mm7;
		pmullw     mm2, mm7;
		pmullw     mm3, mm7;
		pmullw     mm4, mm7;
		pmullw     mm5, mm7;
		pmullw     mm6, mm7;
		movq       [edi], mm0;
		movq       [edi+8], mm1;
		movq       [edi+16], mm2;
		movq       [edi+24], mm3;
		movq       [edi+32], mm4;
		movq       [edi+40], mm5;
		movq       [edi+48], mm6;
		lea        edi, [edi+56];
		movq       mm0, [esi];
		movq       mm1, [esi+8];
		movq       mm2, [esi+16];
		movq       mm3, [esi+24];
		movq       mm4, [esi+32];
		movq       mm5, [esi+40];
		movq       mm6, [esi+48];
		lea        esi, [esi+56]; 56
		pmullw     mm0, mm7;
		pmullw     mm1, mm7;
		pmullw     mm2, mm7;
		pmullw     mm3, mm7;
		pmullw     mm4, mm7;
		pmullw     mm5, mm7;
		pmullw     mm6, mm7;
		movq       [edi], mm0;
		movq       [edi+8], mm1;
		movq       [edi+16], mm2;
		movq       [edi+24], mm3;

⌨️ 快捷键说明

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