📄 eagle.asm
字号:
.L0 push ecx xchg eax,ecx movq mm1,[ebp] movq mm0,[esi] add ebp,8 add esi,8 ; added for mmx16 push ebp push ecx mov ebp, ecx mov word cx, [_dlx] ; end of added movd eax, mm0 movd ebx, mm1; cmp dhx, bx cmp dx, bx jne .L6001.L1001 cmp bx, ax jne .L3001.L2001 mov [edi],ax; mov [ecx],dhx mov [ebp],dx mov [edi+2],ax mov [ebp+2],bx jmp .L11.L3001; cmp dhx, dlx cmp dx, cx jne .L5001.L4001; mov [edi],dx ; mmmh; mov [ecx],dx ; mmmh; mov [edi],dl; mov [ecx],dl; mov [edi+1],dh; mov [ecx+1],dh mov [edi],cx mov [ebp],cx mov [edi+2],dx mov [ebp+2],dx jmp .L11.L5001 mov [edi],cx; mov [ecx],dhx mov [ebp],dx mov [edi+2],ax mov [ebp+2],bx jmp .L11.L6001; cmp dlx, ax cmp cx, ax jne .L12001.L7001; cmp dlx, dhx cmp cx, dx jne .L9001.L8001; mov [edi],dx ; mmmh; mov [ecx],dx ; mmmh; mov [edi],dl; mov [ecx],dl; mov [edi+1],dh; mov [ecx+1],dh; mov [edi],dlx; mov [ecx],dlx mov [edi],cx mov [ebp],cx; mov [edi+2],dhx; mov [ecx+2],dhx mov [edi+2],dx mov [ebp+2],dx jmp .L11.L9001 cmp ax,bx jne .L11001.L10001; mov [edi],dlx mov [edi],cx mov [ebp],bx mov [edi+2],ax mov [ebp+2],bx jmp .L11.L11001.L12001; mov [edi],dlx; mov [ecx],dhx mov [edi],cx mov [ebp],dx mov [edi+2],ax mov [ebp+2],bx.L11 movq mm4, mm1 movq mm2, mm0 pcmpeqd mm7, mm7 ; set mm7 to FFFFFFFFFFFFFFFF ;pcmpeqb mm4, mm0 ; byte compare equal mm0 with mm1 and store in mm4 pcmpeqw mm4, mm0 ; word compare equal mm0 with mm1 and store in mm4 ;psllq mm2, 8 ; shift mm0 left one byte and store in mm2 psllq mm2, 16 ; shift mm0 left one word and store in mm2 movq mm3, mm0 movq mm5, mm4 ; store byte compare mm0 with mm1 in mm5 ;pcmpeqb mm2, mm0 ; byte compare mm0 with mm2 and store in mm2 pcmpeqw mm2, mm0 ; word compare mm0 with mm2 and store in mm2 ;psrlq mm3, 8 ; shift mm0 right one byte and store in mm3 psrlq mm3, 16 ; shift mm0 right one word and store in mm3 pand mm2, mm5 movq mm6, mm1 ; and mm5 with mm1 movq mm5, mm2 ; not mm2 and store in mm5 pxor mm5, mm7; psllq mm6, 8 psllq mm6, 16 pand mm2, mm0 ; and mm0 with mm2 pand mm5, mm6 por mm2, mm5 ; mm2 now contains right-bottom of quad ;pcmpeqb mm3, mm0 ; byte compare mm3 with mm0 and store in mm3 pcmpeqw mm3, mm0 ; word compare mm3 with mm0 and store in mm3 movq mm5, mm4 ; word compare of mm0 with mm1 store in mm5 pand mm3, mm4 movq mm5, mm3 ; not mm3 store in mm5 movq mm6, mm1 pxor mm5, mm7 pand mm3, mm0 ;psrlq mm6, 8 psrlq mm6, 16 pand mm5, mm6 ;psrlq mm2, 8 psrlq mm2, 16 por mm3, mm5 ; now write the 16 bytes of the bottom line movq mm4, mm2 movq mm6, mm2; punpcklbw mm4, mm3; punpckhbw mm6, mm3 punpcklwd mm4, mm3 punpckhwd mm6, mm3; movq [ecx+2],mm4 movq [ebp+4],mm4; movq [ecx+10],mm6 movq [ebp+12],mm6; start with top line movq mm2, mm1 movq mm3, mm1 movq mm4, mm0 pcmpeqd mm7, mm7 ; set mm7 to FFFFFFFFFFFFFFFF ;pcmpeqb mm4, mm1 ; byte compare equal mm0 with mm1 and store in mm4 pcmpeqw mm4, mm1 ; word compare equal mm0 with mm1 and store in mm4 ;psllq mm2, 8 ; shift mm0 left one byte and store in mm2 psllq mm2, 16 ; shift mm0 left one word and store in mm2 ;psrlq mm3, 8 ; shift mm0 right one byte and store in mm3 psrlq mm3, 16 ; shift mm0 right one word and store in mm3 movq mm5, mm4 ; store byte compare mm0 with mm1 in mm5 ;pcmpeqb mm2, mm1 ; byte compare mm0 with mm2 and store in mm2 pcmpeqw mm2, mm1 ; word compare mm0 with mm2 and store in mm2 pand mm2, mm5 movq mm5, mm2 ; not mm2 and store in mm5 pxor mm5, mm7 pand mm2, mm1 ; and mm0 with mm2 movq mm6, mm0 ; and mm5 with mm1 ;psllq mm6, 8 psllq mm6, 16 pand mm5, mm6 por mm2, mm5 ; mm2 now contains right-bottom of quad movq mm5, mm4 ; byte compare of mm0 with mm1 store in mm5 ;pcmpeqb mm3, mm1 ; byte compare mm3 with mm0 and store in mm3 pcmpeqw mm3, mm1 ; word compare mm3 with mm0 and store in mm3 pand mm3, mm5 movq mm5, mm3 ; not mm3 store in mm5 pxor mm5, mm7 pand mm3, mm1 movq mm6, mm0 ;psrlq mm6, 8 psrlq mm6, 16 pand mm5, mm6 por mm3, mm5 ; now write the 16 bytes of the top line ;psrlq mm2, 8 psrlq mm2, 16 movq mm4, mm2 movq mm6, mm2; punpcklbw mm4, mm3; punpckhbw mm6, mm3 punpcklwd mm4, mm3 punpckhwd mm6, mm3; movq [edi+2],mm4 movq [edi+4],mm4; psrlq mm0, 56 ; 64-8 = 56 psrlq mm0, 48 ; 64-16 = 48; movq [edi+10],mm6 movq [edi+12],mm6 ;psrlq mm1, 56 psrlq mm1, 48;; restore ebp and ecx; pop ecx pop ebp;; End of restore; add edi, 16 add ecx, 16 movd edx, mm0 mov word [_dlx], dx movd ebx, mm1 mov dx, bx pop eax xchg eax,ecx dec ecx jnz near .L0.L333 mov esi, _eagle_buffer mov ebx, _eagle_buffer+4096 and esi, 0xFFFFFFE0 and ebx, 0xFFFFFFE0 mov ecx,[esp+16+32] mov edx,[esp+20+32] mov ax, es push ax mov es, dx mov edi,[esp+26+32] mov eax,[esp+30+32] ;shr ecx, 5 shr ecx, 4 push ecx.first_loop: 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] movq [es:edi], mm0 movq [es:edi + 8], mm1 movq [es:edi + 16], mm2 movq [es:edi + 24], mm3 movq [es:edi + 32], mm4 movq [es:edi + 40], mm5 movq [es:edi + 48], mm6 movq [es:edi + 56], mm7 add edi, 64 add esi, 64 dec ecx jnz .first_loop pop ecx mov edi, eax mov esi, ebx.second_loop: 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] movq [es:edi], mm0 movq [es:edi + 8], mm1 movq [es:edi + 16], mm2 movq [es:edi + 24], mm3 movq [es:edi + 32], mm4 movq [es:edi + 40], mm5 movq [es:edi + 48], mm6 movq [es:edi + 56], mm7 add edi, 64 add esi, 64 dec ecx jz .continue_here jmp .second_loop.continue_here pop ax mov es, ax pop eax mov ebp, eax emms popad ret;;eagle_bmp ( unsigned long *lb,; unsigned long *lb2,; int width,; screen_address1,; screen_address2 )_eagle_bmp: push ebp mov ebp, esp mov esi,[ebp+8] mov ebx,[ebp+12] mov ecx,[ebp+16] mov edi, _eagle_buffer mov eax, _eagle_buffer+2048 and edi, 0xFFFFFFE0 and eax, 0xFFFFFFE0 mov ebp, ebx shr ecx,2 xor dx,dx.L0 push ecx xchg eax,ecx mov eax, [esi] add esi,4 mov ebx,[ebp] add ebp,4 push ebp cmp eax,ebx jne near .L999 rol eax, 8 cmp eax,ebx jne .L998 jmp .L997.L998 ror eax,8 jmp .L999.L997 ror eax,8 cmp dl, dh jne near .L999 cmp dl, al jne near .L999 mov [edi],eax mov [ecx],ebx mov [edi+4],eax mov [ecx+4],ebx add edi,8 add ecx,8 pop eax mov ebp,eax pop eax xchg eax,ecx dec ecx cmp ecx, 0 je near .L333 push ecx xchg eax,ecx mov eax, [esi] add esi,4 cmp ebx, eax jne .L888 mov ebx,[ebp] add ebp,4 cmp ebx, eax jne .L889 mov [edi],eax mov [ecx],ebx mov [edi+4],eax pop eax mov [ecx+4],ebx add edi,8 add ecx,8 xchg eax,ecx dec ecx jnz near .L0 jmp .L333.L888 mov ebx,[ebp] add ebp, 4.L889 push ebp.L999 cmp dh, bl jne .L6001.L1001 cmp bl, al jne .L3001.L2001 mov [edi],al mov [ecx],dh mov [edi+1],al mov [ecx+1],bl jmp .L11.L3001 cmp dh, dl jne .L5001.L4001 mov [edi], dx mov [ecx], dx jmp .L11.L5001 mov [edi],dl mov [ecx],dh mov [edi+1],al mov [ecx+1],bl jmp .L11.L6001 cmp dl, al jne .L12001.L7001 cmp dl, dh jne .L9001.L8001 mov [edi], dx mov [ecx], dx jmp .L11.L9001 cmp al,bl jne .L11001.L10001 mov [edi],dl mov [ecx],bl mov [edi+1],al mov [ecx+1],bl jmp .L11.L11001.L12001 mov [edi],dl mov [ecx],dh mov [edi+1],al mov [ecx+1],bl.L11 cmp bl, bh jne .L6002.L1002 cmp bh, ah jne .L3002.L2002 mov [edi+2],bx mov [ecx+2],bx jmp .L12.L3002 cmp bl, al jne .L5002.L4002 mov [edi+2],bx mov [ecx+2],bx jmp .L12.L5002 mov [edi+2],ax mov [ecx+2],bx jmp .L12.L6002 cmp al, ah jne .L12002.L7002 cmp al, bl jne .L9002.L8002 mov [ecx+2],ax mov [edi+2],ax jmp .L12.L9002 cmp ah,bh jne .L11002.L10002 mov [ecx+2],ax mov [edi+2],ax jmp .L12.L11002.L12002 mov [edi+2], ax mov [ecx+2], bx .L12 ror ebx, 8 ror eax, 8 cmp bl, bh jne .L6003.L1003 cmp bh, ah jne .L3003.L2003 mov [edi+4],bx mov [ecx+4],bx jmp .L13.L3003 cmp bl, al jne .L5003.L4003 mov [edi+4],bx mov [ecx+4],bx jmp .L13.L5003 mov [edi+4], ax mov [ecx+4], bx jmp .L13.L6003 cmp al, ah jne .L12003.L7003 cmp al, bl jne .L9003.L8003 mov [ecx+4], ax mov [edi+4], ax jmp .L13.L9003 cmp ah,bh jne .L11003.L10003 mov [ecx+4], ax mov [edi+4], ax jmp .L13.L11003.L12003 mov [edi+4],ax mov [ecx+4],bx.L13 ror ebx, 8 ror eax, 8 cmp bl, bh jne .L6004.L1004 cmp bh, ah jne .L3004.L2004 mov [edi+6], bx mov [ecx+6], bx jmp .L14.L3004 cmp bl, al jne .L5004.L4004 mov [edi+6], bx mov [ecx+6], bx jmp .L14.L5004 mov [edi+6], ax mov [ecx+6], bx jmp .L14.L6004 cmp al, ah jne .L12004.L7004 cmp al, bl jne .L9004.L8004 mov [ecx+6], ax mov [edi+6], ax jmp .L14.L9004 cmp ah,bh jne .L11004.L10004 mov [ecx+6], ax mov [edi+6], ax jmp .L14.L11004.L12004 mov [edi+6], ax mov [ecx+6], bx.L14 add edi, 8 mov dl, ah add ecx, 8 mov dh, bh pop eax; mov eax, ebp Was this an unnoticed error ? mov ebp, eax pop eax xchg eax,ecx dec ecx jnz near .L0.L333 mov esi, _eagle_buffer mov ebx, _eagle_buffer+2048 and esi, 0xFFFFFFE0 and ebx, 0xFFFFFFE0 mov ecx,[esp+16]; mov edx,[esp+20]; mov ax, es; push ax; mov es, dx mov edi,[esp+20] mov eax,[esp+24] cld push ecx rep movsd pop ecx mov edi, eax mov esi, ebx rep movsd; pop ax; mov es, ax pop eax mov ebp, eax ret SECTION .bss_offset32 resb 32_eagle_buffer resb 16384_tripline1 resb 8_tripline2 resb 8_tripline3 resb 8_dlx resb 32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -