内联汇编优化的TAlpha::Mask 部分汇编
来源:互联网 发布:mac电源已接通 灯不亮 编辑:程序博客网 时间:2024/04/27 14:03
内联汇编优化版
#ifdef _calpha_using_inlineasm_ i = Height - 1; if (i < 0) return; __asm { mov ecx, Width mov eax, ptrDest mov edx, ptrSrc mov esi, idPixelAdd @2: mov edi, ecx @1: mov bl, byte ptr [eax] cmp bl, bmaskr je short @3 mov bl, byte ptr [edx] cmp bl, bmaskb je short @4 inc edx mov byte ptr [eax], bl inc eax mov bx, word ptr [edx] mov word ptr [eax], bx add eax, esi add edx, isPixelAdd jmp short @5 @4: add eax, ld add edx, ls jmp short @5 @3: mov bl, byte ptr [edx] inc edx mov byte ptr [eax], bl inc eax mov bx, word ptr [edx] mov word ptr [eax], bx add eax, esi add edx, isPixelAdd @5: dec edi test edi, edi jge short @1 add eax, idLineAdd add edx, isLineAdd dec i cmp i, 00000000 jge short @2 }
汇编代码
:004252C5 48 dec eax:004252C6 8945DC mov dword ptr [ebp-24], eax ; dword ptr [ebp-24] = i:004252C9 8B4DF4 mov ecx, dword ptr [ebp-0C] ; ecx = Width:004252CC 8B45F0 mov eax, dword ptr [ebp-10] ; eax = ptrDest:004252CF 8B55EC mov edx, dword ptr [ebp-14] ; edx = ptrSrc:004252D2 8B7514 mov esi, dword ptr [ebp+14] ; esi = idPixelAdd:004252D5 89CF mov edi, ecx ; edi = j:004252D7 8A18 mov bl, byte ptr [eax]:004252D9 3A5DE3 cmp bl, byte ptr [ebp-1D]:004252DC 7420 je 004252FE:004252DE 8A1A mov bl, byte ptr [edx]:004252E0 3A5DE2 cmp bl, byte ptr [ebp-1E]:004252E3 7411 je 004252F6:004252E5 42 inc edx ; ptrSrc++:004252E6 8818 mov byte ptr [eax], bl:004252E8 40 inc eax ; ptrDest++:004252E9 668B1A mov bx, word ptr [edx]:004252EC 668918 mov word ptr [eax], bx:004252EF 01F0 add eax, esi ; ptrDest += idPixelAdd:004252F1 035510 add edx, dword ptr [ebp+10] ; ptrSrc += isPixelAdd:004252F4 EB19 jmp 0042530F:004252F6 0345E8 add eax, dword ptr [ebp-18] ; ptrDest += ld:004252F9 0355E4 add edx, dword ptr [ebp-1C] ; ptrSrc += ls:004252FC EB11 jmp 0042530F:004252FE 8A1A mov bl, byte ptr [edx]:00425300 42 inc edx:00425301 8818 mov byte ptr [eax], bl:00425303 40 inc eax:00425304 668B1A mov bx, word ptr [edx]:00425307 668918 mov word ptr [eax], bx:0042530A 01F0 add eax, esi:0042530C 035510 add edx, dword ptr [ebp+10]:0042530F 4F dec edi ; j--:00425310 85FF test edi, edi:00425312 7DC3 jge 004252D7:00425314 03451C add eax, dword ptr [ebp+1C] ; ptrDest += idLineAdd:00425317 035518 add edx, dword ptr [ebp+18] ; ptrSrc += isLineAdd:0042531A FF4DDC dec [ebp-24] ; i--:0042531D 837DDC00 cmp dword ptr [ebp-24], 00000000:00425321 7DB2 jge 004252D5:00425323 E98F020000 jmp 004255B7
c++代码
#else for (i = Height - 1; i >= 0; i--) { register int j = Width; do { if (*ptrDest != bmaskr) //bmaskrgb[0]:Dest background color[blue part] { if (*ptrSrc != bmaskb) //bmaskb:Src background color[blue part] { *ptrDest = *ptrSrc; ptrDest++; ptrSrc++; *((unsigned short int *)(ptrDest)) = *((unsigned short int *)(ptrSrc)); ptrDest += idPixelAdd; ptrSrc += isPixelAdd; } else { ptrDest += ld; ptrSrc += ls; } } else { *ptrDest = *ptrSrc; ptrDest++; ptrSrc++; *((unsigned short int *)(ptrDest)) = *((unsigned short int *)(ptrSrc)); ptrDest += idPixelAdd; ptrSrc += isPixelAdd; } j--; }while(j >= 0); ptrDest += idLineAdd; ptrSrc += isLineAdd; } #endif
汇编代码
:004252B8 4B dec ebx ; i = Height - 1:004252B9 895DE8 mov dword ptr [ebp-18], ebx ; dword ptr [ebp-18] = i:004252BC 837DE800 cmp dword ptr [ebp-18], 00000000 ; for 的判断, inline asm 去掉了:004252C0 0F8C90020000 jl 00425556:004252C6 8BF9 mov edi, ecx ; j = Width:004252C8 8A18 mov bl, byte ptr [eax]:004252CA 3A5DEF cmp bl, byte ptr [ebp-11]:004252CD 7422 je 004252F1:004252CF 8A1A mov bl, byte ptr [edx]:004252D1 3A5DEE cmp bl, byte ptr [ebp-12]:004252D4 7413 je 004252E9:004252D6 8A1A mov bl, byte ptr [edx] ; 重复, inline asm 去掉了:004252D8 42 inc edx:004252D9 8818 mov byte ptr [eax], bl:004252DB 40 inc eax:004252DC 668B1A mov bx, word ptr [edx]:004252DF 668918 mov word ptr [eax], bx:004252E2 03C6 add eax, esi:004252E4 035510 add edx, dword ptr [ebp+10]:004252E7 EB19 jmp 00425302:004252E9 0345F4 add eax, dword ptr [ebp-0C]:004252EC 0355F0 add edx, dword ptr [ebp-10]:004252EF EB11 jmp 00425302:004252F1 8A1A mov bl, byte ptr [edx]:004252F3 42 inc edx:004252F4 8818 mov byte ptr [eax], bl:004252F6 40 inc eax:004252F7 668B1A mov bx, word ptr [edx]:004252FA 668918 mov word ptr [eax], bx:004252FD 03C6 add eax, esi:004252FF 035510 add edx, dword ptr [ebp+10]:00425302 4F dec edi ; j--:00425303 85FF test edi, edi:00425305 7DC1 jge 004252C8:00425307 03451C add eax, dword ptr [ebp+1C]:0042530A 035518 add edx, dword ptr [ebp+18]:0042530D FF4DE8 dec [ebp-18] ; i--:00425310 837DE800 cmp dword ptr [ebp-18], 00000000:00425314 7DB0 jge 004252C6:00425316 E93B020000 jmp 00425556
- 内联汇编优化的TAlpha::Mask 部分汇编
- 内联汇编优化的TAlpha::FillSolidColor 部分汇编
- 内联汇编优化的TAlpha::FillSolidColor
- TAlpha::FillSolidColor 部分汇编
- TAlpha::Negative 部分汇编
- 汇编总结-第三部分_1_内联汇编
- 内联汇编和汇编指令的说明
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- 内联汇编
- Objective-C语法之Object对象的那些事儿(五)
- winsock之WSAAsyncSelect()
- 安装httpd服务器提示APR not found的解决办法
- 验证手机号
- linux work with win
- 内联汇编优化的TAlpha::Mask 部分汇编
- std::string 与 std::wstring 转换方法的效率比较
- linux下avi文件解析(附源码)
- Vim修改键盘映射
- string 与 LPTSTR 转换
- Pinterest:物的关系网
- 灵活运用ReentrantLock及volatile构造线程安全的CopyOnWriteArrayList
- Buffer busy wiats系列 --详细
- 创建Java线程池