2012年2月25日 星期六

組合語言的基本

先來個簡單範例


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做任何事情。有時組譯器與編譯器會利用它,將
程式碼對齊成偶數位址邊界。

沒有留言:

張貼留言