###### 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 空間給浮點數 - `.double <float>` : 分配 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)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up