此文章的測試環境為 Virtualbox 虛擬機上的 Windows XP Pro版本。此篇文章是以 MS Dos 的 Debug 工具來撰寫組合語言。
MS DOS Debug 軟體介紹
MS DOS 下的 DEBUG 為可以檢視記憶體內容、直接存取記憶體內容、撰寫簡易組合語言程式以及程式除錯等功能的工具程式。執行方式為【開啟命令提示字元(Command Prompt)】
接著鍵入【Debug】,就會進入到 Debug 程式裡。
而Debug 的指令說明如下:
C:\DOCUME~1\admin>debug -? assemble A [address] compare C range address dump D [range] enter E address [list] fill F range list go G [=address] [addresses] hex H value1 value2 input I port load L [address] [drive] [firstsector] [number] move M range address name N [pathname] [arglist] output O port byte proceed P [=address] [number] quit Q register R [register] search S range list trace T [=address] [value] unassemble U [range] write W [address] [drive] [firstsector] [number] allocate expanded memory XA [#pages] deallocate expanded memory XD [handle] map expanded memory pages XM [Lpage] [Ppage] [handle] display expanded memory status XS
那先來寫個 Hello World 範例(此範例來自於:Old school assembly "Hello World!": Method 2)
-a 100
08FA:0100 jmp 111
08FA:0102
-e 102 'Hello World!',0D,0A,'$'
-a 111
08FA:0111 mov dx,102
08FA:0114 mov ah, 09
08FA:0116 int 21
08FA:0118 int 20
08FA:011A
-h 011a 0100
021A 001A
-n hello.com
-rcx
CX 0000 :001a
-w
Writing 001A bytes
-q
使用 Debug 撰寫程式碼:
執行結果:
以上為用 Debug 程式輸出 "Hello World" 字串。
接著做簡易加法的範例(此範例來自於:https://www.codeproject.com/Articles/37762/How-To-Use-Debug):
-a « ; start to write code mov ax,03 « ; pass AX 03, AX will be 03 mov bx,04 « ; pass BX 03, AX will be 04 add ax,bx « ; add AX with BX, the sum is in AX int 3 « ; break
使用 Debug 撰寫程式碼:
現在讀者可以使用 x86 assembly language(x86 組合語言)來實作看看,可參考此影片
x86 Assembly: Hello World!。當然可以用線上的 IDE:https://www.tutorialspoint.com/compile_assembly_online.php
簡短回顧如何使用 MS- Dos Debug 撰寫組合語言的程式:
- 開啟 MS-DOS Prompt
- 啟動 Debug 程式
- a(ssemble) 指令與 g(o)指令
範例:
MS-DOS Debug 是 16-bit/32-bit 時代的軟體,若要學組合語言,筆者建議學習 NASM。