系上要用masm交作業,然而我的系統是FreeBSD,由於不想灌windows,而有了這個替代方案…
先看看組語言到底有哪些種類
組合語言 | OS | 開放原始碼 | 許可證 | x86-64 | 積極開發 |
---|---|---|---|---|---|
A86/A386 | Windows, DOS | 否 | 專有軟體 | 否 | 否 |
DevelSoftware Assembler | Windows, Linux, Unix-like | 否 | 免費軟體 | 是 | 是 |
FASM | Windows, DOS, Linux, Unix-like | 是 | BSD許可證 | 是 | 是 |
GAS | Unix-like, Windows, DOS | 是 | GNU通用公共許可證 | 是 | 是 |
GoAsm | Windows | 否 | 免費軟體 | 是 | 是 |
HLA | Windows, Linux, FreeBSD, Mac OS X | 是 | 公有領域 | **?** | 是 |
JWASM | Windows, DOS | 是 | Sybase 開放公共許可證 Watcom | 否 | 是 |
LZASM | Windows, DOS | 否 | 免費軟體 | **?** | 是 |
MASM | Windows, DOS | 否 | 專有軟體 | 是 | 是 |
NASM | Windows, Linux, Mac OS X, DOS, OS/2 | 是 | BSD許可證 | 是 | 是 |
POASM | Windows, Windows Mobile | 否 | 免費軟體 | 是 | 是 |
TASM | Windows, DOS | 否 | 專有軟體 | 否 | **?** |
WASM | Windows, DOS, OS/2 | 是 | Sybase Open Watcom Public License | 否 | **?** |
TCCASM | Unix-like, Windows | 是 | LGPL | **?** | 是 |
Yasm | Windows, DOS, Linux, Mac OS X, Unix-like | 是 | <a href="http://zh.wikipedia.org/zh-tw/BSD_licenses" title="BSD licenses" class="mw-redirect) | 是 | 是 |
(唯一一個有標注FreeBSD的是HLA…QQ)
%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會找不到。
—hello.asm—
.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
—hello.asm—
進入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 !!!
成功^^
ps.
每次要組譯都要打兩行指令,按六次回車不免太麻煩
於是可以寫一個mk.bat放在toos/masm/裡面
—mk.bat—
masm.exe %1.asm,%1.obj,nul.lst,nul.crf
link %1.obj,%1.exe,nul.map,,
—mk.bat—
以後只要輸入下面指令就好了
>mk hello //不要加副檔名