最簡單的一個 Assembly 程式
March 24th, 2008 by Chuan-Hsien Lin
Last Modified on March 25th, 2008
本篇介紹寫一個最簡單的 Assembly 程式,首先你得有 Assembler 以及 Linker,才能將你的組合語言程式組譯及連結成執行檔,本文中是使用 Microsoft 的 MASM 6.11。
本範例是以使用 DOS INT 21h/AH=02h 中斷去顯示一個字元 'A' 來作為練習,接下來使用文字編輯軟體將下列幾行程式編寫並存檔成 test.asm,
.MODEL TINY .CODE ORG 100h begin: mov dl, 41h mov ah, 02h int 21h .STACK END begin
然後執行 ml /AT test.asm 就會將程式組譯並且連結成執行檔了,
C:\masm>ml /AT test.asm Microsoft (R) Macro Assembler Version 6.11 Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: test.asm Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1984-1992. All rights reserved. Object Modules [.obj]: test.obj/t Run File [test.com]: "test.com" List File [nul.map]: NUL Libraries [.lib]: Definitions File [nul.def]:
可以看的出來已經產生出 object file 以及 .COM 格式的執行檔了,
C:\masm>dir test* Volume in drive C is system Volume Serial Number is 9488-6570 Directory of C:\masm 2008/03/24 ?? 05:17 218 test.asm 2008/03/24 ?? 05:32 6 TEST.COM 2008/03/24 ?? 05:32 123 test.obj 3 File(s) 347 bytes 0 Dir(s) 5,750,042,624 bytes free
這就來執行看看,果然執行成功,正常顯示出我們欲顯示的字元 'A'。
C:\masm>test A
但是別高興的太早了,因為你可以發現剛剛的程式一執行後就當掉停住了,一動也不動,這是因為 DOS 下執行的程式,都還需要呼叫一個 DOS INT 21h/AH=4ch 這個中斷來告訴 DOS 作業系統該程式已經結束了,這樣執行完程式後,才會把控制權交還給 DOS,所以完整的程式如下:
.MODEL TINY .CODE ORG 100h begin: mov dl, 41h mov ah, 02h int 21h mov ah, 4ch int 21h .STACK END begin
這次執行果然程式正常結束,而且返回 DOS 的提示符號下,可以繼續別的動作了,
C:\masm>test A C:\masm>
附帶一提,可以看到 .COM 格式的執行檔可真是小巧精美,以上的程式只佔用 10 bytes 空間呢!下面即在 Cygwin 的環境下來顯示該執行檔內容。
$ od -t x1 test.com 0000000 b2 41 b4 02 cd 21 b4 4c cd 21 0000012
關於 DOS INT 21h/AH=4ch 的介紹,可以參考 Ralf Brown's Interrupt List 裡的 http://www.ctyme.com/intr/rb-2974.htm 這篇文章。
沒有留言:
張貼留言