- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1393
- 相冊
- 0
- 日誌
- 1
![Rank: 11](static/image/common/star_level3.gif) ![Rank: 11](static/image/common/star_level3.gif) ![Rank: 11](static/image/common/star_level2.gif) ![Rank: 11](static/image/common/star_level1.gif)
狀態︰
離線
|
在微軟的Visual Studio 中,目前所使用的組譯工具是 ML.exe,ML.exe 除了進行組譯之外,還可以用來進行連結動作。但是,在 Visual Studio 整合環境中,我們並不需要使用指令的方式執行 ML.exe,因為我們可以利用功能表的方式,編譯組合語言程式,然後直接在 Visual Studio 中執行,甚至除錯。
要學習如何在 Visual Studio 環境中撰寫組合語言,則可以參考 Kip Irvine 的『Assembly Language for Intel-Based Computers, 5th Edition』一書,以及該書的網站 。在使用 Visual Studio 學習組合語言的開發之前,必須先學習如何設定其開發環境,Kip Irvine在網頁『Getting Started with MASM』 中詳細說明了這些設定方式,請有興趣的初學者仔細研讀。
範例一是 Kip Irvine 書籍中的一個範例,該範例會計算eax=0x10000+ 0x40000- 0x20000的結果,然後利用 DumpRegs 印出所有暫存器。該書的範例幾乎都會先以INCLUDE Irvine32.inc指令引用標頭檔,該指令會正確的引用像 DumpRegs 等函數,這讓讀者可以不需要一開始就學習輸出入的方式,降低了組合語言的學習難度。
範例一、以 Visual Studio 撰寫MASM組合語言的範例
TITLE Add and Subtract (AddSub.asm)
INCLUDE Irvine32.inc
.code ; 程式段開始
main PROC ; 主程式
mov eax,10000h ; EAX = 10000h ; 將 0x10000 存入 eax 當中
add eax,40000h ; EAX = 50000h ; 將 0x 40000 加到eax 當中
sub eax,20000h ; EAX = 30000h ; 從 eax 中減去 0x20000
call DumpRegs ; 呼叫 DumpRegs 將所有暫存器印出
exit ; 離開程式
main ENDP
END main
執行結果:
EAX=00030000 EBX=7FFDF000 ECX=0012FFB0 EDX=7C92E514
ESI=00000000 EDI=0B3DF9D4 EBP=0012FFF0 ESP=0012FFC4
EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0 AF=0 PF=1
讀者可以看到執行後,EAX 的內容為 0x30000,因此,該組合語言正確的執行了 eax=0x10000+ 0x40000- 0x20000的動作。現在,讀者可以在網路上下載該書的範例並執行看看,若您執行 AddSum.asm 這個程式,應可看到如圖一所顯示的執行畫面。
VisualStudioAssembly.jpg
圖一、在Visual Studio 中執行組合語言
VisualStudioAssembly.jpg
圖二、在Visual Studio 中執行 MASM 組合語言的結果
另外,在 Irvine.inc 檔案中,也引用了基本的字串函式庫,因此,您可以利用 call WriteString 這個指令,呼叫字串顯示函數,以便將字串輸出到螢幕上。圖三顯示了 main.asm 這個範例於 Visual Studio 中的情況,該程式會將字串 “MASM program example” 字串輸出到螢幕上。在 Irvine 的書籍中,還有許多進階的範例,您可以直接從網路上下載,然後利用 Visual Studio 執行看看,以便觀察組合語言的執行過程,並進一步理解每個指令的意義。 |
|