認識組合語言 - 段
回顧上篇的代碼
section .data hello: db "Hello World!",10
section .text_start: mov rax, 1 ; ......一個程式的內容有資料有代碼等等,為了將這些內容劃分出來,於是有了不同的段
段的使用方式是 section 段名,宣告後的底下內容全都適用於該段,直到宣告不同的段
以下列舉一些開發過程常用的段
.data 數據段
Section titled “.data 數據段”事先存放定義好的內容到記憶體中,以 變數名: 格式 內容 hello: db "hello" 的方式定義
資料格式d開頭加上單位首字,以下是整個開發過程常用的單位
byte: 1 byte = 8 bitsword: 2 bytes = 16 bitsdword: 4 bytes = 32 bitsqword: 8 bytes = 64 bits字符編碼默認依照原文件的編碼,所以支援utf-8,而ascii和utf-8的0~127是相同的
上面的hello會被當成
H e l l o w o r l d ! \n72 101 108 108 111 32 87 111 114 108 100 33 10.rodata 只讀數據段
Section titled “.rodata 只讀數據段”.data的read only版本,當數據用途只有讀取而不寫入時使用,比如這個hello
.bss 段
Section titled “.bss 段”未定義內容的資料,預先設定一塊會用到的空間,可讀可寫
以 變數名: 格式 數量 的方式定義,格式是res加上單位首字
例如:data: resq 2 定義8x2 bytes的資料大小
.text 代碼段
Section titled “.text 代碼段”亦稱為文字段,用來放我們寫的代碼,組譯後的機器碼就在這邊
label: 用於標記區塊,實際上是將該區塊的第一行位址記錄在符號表,常用於跳躍