###### 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)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.