⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用masmplus学习汇编语言(8) .txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    mov wndclass.lpszMenuName,NULL
    mov wndclass.lpszClassName,offset szAppName

    mov wndclass.hIconSm,0
    
    invoke RegisterClassEx, ADDR wndclass
    .if (EAX==0)
        invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),addr szAppName,MB_ICONERROR          
        ret
    .endif

    invoke CreateWindowEx,
                    NULL,
                    ADDR szAppName,                          ;window class name
                    CTXT("halo effect"), ;window caption
                    WS_OVERLAPPEDWINDOW,                     ;window style
                    CW_USEDEFAULT,                             ;initial x position
                    CW_USEDEFAULT,                             ;initial y position
                    CW_USEDEFAULT,                          ;initial x size
                    CW_USEDEFAULT,                             ;initial y size
                    NULL,                                         ;parent window handle
                    NULL,                                         ;window menu handle
                    hInstance,                                 ;program instance handle
                    NULL                                         ;creation parameters
    mov hWnd,eax
    
    invoke ShowWindow,hWnd,iCmdShow
    invoke UpdateWindow,hWnd
    
    StartLoop:
        invoke GetMessage,ADDR msg,NULL,0,0
            cmp eax, 0
            je ExitLoop
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage, ADDR msg
            jmp StartLoop
    ExitLoop:
    
    mov eax,msg.wParam
    ret
WinMain endp

WndProc proc hwnd:DWORD,message:DWORD,wParam :DWORD,lParam :DWORD

    LOCAL hdc                  :HDC
    LOCAL tmpx,tmpy        :DWORD
    LOCAL ps                  :PAINTSTRUCT 
    LOCAL szBuffer[256]    :BYTE 
    
    .if message == WM_SIZE
        mov         eax,lParam             ;cxClient = LOWORD (lParam)
        and         eax,0FFFFh
        mov         cxClient,eax
        mov    rectwhole.right,eax
        
        mov         eax,lParam
        shr         eax,16
        mov         cyClient,eax         ;cyClient = HIWORD (lParam)
        mov         rectwhole.bottom,eax
            ret          

        .elseif message == WM_KEYDOWN
                .if     wParam == VK_UP
                        add         grRight,5
                .elseif wParam == VK_DOWN
                        sub         grRight,5
                .elseif wParam == VK_LEFT
                        add         grLeft,5
                .elseif wParam == VK_RIGHT
                        sub         grLeft,5
                .endif         
                invoke     InvalidateRect,hwnd,addr rectwhole,FALSE
    .elseif message == WM_PAINT
        invoke    BeginPaint,hwnd,addr ps
        mov         hdc,eax

        xor         edx,edx
        mov         eax,cxClient    
        mov         ecx,9
        div         ecx
        mov         tmpx,eax         ;tmpx = cxClient / 9

        xor         edx,edx
        mov         eax,cyClient    
        mov         ecx,5
        div         ecx
        mov         tmpy,eax         ;tmpy = cyClient / 5
        
        mov         eax,tmpy
        mov         ecx,4
        mul         ecx
        push         eax             ;eax = 4 * cyClient / 5
        mov         rectleft.bottom,eax
        
        mov         eax,tmpx
        mov         ecx,4
        mul         ecx
        push         eax             ;eax = 4 * cxClient / 9
        mov         rectleft.right,eax
        
        mov         eax,tmpy
        push         eax
        mov         rectleft.top,eax
        
        mov         eax,tmpx
        push         eax
        mov         rectleft.left,eax
        
        push         hdc
        call         Rectangle    ;绘制左边大长方形

        xor         eax,eax
        mov         al,grLeft
        shl         eax,8
        mov         al,grLeft
        shl         eax,8
        mov         al,grLeft
        mov         ebx,eax
    invoke    CreateSolidBrush,eax
        mov         ebx,eax
    invoke    FillRect,hdc,addr rectleft,ebx
    
        mov         eax,tmpy
        mov         ecx,3
        mul         ecx
        push         eax             ;eax = 3 * cyClient / 9
        
        mov         eax,tmpx
        mov         ecx,3
        mul         ecx
        push         eax             ;eax = 3 * cxClient / 5

        mov         eax,tmpy
        add         eax,eax
        push         eax

        mov         eax,tmpx
        add         eax,eax
        push         eax
        
        push         hdc
        call         Rectangle    ;绘制左边小长方形     

    
        push         tmpy
        
        mov         eax,tmpx
        mov         ecx,5
        mul         ecx
        push         eax             ;eax = 5 * cxClient / 9

        mov         eax,tmpy
        mov         ecx,4
        mul         ecx
        push         eax

        mov         eax,tmpx
        mov         ecx,8
        mul         ecx
        push         eax
        
        push         hdc
        call         Rectangle    ;绘制右边大长方形         

        mov         eax,tmpy
        mov         ecx,3
        mul         ecx
        push         eax
        mov         rectright.bottom,eax
        
        mov         eax,tmpx
        mov         ecx,7
        mul         ecx
        push         eax             ;eax = 8 * cxClient / 9
        mov         rectright.right,eax
        
        mov         eax,tmpy
        mov         ecx,2
        mul         ecx
        push         eax
        mov         rectright.top,eax
        
        mov         eax,tmpx
        mov         ecx,6
        mul         ecx
        push         eax
        mov         rectright.left,eax
        
        push         hdc
        call         Rectangle    ;绘制右边小长方形
        
        xor         eax,eax
        mov         al,grRight
        shl         eax,8
        mov         al,grRight
        shl         eax,8
        mov         al,grRight
    invoke    CreateSolidBrush,eax
        mov         ebx,eax
    invoke    FillRect,hdc,addr rectright,ebx

        invoke    EndPaint,hwnd,addr ps
        ret
    .elseif message == WM_DESTROY
        
        invoke PostQuitMessage,NULL         
    ret    
    .endif    
    
    invoke DefWindowProc,hwnd, message, wParam, lParam
    ret
    
