2012年2月25日 星期六

Javac 指令

Javac <options> <source files>


-g
產生所有除錯訊息。
-g:none
不產生除錯訊息。
-g:<lines, vars, source>
產生指定除錯訊息。
-nowarn
不產生警告。
-verbose
輸出編譯器運作訊息。
-deprecation
輸出資源位置。
-classpath <path>
找出指定檔案類別與處理器上的註解。
-cp <path>
找出指定檔案類別與處理器上的註解。
-sourcepath <path>
找出指定的檔案。
-bootclasspath <path>
覆蓋引導類別檔案的位置。
-extdirs <dirs>
覆蓋安裝位置。
-endorseddirs <dirs>
覆蓋通過標準路徑位置。
-proc:{none,only}
控制註解編譯。
-processor <class1>[,<class2>,<class3>…]
執行註解名稱處理器。預設:顯示過程。
-processorpath <path>
找出指定的註解處理器。
-d <directory>
找出指定位置,並且產生class檔案。
-s <directory>
找出指定位置,並且產生source檔案。
-implicit:{none, class}
指定不產生隱藏類別檔案。

-encoding <encoding>
指定只用的編碼方式。

-source <release>
提供source的相容性。

-target <release>
產生UML版本的class檔案。

-version
版本資訊。

-help
顯示標準選項的簡介。

-Akey[=value]
選擇透過註解處理器。

-X
顯示非標準選項的簡介。

-J <flag>
透過flag目錄,執行系統。

-Werror
判斷編譯出現的警告。

@ <filename>
讀選項與檔名。




組合語言的基本

先來個簡單範例


main PROC
move eax, 5     ;將5移到eax暫存器
add    eax, 6     ;將6加到eax暫存器
call     WriteInt  ;顯示eax的值
exit                    ;結束
main ENDP

說明:為了讓程式簡化,呼叫函式庫WriteInt的副程式。


整數

[+|-]數字[基底]
基底內容:

h十六進位。
q/o八進位。
d十進位。
b二進位。
r實數。
t十進位(另一種)。
y二進位(另一種)。

 

實數

實數可分成兩種表示方式。
1. [符號] 整數.整數[指數]
2. 編碼實數:編碼實數是以十六進位表示實數,使用的是32位元精準的
                     的IEEE浮點數格式


字元

字元是以單引號或雙引號圍住單一字元。

字串

字串是由多個字元所組成。


保留字

1.指令助憶符號:例如 MOV、ADD......。
2.指引(directive):告知如何組譯程式。
3.屬性:用於提供變數與運算元有關大小與使用的資訊。例如 BYTE、WORD。
4.運算子:用於運算式。
5.預先定義符號:例如 @data,這些符號會在組譯時,回傳整數值。

識別符

1. 字元長度1~247個。
2. 不區分大小寫。
3. 第一個字元必須是英文字母、底線、@、?、$。
4. 識別符不能與保留字相同。
注意: 1. 在執行組譯器時,可使用-Cp命令,讓保留字與識別符有區分大小寫。
          2. 組合語言時常使用@符號,用來定義預先符號的字首,因該避免在識別
              符中使用


指引

指引是嵌入在程式原始碼中的命令,並且此命令是由組譯器來辨識,然後執行
指定動作。指引不會在執行時被執行,相反地,指令會在執行時被執行。指引
能定義變數、巨集、程序。它們能指定名稱給記憶體區段,並且執行許多與組
譯器有關的內部管理工作。指引不區分大小寫。

定義區段:組譯器的指引有一個重要的功能就是定義程式區段。
.DATA指引,標記程式中含有變數的區域。
.CODE指引,標記程式中含有指令的區域。
.STACK指引, 標記程式執行時,保存的堆疊的區域,並且設定其大小。


指令

指令是組合語言程式經過組譯以後,可以執行的敘述。指令會由組譯器轉譯
成機器語言位元組。在執行時,CPU將載入指令,並且執行。指令的四個基
本部分。
1. 標籤(非必要) 。
2. 指令助憶符號(必要)。
3.運算元(通常需要)。
4. 註解(非必要)。

基本語法: [標籤:]助憶符號[;註解]
標籤,用於標記指令或資料的位置。
資料標籤,用於標記變數的位置。
程式碼標籤,在程式的程式碼區域中的標籤。

指令助憶符號
mov  將值做搬移
add   將值相加
sub    將值相減
mul    將值相乘
jmp    跳耀到指定位置
call     呼叫程序

運算元

運算元可以是暫存器、記憶體運算元、運算式、I/O埠。

無作業指令(NOP)

最安全的指令,因該是NOP指令。此指令花費一位元組記憶體空間,
而且它不會指示CPU做任何事情。有時組譯器與編譯器會利用它,將
程式碼對齊成偶數位址邊界。