跳到內容

認識組合語言 - 段

回顧上篇的代碼

section .data
hello: db "Hello World!",10
section .text
_start:
mov rax, 1
; ......

一個程式的內容有資料有代碼等等,為了將這些內容劃分出來,於是有了不同的段
段的使用方式是 section 段名,宣告後的底下內容全都適用於該段,直到宣告不同的段

以下列舉一些開發過程常用的段

事先存放定義好的內容到記憶體中,以 變數名: 格式 內容 hello: db "hello" 的方式定義
資料格式d開頭加上單位首字,以下是整個開發過程常用的單位

byte: 1 byte = 8 bits
word: 2 bytes = 16 bits
dword: 4 bytes = 32 bits
qword: 8 bytes = 64 bits

字符編碼默認依照原文件的編碼,所以支援utf-8,而ascii和utf-8的0~127是相同的
上面的hello會被當成

H e l l o w o r l d ! \n
72 101 108 108 111 32 87 111 114 108 100 33 10

.data的read only版本,當數據用途只有讀取而不寫入時使用,比如這個hello

未定義內容的資料,預先設定一塊會用到的空間,可讀可寫
變數名: 格式 數量 的方式定義,格式是res加上單位首字
例如:data: resq 2 定義8x2 bytes的資料大小

亦稱為文字段,用來放我們寫的代碼,組譯後的機器碼就在這邊
label: 用於標記區塊,實際上是將該區塊的第一行位址記錄在符號表,常用於跳躍