📄 mmxrecon.asm
字号:
.nolist
INCLUDE iammx.inc ; IAMMX Emulator Macros
.list
.586p
.model FLAT
.data
ALIGN 8
ByteOne DQ 0101010101010101h
AndMask1 DQ 0FEFEFEFEFEFEFEFEh
.const
.code
COMMENT ^
void MMXReconBlock(
BYTE *Select,
BYTE *Source,
short *Data,
int pixel);
^
MMXReconBlock PROC NEAR C USES ESI EDI EAX EDX,
Select:PTR BYTE,Source:PTR BYTE,Data: PTR SWORD,
pixel:DWORD
mov esi, Source
mov edx, Data
mov edi, Select
mov eax, pixel
movq mm0, [esi]
pxor mm7, mm7
movq mm5, [edx]
movq mm1, mm0
movq mm6, [edx+8]
punpcklbw mm0, mm7
punpckhbw mm1, mm7
paddw mm0, mm5
movq mm2, [esi+8]
paddw mm1, mm6
packuswb mm0, mm1
movq mm6, mm2
movq mm3, [edx+16]
punpcklbw mm6, mm7
movq mm4, [edx+24]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
movq mm0, [esi+16]
packuswb mm6, mm2
movq mm5, [edx+32]
movq mm1, mm0
movq mm4, [edx+40]
punpcklbw mm0, mm7
movq [edi], mm6
punpckhbw mm1, mm7
add edi, eax
paddw mm0, mm5
movq mm2, [esi+24]
paddw mm1, mm4
movq mm6, mm2
packuswb mm0, mm1
movq mm3, [edx+48]
punpcklbw mm6, mm7
movq mm4, [edx+56]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
movq mm0, [esi+32]
packuswb mm6, mm2
movq mm5, [edx+64]
movq mm1, mm0
movq mm3, [edx+72]
punpcklbw mm0, mm7
movq [edi], mm6
punpckhbw mm1, mm7
add edi, eax
paddw mm0, mm5
movq mm2, [esi+40]
paddw mm1, mm3
packuswb mm0, mm1
movq mm6, mm2
movq mm3, [edx+80]
punpcklbw mm6, mm7
movq mm4, [edx+88]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
movq mm0, [esi+48]
packuswb mm6, mm2
movq mm5, [edx+96]
movq mm1, mm0
movq mm3, [edx+104]
punpcklbw mm0, mm7
movq [edi], mm6
punpckhbw mm1, mm7
add edi, eax
paddw mm0, mm5
movq mm2, [esi+56]
paddw mm1, mm3
movq mm6, mm2
packuswb mm0, mm1
movq mm3, [edx+112]
punpcklbw mm6, mm7
movq mm4, [edx+120]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
packuswb mm6, mm2
movq [edi], mm6
emms
ret
MMXReconBlock ENDP
COMMENT ^
void MMXReconMB(
BYTE *Select,
BYTE *Source,
short *Data,
int pixel);
^
MMXReconMB PROC NEAR C USES ESI EDI EAX ECX EDX,
Select:PTR BYTE,Source:PTR BYTE,Data: PTR SWORD,
pixel:DWORD
mov esi, Source
mov edx, Data
mov edi, Select
mov eax, pixel
mov ecx, 16
movq mm0, [esi]
pxor mm7, mm7
movq mm5, [edx]
movq mm1, mm0
LINE:
movq mm6, [edx+8]
punpcklbw mm0, mm7
punpckhbw mm1, mm7
paddw mm0, mm5
movq mm2, [esi+8]
paddw mm1, mm6
movq mm6, mm2
packuswb mm0,mm1
movq mm3, [edx+16]
punpcklbw mm2, mm7
movq mm4, [edx+24]
punpckhbw mm6, mm7
movq [edi], mm0
paddw mm2, mm3
add esi, 16
paddw mm6, mm4
add edx, 32
packuswb mm2,mm6
movq mm0, [esi]
movq mm5, [edx]
movq mm1, mm0
movq [edi+8],mm2
add edi, eax
dec ecx
jnz LINE
emms
ret
MMXReconMB ENDP
COMMENT ^
void MMXReconAPBlock(
BYTE *Select,
BYTE *Source,
short *Data,
int pixel);
^
MMXReconAPBlock PROC NEAR C USES ESI EDI EAX EDX,
Select:PTR BYTE,Source:PTR BYTE,Data: PTR SWORD,
pixel:DWORD
mov esi, Source
mov edx, Data
mov edi, Select
mov eax, pixel
movq mm0, [esi]
pxor mm7, mm7
movq mm5, [edx]
movq mm1, mm0
movq mm6, [edx+8]
punpcklbw mm0, mm7
punpckhbw mm1, mm7
paddw mm0, mm5
movq mm2, [esi+8]
paddw mm1, mm6
packuswb mm0, mm1
movq mm6, mm2
movq mm3, [edx+32]
punpcklbw mm6, mm7
movq mm4, [edx+40]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
movq mm0, [esi+16]
packuswb mm6, mm2
movq mm5, [edx+64]
movq mm1, mm0
movq mm4, [edx+72]
punpcklbw mm0, mm7
movq [edi], mm6
punpckhbw mm1, mm7
add edi, eax
paddw mm0, mm5
movq mm2, [esi+24]
paddw mm1, mm4
movq mm6, mm2
packuswb mm0, mm1
movq mm3, [edx+96]
punpcklbw mm6, mm7
movq mm4, [edx+104]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
movq mm0, [esi+32]
packuswb mm6, mm2
movq mm5, [edx+128]
movq mm1, mm0
movq mm3, [edx+136]
punpcklbw mm0, mm7
movq [edi], mm6
punpckhbw mm1, mm7
add edi, eax
paddw mm0, mm5
movq mm2, [esi+40]
paddw mm1, mm3
packuswb mm0, mm1
movq mm6, mm2
movq mm3, [edx+160]
punpcklbw mm6, mm7
movq mm4, [edx+168]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
movq mm0, [esi+48]
packuswb mm6, mm2
movq mm5, [edx+192]
movq mm1, mm0
movq mm3, [edx+200]
punpcklbw mm0, mm7
movq [edi], mm6
punpckhbw mm1, mm7
add edi, eax
paddw mm0, mm5
movq mm2, [esi+56]
paddw mm1, mm3
movq mm6, mm2
packuswb mm0, mm1
movq mm3, [edx+224]
punpcklbw mm6, mm7
movq mm4, [edx+232]
punpckhbw mm2, mm7
movq [edi], mm0
paddw mm6, mm3
add edi, eax
paddw mm2, mm4
packuswb mm6, mm2
movq [edi], mm6
emms
ret
MMXReconAPBlock ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -