VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:636回复:0

关于Iczelion Win32“汇编”教程

楼主#
更多 发布于:2002-11-04 13:23
我刚看了下那个中文版,我不知道下面这段从那里摘出来的代码和C有什么不同。
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hDlg:HWND
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,DLGWINDOWEXTRA
    push  hInst
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_BTNFACE+1
    mov   wc.lpszMenuName,OFFSET MenuName
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL
    mov   hDlg,eax
    invoke ShowWindow, hDlg,SW_SHOWNORMAL
    invoke UpdateWindow, hDlg
    invoke GetDlgItem,hDlg,IDC_EDIT
    invoke SetFocus,eax
    .WHILE TRUE
        invoke GetMessage, ADDR msg,NULL,0,0
        .BREAK .IF (!eax)
       invoke IsDialogMessage, hDlg, ADDR msg
        .IF eax ==FALSE
            invoke TranslateMessage, ADDR msg
            invoke DispatchMessage, ADDR msg
        .ENDIF
    .ENDW
    mov     eax,msg.wParam
    ret
WinMain endp

改写成C就是
DWORD WinMain(................)
{
WNDCLASSEX wc;
MSG msg;
HWND hDlg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.xxx = xxxxx;
............
LoadIcon(NULL,IDI_APPLICATION);
....................
while(TRUE)
{
if(!GetMessage(&msg,NULL,0,0)) break;
if(sDialogMessage(hDlg,msg) == FALSE)
{
            TranslateMessage(msg);
            DispatchMessage(msg );
}
}
}

好简单,几乎和C一模一样。
但既然这样,我不明白有什么理由不用C而用汇编。而且C里还可以内嵌汇编。
这种写法,失去了汇编的乐趣。
如果只用invoke或者带参数的call,倒是可以理解,因为这样只是少写几个push,你还能完全控制代码。但那些.IF之类的,把代码的控制完全交给汇编器了。这种情况汇编器更像一个编译器,那么这种汇编真的和C没什么区别,失去了玩弄汇编的乐趣。
很多用MASM的人奉Iczelion教程为经典,这东西在Win32方面确实值得一看,但在汇编方面,则实在没什么值得一看的了。
大多数用MASM的人都这样写代码,虽然可以不这么写,完全自己写,但我还是不敢用MASM了。
btw,TASM里一样可以写成上面那样,但我看到的比较少,所以不会反感。


[编辑 -  11/4/02 by  Koms Bomb]
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
游客

返回顶部