SOGO論壇
  登入   註冊   找回密碼
查看: 416|回覆: 0
列印 上一主題 下一主題

[技術文章] MS. Windows系統下的組合語言 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-8 01:03:27 |只看該作者 |倒序瀏覽


您也可以使用組合語言撰寫 MS Windows 的視窗程式,但這並不是一件簡單的事情,也沒有絕對的必要性,因為您可以使用 C/C++ 語言或更高階的 C#, VB 等語言撰寫視窗程式。但是,如果您真的希望學習如何以組合語言撰寫MS Windows 底下的視窗程式,那您可以下載MASM32 這個組譯器並安裝後,就會發現在C:\MASM32資料夾中附有許多進階的組合語言範例,其中包含許多組合語言版的MS Windows視窗程式。範例一就是其中用來顯示對話框的一個範例。其執行畫面如圖一所示。但是,筆者並非 MASM32 的專家,探討這些程式的原理已經超越筆者的能力範圍,在此筆者僅能提供讀者這些基本資訊,詳細的程式設計方式留待有興趣的讀者自行研究。

範例一、以MASM32撰寫組合語言以顯示對話視窗的範例

  .486                      ; create 32 bit code
  .model flat, stdcall      ; 32 bit memory model
  option casemap :none      ; case sensitive

  include \masm32\include\dialogs.inc
  include simple.inc

  dlgproc PROTO :DWORD,:DWORD,:DWORD,:DWORD
  .code
start:
  mov hInstance, FUNC(GetModuleHandle,NULL)
  call main
  invoke ExitProcess,eax
main proc
  Dialog "Simple Dialog","MS Sans Serif",10, \ ; caption,font,pointsize
    WS_OVERLAPPED or WS_SYSMENU or DS_CENTER, \ ; style
    2, \ ; control count
    50,50,150,80, \ ; x y co-ordinates
    1024 ; memory buffer size
  DlgButton "&OK",WS_TABSTOP,48,40,50,15,IDCANCEL
  DlgStatic "Simple Dialog Written In MASM32",SS_CENTER,2,20,140,9,100
  CallModalDialog hInstance,0,dlgproc,NULL
  ret
main endp

dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
  .if uMsg == WM_INITDIALOG
    invoke SendMessage,hWin,WM_SETICON,1,FUNC(LoadIcon,NULL,IDI_ASTERISK)
  .elseif uMsg == WM_COMMAND
    .if wParam == IDCANCEL
      jmp quit_dialog
    .endif
  .elseif uMsg == WM_CLOSE
    quit_dialog:
    invoke EndDialog,hWin,0
  .endif
  xor eax, eax
  ret
dlgproc endp
end start

WindowsAssemblyRun.jpg

圖一、<範例一>的執行結果

由於許多歷史因素,IBM PC的組合語言程式設計已經變得非常複雜,無法詳細的納入本書的討論範圍。尤其是在 MS Windows 底下的組合語言程式設計,更因為保護模式等機制,而不容易入手。若讀者有興趣,可以嘗試在 MS DOS系統下,設計古老的16位元組合語言,這會有助於理解BIOS與DOS中斷機制等議題。如果您對MS Windows下的組合語言有興趣,則請安裝MASM32的組譯器,參考其中的範例,可以進一步理解使用組合語言撰寫 MS Windows 中視窗程式的方法。

對筆者而言,學習MS DOS 或MS Windows下的組合語言顯得較不重要,重要的是要理解組合語言的精神,包含指令集的架構與功能等,以及如何利用組合語言進行記憶體映射輸出入等主題。因此,本書並不嘗試去詳細說明與 MS DOS, Windows 相關的主題,因為這些主題都相當複雜,必須花費許多時間才能入門,特別是針對組合語言的新手而言。
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-23 13:42

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部