📄 mmxmad.asm
字号:
.nolist
INCLUDE iammx.inc ; IAMMX Emulator Macros
.list
.586p
.model FLAT
.data
ALIGN 8
BitMask DQ 0ff00ff00ff00ffh
.const
.code
COMMENT ^
int CalMADLast (
BYTE *RefFrame,
BYTE *CurFrame,
int CurPixels
)
^
CalMADLast PROC NEAR C USES esi,
RefFrame:PTR BYTE, CurFrame:PTR BYTE,
CurPixels:DWORD
push edx
push edi
push ebx
mov esi,RefFrame
mov edi,CurFrame
mov ebx,CurPixels
mov edx,ebx
add edx,ebx
add edx,ebx
pxor mm7,mm7
movq mm0,[esi]
pxor mm6,mm6
movq mm1,[edi]
movq mm2,mm0
movq mm3,8[esi]
psubusb mm0,mm1
movq mm4,8[edi]
psubusb mm1,mm2
por mm0,mm1
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,16[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,24[esi]
psubusb mm0,mm5
movq mm4,[8+ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,32[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[2*ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,40[esi]
psubusb mm0,mm5
movq mm4,[8+2*ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
add edi,edx
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,48[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,56[esi]
psubusb mm0,mm5
movq mm4,[8+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,64[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,72[esi]
psubusb mm0,mm5
movq mm4,[8+ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,80[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[2*ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,88[esi]
psubusb mm0,mm5
movq mm4,[8+2*ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
add edi,edx
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,96[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,104[esi]
psubusb mm0,mm5
movq mm4,[8+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,112[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,120[esi]
psubusb mm0,mm5
movq mm4,[8+ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,128[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[2*ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,136[esi]
psubusb mm0,mm5
movq mm4,[8+2*ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
add edi,edx
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,144[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,152[esi]
psubusb mm0,mm5
movq mm4,[8+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,160[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,168[esi]
psubusb mm0,mm5
movq mm4,[8+ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,176[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[2*ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,184[esi]
psubusb mm0,mm5
movq mm4,[8+2*ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
add edi,edx
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,192[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,200[esi]
psubusb mm0,mm5
movq mm4,[8+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,208[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,216[esi]
psubusb mm0,mm5
movq mm4,[8+ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,224[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[2*ebx+edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,232[esi]
psubusb mm0,mm5
movq mm4,[8+2*ebx+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
add edi,edx
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm2,240[esi]
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
movq mm5,[edi]
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm2
movq mm3,248[esi]
psubusb mm0,mm5
movq mm4,[8+edi]
psubusb mm5,mm2
por mm0,mm5
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
por mm3,mm4
movq mm4,mm3
punpcklbw mm3,mm6
paddusw mm7,mm0
punpckhbw mm4,mm6
paddusw mm7,mm1
paddusw mm7,mm3
pop ebx
paddusw mm7,mm4
movq mm0,mm7
psrlq mm7,32
paddusw mm7,mm0
pop edi
punpcklwd mm7,mm6
pop edx
movq mm1,mm7
psrlq mm7, 32
paddd mm7,mm1
movd eax,mm7
emms
ret
CalMADLast ENDP
COMMENT ^
int CalMADSub (
BYTE *RefFrame,
BYTE *CurFrame,
int RefSubPixels,
int CurSubPixels
)
^
CalMADSub PROC NEAR C USES esi edi,
RefFrame:PTR BYTE, CurFrame:PTR BYTE,
RefSubPixels:DWORD, CurSubPixels:DWORD
; LOCAL src:PTR SWORD, num:PTR SDWORD
; above (commented) line is an example of declaring local parameters
push ebx
mov esi,RefFrame
mov edi,CurFrame
mov eax,RefSubPixels
mov ebx,CurSubPixels
pxor mm7,mm7
movq mm0,[esi]
pxor mm6,mm6
movq mm1,[edi]
movq mm2,mm0
add esi,eax
psubusb mm0,mm1
add edi,ebx
psubusb mm1,mm2
movq mm3,[esi]
por mm0,mm1
movq mm4,[edi]
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
add esi,eax
add edi,ebx
psubusb mm4,mm5
punpckhbw mm1,mm6
paddusw mm7,mm0
por mm3,mm4
paddusw mm7,mm1
movq mm0,[esi]
movq mm4,mm3
movq mm1,[edi]
punpcklbw mm3,mm6
punpckhbw mm4,mm6
paddusw mm7,mm3
add esi,eax
paddusw mm7,mm4
add edi,ebx
movq mm2,mm0
movq mm3,[esi]
psubusb mm0,mm1
movq mm4,[edi]
psubusb mm1,mm2
por mm0,mm1
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
add esi,eax
add edi,ebx
psubusb mm4,mm5
punpckhbw mm1,mm6
paddusw mm7,mm0
por mm3,mm4
paddusw mm7,mm1
movq mm0,[esi]
movq mm4,mm3
movq mm1,[edi]
punpcklbw mm3,mm6
punpckhbw mm4,mm6
paddusw mm7,mm3
add esi,eax
paddusw mm7,mm4
add edi,ebx
movq mm2,mm0
movq mm3,[esi]
psubusb mm0,mm1
movq mm4,[edi]
psubusb mm1,mm2
por mm0,mm1
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
add esi,eax
add edi,ebx
psubusb mm4,mm5
punpckhbw mm1,mm6
paddusw mm7,mm0
por mm3,mm4
paddusw mm7,mm1
movq mm0,[esi]
movq mm4,mm3
movq mm1,[edi]
punpcklbw mm3,mm6
punpckhbw mm4,mm6
paddusw mm7,mm3
add esi,eax
paddusw mm7,mm4
add edi,ebx
movq mm2,mm0
movq mm3,[esi]
psubusb mm0,mm1
movq mm4,[edi]
psubusb mm1,mm2
por mm0,mm1
movq mm5,mm3
movq mm1,mm0
psubusb mm3,mm4
punpcklbw mm0,mm6
psubusb mm4,mm5
punpckhbw mm1,mm6
paddusw mm7,mm0
por mm3,mm4
paddusw mm7,mm1
movq mm4,mm3
punpcklbw mm3,mm6
punpckhbw mm4,mm6
paddusw mm7,mm3
paddusw mm7,mm4
movq mm0,mm7
psrlq mm7,32
paddusw mm7,mm0
punpcklwd mm7,mm6
movq mm1,mm7
psrlq mm7, 32
paddd mm7,mm1
pop ebx
movd eax,mm7
emms
ret
CalMADSub ENDP
COMMENT ^
void GetSub1(
BYTE * RF,
BYTE *pSubR,
int pixels,
int lines);
^
GetSub1 PROC NEAR C USES esi edi ecx eax ebx edx,
RF:PTR BYTE, pSubR:PTR DWORD,
pixels:DWORD, lines:DWORD
mov ecx,lines
sar ecx,1
mov eax,pixels
sar eax,4
mov esi,RF
mov edi,pSubR
pxor mm7,mm7
movq mm6,DWORD PTR BitMask
loopline:
mov ebx,eax
perline:
movq mm0,[esi]
movq mm1,[esi+8]
pand mm0,mm6
pand mm1,mm6
packuswb mm0,mm7
packuswb mm1,mm7
psllq mm1,32
por mm0,mm1
add esi,16
movq [edi],mm0
add edi,8
dec ebx
jnz perline
add esi,pixels
dec ecx
jnz loopline
emms
ret
GetSub1 ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -