.LC0:
.string "hello,world"
.LC0 標記位於靜態分配區域 (`.rodata` 或 `.data`),程式啟動時由載入器分配。
main:
leal 4(%esp), %ecx # 保存 argc 位址 (argv 指標)
andl $-16, %esp # 對齊堆疊至 16 字節 (SSE/AVX 需求)
pushl -4(%ecx) # 壓入 argc (原始 ESP+0)
pushl %ebp # 保存舊幀指標
movl %esp, %ebp # 建立新幀指標
pushl %ecx # 保存 argc/argv 位址
subl $4, %esp # 分配區域變數空間 (對齊)
movl $.LC0, (%esp) # 將字串位址壓入堆疊作為 puts 參數
call puts # 呼叫 puts 輸出字串
movl $0, %eax # 返回值 0
addl $4, %esp # 釋放區域變數空間
popl %ecx # 還原 argc/argv 位址
popl %ebp # 還原幀指標
leal -4(%ecx), %esp # 還原堆疊指標 (含對齊填充)
ret # 返回
call 指令隱含壓入返回位址。-[offset](%ebp) 存取,參數用 +[offset](%ebp)。movl src, dst:複製資料 (立即數、暫存器、記憶體)addl src, dst:`dst = dst + src`subl src, dst:`dst = dst - src`範例:將靜態變數 `myvalue` (初值 190) 加 100 減 20:
movl myvalue, %ebx
addl $100, %ebx
subl $20, %ebx
movl %ebx, myvalue
.text:程式碼段 (唯讀、可執行).data:已初始化靜態資料 (讀寫).bss:未初始化靜態資料 (零填充、讀寫).rodata:唯讀資料 (字串常數、常數表)C 程式經編譯器轉為組合語言,再由組譯器生成機器碼。執行本質是:資料在暫存器、堆疊、靜態區間搬移,配合 加減乘除、邏輯判斷、跳轉/呼叫 指令完成運算與控制流。理解堆疊幀、呼叫慣例、暫存器用途是逆向工程與效能優化基石。