.版本 2
.程序集 窗口程序集_启动窗口
.程序集变量 目标位图, 整数型
.程序集变量 目标位图_hdc, 整数型
.程序集变量 目标位图_句柄, 整数型
.程序集变量 源位图, 整数型
.程序集变量 源位图_hdc, 整数型
.程序集变量 源位图_句柄, 整数型
.子程序 __启动窗口_创建完毕
.局部变量 BITMAPINFO, BITMAPINFO
.局部变量 位图句柄, 整数型
.局部变量 图形, GP图形
.局部变量 图像, GP图像
.局部变量 time, 整数型
.局部变量 位图, GP位图
Gdiplus初始化 ()
目标位图_hdc = CreateCompatibleDC (0)
BITMAPINFO.bmiHeader.biSize = 40
BITMAPINFO.bmiHeader.biBitCount = 32
BITMAPINFO.bmiHeader.biWidth = 1024
BITMAPINFO.bmiHeader.biHeight = 768
BITMAPINFO.bmiHeader.biPlanes = 1
BITMAPINFO.bmiHeader.biCompression = 0
目标位图_句柄 = CreateDIBSection (目标位图_hdc, BITMAPINFO, 0, 目标位图, 0, 0)
SelectObject (目标位图_hdc, 目标位图_句柄)
源位图_hdc = CreateCompatibleDC (0)
BITMAPINFO.bmiHeader.biSize = 40
BITMAPINFO.bmiHeader.biBitCount = 32
BITMAPINFO.bmiHeader.biWidth = 1024
BITMAPINFO.bmiHeader.biHeight = 768
BITMAPINFO.bmiHeader.biPlanes = 1
BITMAPINFO.bmiHeader.biCompression = 0
源位图_句柄 = CreateDIBSection (源位图_hdc, BITMAPINFO, 0, 源位图, 0, 0)
SelectObject (源位图_hdc, 源位图_句柄)
图像.创建自字节集 (#图片1)
图形.创建自DC (源位图_hdc)
图形.画图像缩放 (图像, 0, 0, 1024, 768)
图像.销毁 ()
图形.销毁 ()
time = 取启动时间 ()
.计次循环首 (10000, )
BitBlt (目标位图_hdc, 0, 0, 1024, 768, 源位图_hdc, 0, 0, #光栅运算_复制)
.计次循环尾 ()
输出调试文本 (取启动时间 () - time)
time = 取启动时间 ()
.计次循环首 (10000, )
iblit_SSE (目标位图, 4096, 源位图, 4096, 1024, 768, 4, 4096)
.计次循环尾 ()
输出调试文本 (取启动时间 () - time)
.子程序 iblit_SSE, 整数型
.参数 dst, 整数型
.参数 pitch1, 整数型, , 目标图片的宽度*4
.参数 src, 整数型
.参数 pitch2, 整数型, , 源图片的宽度*4
.参数 w, 整数型, , 图片的宽度
.参数 h, 整数型, , 图片的高度
.参数 pixelbyte, 整数型, , 每个像素占用多少字节
.参数 linesize, 整数型
' push ebp
' mov ebp , esp
置入代码 ({ 81, 139, 69, 28, 131, 125, 32, 1, 139, 77, 36, 15, 68, 77, 24, 137, 69, 28, 139, 69, 12, 41, 200, 137, 69, 252, 139, 69, 20, 41, 200, 137, 69, 20, 137, 200, 193, 248, 6, 137, 69, 36, 137, 200, 83, 193, 248, 2, 131, 225, 3, 131, 224, 15, 86, 137, 69, 32, 87, 137, 77, 12, 139, 117, 16, 139, 125, 8, 15, 24, 70, 64, 15, 24, 71, 64, 15, 24, 6, 15, 24, 7, 139, 69, 36, 193, 224, 3, 139, 93, 32, 139, 85, 12, 252, 15, 24, 6, 15, 24, 70, 64, 15, 24, 134, 128, 0, 0, 0, 15, 24, 134, 192, 0, 0, 0, 137, 193, 247, 217, 141, 52, 198, 141, 60, 199, 133, 192, 116, 99, 15, 24, 132, 206, 0, 1, 0, 0, 15, 24, 132, 206, 128, 0, 0, 0, 15, 111, 4, 206, 15, 111, 76, 206, 8, 15, 111, 84, 206, 16, 15, 111, 92, 206, 24, 15, 111, 100, 206, 32, 15, 111, 108, 206, 40, 15, 111, 116, 206, 48, 15, 111, 124, 206, 56, 15, 231, 4, 207, 15, 231, 76, 207, 8, 15, 231, 84, 207, 16, 15, 231, 92, 207, 24, 15, 231, 100, 207, 32, 15, 231, 108, 207, 40, 15, 231, 116, 207, 48, 15, 231, 124, 207, 56, 131, 193, 8, 117, 157, 15, 24, 6, 137, 217, 243, 165, 137, 209, 243, 164, 3, 125, 252, 3, 117, 20, 15, 24, 6, 255, 77, 28, 15, 133, 93, 255, 255, 255, 15, 174, 248, 15, 119, 95, 94, 49, 192, 91, 137, 236, 93, 194, 32, 0 })
返回 (0)
' push ecx
' mov eax , dword [ebp+1Ch]
' cmp dword [ebp+20h] , 00000001h
' mov ecx , dword [ebp+24h]
' cmove ecx , dword [ebp+18h]
' mov dword [ebp+1Ch] , eax
' mov eax , dword [ebp+0Ch]
' sub eax , ecx
' mov dword [ebp-04h] , eax
' mov eax , dword [ebp+14h]
' sub eax , ecx
' mov dword [ebp+14h] , eax
' mov eax , ecx
' sar eax , 00000006h
' mov dword [ebp+24h] , eax
' mov eax , ecx
' push ebx
' sar eax , 00000002h
' and ecx , 00000003h
' and eax , 0000000Fh
' push esi
' mov dword [ebp+20h] , eax
' push edi
' mov dword [ebp+0Ch] , ecx
' mov esi , dword [ebp+10h]
' mov edi , dword [ebp+08h]
' prefetchNTA byte [esi+00000040h]
' prefetchNTA byte [edi+00000040h]
' prefetchNTA byte [esi]
' prefetchNTA byte [edi]
' mov eax , dword [ebp+24h]
' shl eax , 00000003h
' mov ebx , dword [ebp+20h]
' mov edx , dword [ebp+0Ch]
' cld
' c: prefetchNTA byte [esi]
' prefetchNTA byte [esi+00000040h]
' prefetchNTA byte [esi+00000080h]
' prefetchNTA byte [esi+000000C0h]
' mov ecx , eax
' neg ecx
' lea esi , dword [esi+eax*8]
' lea edi , dword [edi+eax*8]
' test eax , eax
' je a
' b: prefetchNTA byte [esi+ecx*8+00000100h]
' prefetchNTA byte [esi+ecx*8+00000080h]
' movq mm0 , qword [esi+ecx*8]
' movq mm1 , qword [esi+ecx*8+08h]
' movq mm2 , qword [esi+ecx*8+10h]
' movq mm3 , qword [esi+ecx*8+18h]
' movq mm4 , qword [esi+ecx*8+20h]
' movq mm5 , qword [esi+ecx*8+28h]
' movq mm6 , qword [esi+ecx*8+30h]
' movq mm7 , qword [esi+ecx*8+38h]
' movntq qword [edi+ecx*8] , mm0
' movntq qword [edi+ecx*8+08h] , mm1
' movntq qword [edi+ecx*8+10h] , mm2
' movntq qword [edi+ecx*8+18h] , mm3
' movntq qword [edi+ecx*8+20h] , mm4
' movntq qword [edi+ecx*8+28h] , mm5
' movntq qword [edi+ecx*8+30h] , mm6
' movntq qword [edi+ecx*8+38h] , mm7
' add ecx , 00000008h
' jne b
' a: prefetchNTA byte [esi]
' mov ecx , ebx
' rep movsd
' mov ecx , edx
' rep movsb
' add edi , dword [ebp-04h]
' add esi , dword [ebp+14h]
' prefetchNTA byte [esi]
' dec dword [ebp+1Ch]
' jne c
' sfence
' emms
' pop edi
' pop esi
' xor eax , eax
' pop ebx
' mov esp , ebp
' pop ebp
' retn 0020h
bitblt易语言源码
易语言BitBlt