📄 mmxmem.asm
字号:
short *Data,
int pixel);
^
MMXStoreBlock PROC NEAR C USES ESI EDI EAX EBX ECX EDX,
Loss: PTR BYTE, Data: PTR SWORD,
pixel: DWORD
mov esi, Data
mov edi, Loss
mov eax, pixel
mov ebx, eax
mov ecx, eax
add ebx, eax
add ecx, eax
mov edx, ebx
add ecx, eax
add edx, edx
movq mm0, [esi]
movq mm1, [esi+8]
movq mm2, [esi+16]
movq mm3, [esi+24]
packuswb mm0, mm1
movq mm4, [esi+32]
movq mm5, [esi+40]
packuswb mm2, mm3
movq [edi], mm0
movq mm6, [esi+48]
movq mm7, [esi+56]
packuswb mm4, mm5
movq [edi+eax],mm2
movq mm0, [esi+64]
movq mm1, [esi+72]
packuswb mm6, mm7
movq [edi+ebx],mm4
movq mm2, [esi+80]
movq mm3, [esi+88]
packuswb mm0, mm1
movq [edi+ecx], mm6
movq mm4, [esi+96]
movq mm5, [esi+104]
packuswb mm2, mm3
movq [edi+edx],mm0
add edi, edx
movq mm6, [esi+112]
movq mm7, [esi+120]
packuswb mm4, mm5
movq [edi+eax],mm2
packuswb mm6, mm7
movq [edi+ebx],mm4
movq [edi+ecx],mm6
emms
ret
MMXStoreBlock ENDP
COMMENT ^
void MMXFillBlock(
BYTE *Src,
short *Data,
int pixel);
^
MMXFillBlock PROC NEAR C USES ESI EDI EAX EBX,
Src: PTR BYTE, Data: PTR SWORD,
pixel: DWORD
mov esi, Src
mov edi, Data
mov eax, pixel
mov ebx, eax
add ebx, eax
add ebx, eax
pxor mm7, mm7
movq mm0, [esi]
movq mm2, [esi+eax]
movq mm1, mm0
movq mm3, mm2
punpcklbw mm0, mm7
movq mm4, [esi+2*eax]
punpckhbw mm1, mm7
punpcklbw mm2, mm7
add esi, ebx
movq [edi], mm0
movq mm5, mm4
movq [edi+8],mm1
punpckhbw mm3, mm7
movq [edi+16],mm2
punpcklbw mm4, mm7
movq mm0, [esi]
punpckhbw mm5, mm7
movq [edi+24],mm3
movq mm1, mm0
movq mm2, [esi+eax]
punpcklbw mm0, mm7
movq [edi+32],mm4
punpckhbw mm1, mm7
movq [edi+40],mm5
movq mm3, mm2
movq [edi+48],mm0
punpcklbw mm2, mm7
movq mm4, [esi+2*eax]
punpckhbw mm3, mm7
movq [edi+56],mm1
movq mm5, mm4
punpcklbw mm4, mm7
add esi, ebx
movq mm0, [esi]
punpckhbw mm5, mm7
movq [edi+64],mm2
movq mm1, mm0
movq [edi+72],mm3
punpcklbw mm0, mm7
movq mm2, [esi+eax]
punpckhbw mm1, mm7
movq [edi+80],mm4
movq mm3, mm2
movq [edi+88],mm5
punpcklbw mm2, mm7
movq [edi+96],mm0
punpckhbw mm3, mm7
movq [edi+104],mm1
movq [edi+112],mm2
movq [edi+120],mm3
emms
ret
MMXFillBlock ENDP
COMMENT ^
void MMXFillMB(
BYTE *Src,
short *Data,
int pixel);
^
MMXFillMB PROC NEAR C USES ESI EDI EAX EBX,
Src: PTR BYTE, Data: PTR SWORD,
pixel: DWORD
mov esi, Src
mov edi, Data
mov eax, pixel
mov ebx, eax
add ebx, eax
add ebx, eax
pxor mm7, mm7
movq mm0, [esi]
movq mm2, [esi+8]
movq mm1, mm0
movq mm3, mm2
punpcklbw mm0, mm7
movq mm4, [esi+eax]
punpckhbw mm1, mm7
punpcklbw mm2, mm7
movq mm5, mm4
movq [edi],mm0
punpckhbw mm3, mm7
movq [edi+8],mm1
punpcklbw mm4, mm7
movq mm0, [esi+eax+8]
punpckhbw mm5, mm7
movq [edi+16],mm2
movq mm1, mm0
movq [edi+24],mm3
punpcklbw mm0, mm7
movq mm2, [esi+2*eax]
punpckhbw mm1, mm7
movq [edi+32],mm4
movq mm3, mm2
movq [edi+40],mm5
punpcklbw mm2, mm7
movq mm4, [esi+2*eax+8]
punpckhbw mm3, mm7
add esi, ebx
movq mm5, mm4
movq [edi+48],mm0
punpcklbw mm4, mm7
movq [edi+56],mm1
punpckhbw mm5, mm7
movq mm0, [esi]
movq [edi+64],mm2
movq mm1, mm0
movq [edi+72],mm3
punpcklbw mm0, mm7
movq mm2, [esi+8]
punpckhbw mm1, mm7
movq [edi+80],mm4
movq mm3, mm2
movq [edi+88],mm5
punpcklbw mm2, mm7
movq mm4, [esi+eax]
punpckhbw mm3, mm7
movq [edi+96],mm0
movq mm5, mm4
movq [edi+104],mm1
punpcklbw mm4, mm7
movq mm0, [esi+eax+8]
punpckhbw mm5, mm7
movq [edi+112],mm2
movq mm1, mm0
movq [edi+120],mm3
punpcklbw mm0, mm7
movq mm2, [esi+2*eax]
punpckhbw mm1, mm7
movq [edi+128],mm4
movq mm3, mm2
movq [edi+136],mm5
punpcklbw mm2, mm7
movq mm4, [esi+2*eax+8]
punpckhbw mm3, mm7
add esi, ebx
movq mm5, mm4
movq [edi+144],mm0
punpcklbw mm4, mm7
movq [edi+152],mm1
punpckhbw mm5, mm7
movq mm0, [esi]
movq [edi+160],mm2
movq mm1, mm0
movq [edi+168],mm3
punpcklbw mm0, mm7
movq mm2, [esi+8]
punpckhbw mm1, mm7
movq [edi+176],mm4
movq mm3, mm2
movq [edi+184],mm5
punpcklbw mm2, mm7
movq mm4, [esi+eax]
punpckhbw mm3, mm7
movq [edi+192],mm0
movq mm5, mm4
movq [edi+200],mm1
punpcklbw mm4, mm7
movq mm0, [esi+eax+8]
punpckhbw mm5, mm7
movq [edi+208],mm2
movq mm1, mm0
movq [edi+216],mm3
punpcklbw mm0, mm7
movq mm2, [esi+2*eax]
punpckhbw mm1, mm7
movq [edi+224],mm4
movq mm3, mm2
movq [edi+232],mm5
punpcklbw mm2, mm7
movq mm4, [esi+2*eax+8]
punpckhbw mm3, mm7
movq mm5, mm4
add esi, ebx
movq [edi+240],mm0
punpcklbw mm4, mm7
movq [edi+248],mm1
punpckhbw mm5, mm7
movq mm0, [esi]
movq [edi+256],mm2
movq mm1, mm0
movq [edi+264],mm3
punpcklbw mm0, mm7
movq mm2, [esi+8]
punpckhbw mm1, mm7
movq [edi+272],mm4
movq mm3, mm2
movq [edi+280],mm5
punpcklbw mm2, mm7
movq mm4, [esi+eax]
punpckhbw mm3, mm7
movq [edi+288],mm0
movq mm5, mm4
movq [edi+296],mm1
punpcklbw mm4, mm7
movq mm0, [esi+eax+8]
punpckhbw mm5, mm7
movq [edi+304],mm2
movq mm1, mm0
movq [edi+312],mm3
punpcklbw mm0, mm7
movq mm2, [esi+2*eax]
punpckhbw mm1, mm7
movq [edi+320],mm4
movq mm3, mm2
movq [edi+328],mm5
punpcklbw mm2, mm7
movq mm4, [esi+2*eax+8]
punpckhbw mm3, mm7
movq mm5, mm4
add esi, ebx
movq [edi+336],mm0
punpcklbw mm4, mm7
movq [edi+344],mm1
punpckhbw mm5, mm7
movq mm0, [esi]
movq [edi+352],mm2
movq mm1, mm0
movq [edi+360],mm3
punpcklbw mm0, mm7
movq mm2, [esi+8]
punpckhbw mm1, mm7
movq [edi+368],mm4
movq mm3, mm2
movq [edi+376],mm5
punpcklbw mm2, mm7
movq mm4, [esi+eax]
punpckhbw mm3, mm7
movq [edi+384],mm0
movq mm5, mm4
movq [edi+392],mm1
punpcklbw mm4, mm7
movq mm0, [esi+eax+8]
punpckhbw mm5, mm7
movq [edi+400],mm2
movq mm1, mm0
movq [edi+408],mm3
punpcklbw mm0, mm7
movq mm2, [esi+2*eax]
punpckhbw mm1, mm7
movq [edi+416],mm4
movq mm3, mm2
movq [edi+424],mm5
punpcklbw mm2, mm7
movq mm4, [esi+2*eax+8]
punpckhbw mm3, mm7
movq mm5, mm4
add esi, ebx
movq [edi+432],mm0
punpcklbw mm4, mm7
movq [edi+440],mm1
punpckhbw mm5, mm7
movq mm0, [esi]
movq [edi+448],mm2
movq mm1, mm0
movq [edi+456],mm3
punpcklbw mm0, mm7
movq mm2, [esi+8]
punpckhbw mm1, mm7
movq [edi+464],mm4
movq mm3, mm2
movq [edi+472],mm5
punpcklbw mm2, mm7
movq [edi+480],mm0
punpckhbw mm3, mm7
movq [edi+488],mm1
movq [edi+496],mm2
movq [edi+504],mm3
emms
ret
MMXFillMB ENDP
COMMENT ^
void MMXTransFomeMB(
short *Data,
short *MBPtr);
^
MMXTransFromMB PROC NEAR C USES ESI EDI,
Data: PTR SWORD,MBPtr:PTR SWORD
mov esi, MBPtr
mov edi, Data
movq mm0, [esi]
movq mm1, [esi+8]
movq mm2, [esi+32]
movq mm3, [esi+40]
movq [edi], mm0
movq [edi+8],mm1
movq mm4, [esi+64]
movq mm5, [esi+72]
movq [edi+16], mm2
movq [edi+24], mm3
movq mm6, [esi+96]
movq mm7, [esi+104]
movq [edi+32], mm4
movq [edi+40], mm5
movq mm0, [esi+128]
movq mm1, [esi+136]
movq [edi+48], mm6
movq [edi+56], mm7
movq mm2, [esi+160]
movq mm3, [esi+168]
movq [edi+64], mm0
movq [edi+72],mm1
movq mm4, [esi+192]
movq mm5, [esi+200]
movq [edi+80], mm2
movq [edi+88],mm3
movq mm6, [esi+224]
movq mm7, [esi+232]
movq [edi+96], mm4
movq [edi+104],mm5
movq [edi+112], mm6
movq [edi+120],mm7
emms
ret
MMXTransFromMB ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -