---
# System prepended metadata

title: '組合語言共筆 7 : Assembler Directives 組譯器指引'
tags: [組合語言]

---

###### 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)