一般情況下,乙個彙編源程式需要定義3個段:
.text
.data
.bss
這個源自unix的傳統(和a.out的結構有關)。
不過在現在的linux裡,這三個部分不叫「段」(segment),而叫作「區」(section)。
這可能和linux使用elf(execution and linking format)有關吧:
乙個elf格式的可執行程式通常劃分為如下幾個部分:
.text、.data 和 .bss,其中
.text 是唯讀的**區,
.data 是可讀可寫的資料區,
.bss 則是可讀可寫且沒有初始化的資料區。
**區和資料區在elf中統稱為section,根據實際需要你可以使用其它標準的section,也可以新增自定義section,但乙個 elf 可執行程式至少應該有乙個.text 部分。
彙編(器)指示:
源程式裡的這些以「.」英文句點開頭的.text,.data,.bss等是用來向匯程式設計序傳遞資訊的,叫做「彙編(器)指示」。
.text告訴彙編器,其後的內容屬於**區,唯讀屬性。
.data告訴彙編器,其後的內容屬於具有初值的資料區,可讀可寫。
.bss告訴彙編器,其後的內容屬於不具有初值的資料區,可讀可寫。
當彙編器遇到乙個新的宣告某個區的彙編指示時,老的區就結束了,同時開始乙個新的區。
.text,.data,.bss等彙編指示是可以多次反覆出現的。
此外還有其他一些特定的區:
.rdata
存放唯讀資料(常量),英文叫做read-only data。
mips還有專門的預設使用$gp定址的區:
.sdata
具有初值的小資料區,可讀可寫。英文叫做small data。
.sbss
不具有初值的資料區,可讀可寫。英文叫做small common objects.
.lit8
存放64位浮點數(implicit-constant)。
.lit4
存放32位浮點數(implicit-constant)。
.sdata,.sbss,.lit8,.lit4都預設使用$gp定址。
相同型別的區最後都會被連線程式按型別合併到一起,在可執行檔案裡組成單一的.text區,.data區和.bss區。
彙編源程式的組織結構
一般情況下,乙個彙編源程式需要定義3個段 text data bss 這個源自unix的傳統 和a.out的結構有關 不過在現在的linux裡,這三個部分不叫 段 segment 而叫作 區 section 這可能和linux使用elf execution and linking format 有關...
0513 組合語言源程式組織
data segment x dw 4 按字儲存,db按位元組儲存 y dw 5 z dw data ends code segment assume cs code,ds data start mov ax,data mov ds,ax mov bx,x mov ax,y add ax,bx mo...
8089彙編 源程式
匯程式設計序 包含彙編指令和偽指令的文字。組合語言由彙編指令和偽指令構成,想要組合成源程式進行編譯就需要這麼做。彙編指令 偽指令 assume cs codesg codesg segment movax,0123h movbx,0456h addax,bx addax,ax movax,4c00h...