avatar

大兜

右手寫程式,左手寫音樂

用 dosbox 在 FreeBSD上寫 masm

課上要用 masm 交作業,然而我的系統是FreeBSD,由於不想灌windows,而有了這個替代方案。在開始之前可以先來這裡看看組語言到底有哪些種類

(唯一一個有標注 FreeBSD 的是 HLA……QQ)

先安裝 dosbox,這是一個dos的模擬器

%portinstall -c emulators/dosbox
%rehash
%mkdir ~/learnASM
%mkdir ~/learnASM/tools
%mkdir ~/learnASM/tools/masm5

從網路上下載 masm5.0 (太新的版本可能不能跑),我是從這裡下載的。

把含有.exe檔的目錄下所有的檔案放在 ~/learnASM/tools/masm5

%cd ~/learnASM
%echo "dosbox -c 'mount c: ./' -c 'path %path%;c:\tools;c:\tools\masm5'" > runDosbox.sh
%chmod +x runDosbox.sh
%./runDosbox.sh

到目前為止 dosbox 已經具備組譯的能力,至於怎麼使用 masm……
首先要寫一個 .asm 原碼,這裡以 hello.asm 為例,我是先用 vim 或 vi 在 learnASM/ 編輯,然後對著 dosbox 按 Ctrl+F4 重新整理,不然新增的檔案 dosbox 會找不到。

.model small
.stack
.data
message   db "Hello world, I'm learning Assembly !!!", "$"
.code
main   proc
mov   ax,seg message
mov   ds,ax
mov   ah,09
lea   dx,message
int   21h
mov   ax,4c00h
int   21h
main   endp
end main

進入 dosbox 之後

> c:
> masm hello.asm  ::之後按三次回車
Object filename [HELLO.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:

這時會產生一個 HELLO.OBJ 檔案

> link HELLO.OBJ  ::按三次回車
Run File [HELLO.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
> HELLO.EXE
Hello world, I'm learning Assembly !!!

成功^^

備註

每次要組譯都要打兩行指令,按六次回車不免太麻煩
於是可以寫一個mk.bat放在toos/masm/裡面

plain mk.bat masm.exe %1.asm,%1.obj,nul.lst,nul.crf link %1.obj,%1.exe,nul.map,,

以後只要輸入下面指令就好了

> mk hello ::不要加副檔名