WndProc endp
END START


    运行结果:



    你可以使用光标上下左右调整明暗。试试看什么时候感觉差别最大。

    江湖传闻:据说美国码头搬运军火的装运工曾经因为箱子太沉太重而罢工。后来心理学家给军方一个建议,

就是使用绿色的箱子装军火,而原来的箱子都是黑色的。改变颜色之后,装运工普遍觉得箱子“轻了”。

    个人观点:在目前所有的科学研究中,人类在心理学方面成就不大,思维是非线性不容易量化的,并且

出于道德伦理上面的限制,科学家也无法做过多的试验,而实验是科学的基础。很多时候,心理学的实验凭借

受试者的“感觉”,也是非常不精确的。

参考:

1.        http://www.bioon.com/popular/math/305225.shtml

2.        http://zhidao.baidu.com/question/2311680.html

色彩的膨胀与收缩感 

据说法兰西国旗一开始是由面积完全相等的红、白、蓝三色制成的,但是旗帜升到空中后在感觉是三色的面积并不相等,

于是召集了有关色彩专家进行专门研究,最后把三色的比例调整到红35%、白33%、蓝37%的比例时才感觉到面积相等。

这究竟是什么原因呢? 

因为当各种不同波长的光同时通过水晶体时,聚集点并不完全在视网膜的一个平面上,因此在视网膜上的影像的清晰度

就有一定差别。长波长的暖色影像似焦距不准 确,因此在视网膜上所形成的影像模糊不清,似乎具有一种扩散性;短波长

的冷色影像就比较清晰,似乎具有某种收缩性。所以,我们平时在凝视红色的时候,时间 长了会产生眩晕现象,景物形象

模糊不清似有扩张运动的感觉。如果我们改看青色,就没有这种现象了。如果我们将红色与蓝色对照着看,由于色彩同时

对比的作 用,其面积错视现象就会更加明显。 

色彩的膨胀、收缩感不仅与波长有关,而且还与明度有关。由于“球面像差”物理原理,光亮的物体在视网膜上所成影像

的轮廓外似乎有一圈光圈围绕着,使物体在 视网膜上的影像轮廓扩大了,看起来就觉得比实物大一些,如通电发亮的电灯

钨丝比通电前的钨丝似乎要粗得多,生理物理学上称这种现象为“光渗”现象。歌德在 《论颜色的科学》一文中指出: 

“两个圆点同样面积大小,在白色背景上的黑圆点比黑色背景上的白圆点要小1/5。”同一个人。日出和日落时,地平线上

仿佛出现一个凹陷似的,这也是光渗作 用而引起的视觉现象。 

宽度相同的印花黑白条纹布,感觉上白条子总比黑条子宽;同样大小的黑白方格子布,白方格子要比黑方格略大一些。超市中,

小商品、小包装若要使它显眼一些, 宜采用鲜艳的浅色;如果要它显得高贵精致,宜采用沉着的深色或黑色。为了扩大建筑

或交通工具的室内空间感,色彩设计宜采用乳白、浅米、象牙等淡雅明快的色 调,像卫生间等特别狭小的空间还可以利用

镜子作墙面,利用镜子的反射来增加面积的宽畅度和明亮度。



--------------------------------------------------------------------------------
<<<上一篇  欢迎访问AoGo汇编小站:http://www.aogosoft.com/ 下一篇>>>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -