若您覺得文章寫得不錯,請點選網誌上的廣告,來支持小編,謝謝。
此文章的測試環境為
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)指令