彙編源程式的組織結構

2021-05-28 02:12:28 字數 1158 閱讀 9737

一般情況下,乙個彙編源程式需要定義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...