###### tags: `組合語言`
# 組合語言共筆 7 : Assembler Directives 組譯器指引
#### Assembler Directives 組譯器指引 ####
=> 通常會以 '.' 為開頭,用來指示 Assembler 執行某些操作、宣告資料轉換的型態...
其指令並不會被轉為 Machine Code ( 二進位碼 / Object Code )
以下為一些常見的"指令"及"功能"
<br>
## 1. 分配記憶體位置給變數
:::warning
- ### Int
- `.byte <int>`
- `.hword / .short <int>` : 分配 16 bit 的空間
- `.word / .long <int>` : 分配 32 bit 的空間
- ### String
- `.ascii <string>` : 分配空間給字串,但不包含結尾 "00"
- `.asciz / .string <string>` : 分配空間給字串,自動加入結尾 "00"
- ### Float
- `.float / .single <float>` : 分配 4 byte 空間給浮點數分配 8 byte 空間給浮點數
:::
<br>
## 2. Skipping、Filling、Aligning
:::warning
- `.skip <size>, <fill>`
`.space <size>, <fill>`
可以產生 `<size>` byte 大小並填補的儲存空間,如 `<fill>` 為空 `<fill>`=0
可以用來儲存 Array 資訊
- `.align <abs-expr>,<abs-expr>,<abs-expr>`
用以對齊特定的儲存空間
- `.balign[wl] <abs-expr>,<abs-expr>,<abs-expr>`
:::
<br>
## 3. Controlling Section
:::warning
控制組譯的記憶體位置 Section
- `.data`
- `.text`
- `.bss`
- ...
:::
<br>
## 4. Conditional Assembly
:::warning
有條件的組譯,當符合條件才能進行組譯
- `.if <absolute_expression>`
- `.else`
- `.endif` : 標示出 if 區塊的結束
.
- `.ifdef` <symbol> : 類似 c++ 的 #ifdef
- `.ifndef` `<symbol>` : 類似 c++ 的 #ifndef
:::
<br>
## 5. Symbol 設定
:::warning
- `.global <symbol>`
`.globl <symbol>`
: 用來標出此 `<symbol>` 讓 linker 可以看見
- `.equ <symbol>, <expression>`
`.set <symbol>, <expression>`
: 將 `<symbol>` 設為 `<expression>` 的代表 symbol
<font color=blue>ex : .equ KK , 1234567 => KK 現在代表 1234567</font>
- `.euqiv <symbol>, <expression>`
: 與 `.euq` 相同,但如果此 `<symbol>` 已被定義,會回傳 error
:::
---
## Reference
[Using as 手冊筆記](http://wen00072.github.io/blog/2015/05/24/notes-on-using-as/#as_dit)
[Assembler Directives](https://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops)