avatar

大兜

右手寫程式,左手寫音樂

在FreeBSD上寫masm

系上要用masm交作業,然而我的系統是FreeBSD,由於不想灌windows,而有了這個替代方案…

先看看組語言到底有哪些種類

組合語言   OS   開放原始碼   許可證   x86-64  積極開發  
A86/A386Windows, DOS專有軟體
DevelSoftware AssemblerWindows, Linux, Unix-like免費軟體
FASMWindows, DOS, Linux, Unix-likeBSD許可證
GASUnix-like, Windows, DOSGNU通用公共許可證
GoAsmWindows免費軟體
HLAWindows, Linux, FreeBSD, Mac OS X公有領域**?**
JWASMWindows, DOSSybase 開放公共許可證 Watcom
LZASMWindows, DOS免費軟體**?**
MASMWindows, DOS專有軟體
NASMWindows, Linux, Mac OS X, DOS, OS/2BSD許可證
POASMWindows, Windows Mobile免費軟體
TASMWindows, DOS專有軟體**?**
WASMWindows, DOS, OS/2Sybase Open Watcom Public License**?**
TCCASMUnix-like, WindowsLGPL**?**
YasmWindows, 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 //不要加副檔名