.csect pseudo-op
用途
將程式碼或資料分組到 csect (控制區段) ,並為該 csect 提供名稱、儲存體對映類別及對齊方式。
語法
其中 QualName = [Name] [[StorageMappingClass]]
附註: 包含 StorageMappingClass 的粗體字方括弧是語法的一部分, 不 指定選用參數。
說明
下列資訊討論使用 .csect 虛擬作業:
- csect QualName 參數採用下列格式:
symbol[XX]
或
符號{XX}
其中 [] (方括弧) 或 { } (大括弧) 括住兩個或三個字元的儲存體對映類別 ID。 這兩種類型的方括弧會產生相同的結果。
可以省略 QualName 參數。 如果省略它,則會未命名 csect ,並使用 [PR] StorageMappingClass 。 如果使用 QualName ,則 Name 參數是選用的,且需要 StorageMapping類別 。 如果未指定 名稱 ,則 csect 為未命名。
每一個 csect 虛擬作業都有相關聯的儲存體對映類別。 儲存體對映類別決定在其中分組 csect 虛擬作業的物件區段。 .text 區段通常包含唯讀資料,例如指示或常數。 .data、 .bss、 .tdata及 .tbss 區段包含讀寫資料。 .bss的儲存體對映類別。 和 .tbss 必須與 .comm和 .lcomm 虛擬作業一起使用,而不是 .csect 虛擬作業。
儲存體對映類別也會指出應包含在 csect 內的資料類型。 列出的許多儲存體對映類別都有特定的實作和使用慣例詳細資料。 一般而言,指令可以包含在儲存體對映類別 PR 的 csects 內。 可修改的資料可以包含在儲存體對映類別 RW 的 csects 內。
csect 虛擬作業與下列其中一個儲存體對映類別相關聯。 儲存體對映類別 ID 不區分大小寫。 儲存體對映類別 ID 列在 .data、 .tbss、 .tdata、 .text及 .tss 物件檔區段的群組中。
.text 區段儲存體-對映類別 PR 程式代碼。 識別為模組提供可執行指示的區段。 RO 唯讀資料。 識別包含在執行期間未修改之常數的區段。 資料庫 除錯表格。 識別與唯讀資料具有相同性質的區段類別。 GL 膠水代碼。 識別與「程式代碼」具有相同性質的區段。 這種類型的區段具有程式碼,可與另一個模組中的常式互動。 介面程式碼需求的一部分是在整個呼叫中維護 TOC 定址能力。 XO 延伸作業。 識別與 TOC 沒有相依關係 (透過 TOC 沒有參照) 的程式碼區段。 它打算常駐在記憶體中的固定位址,以便它可以成為分支到絕對位址的目標。 附註: 此儲存體對映類別不應用於組譯器來源程式。
Sv 監督者呼叫。 識別要視為監督者呼叫的代碼區段。 TB 追溯表格。 識別包含與追溯表格相關聯之資料的區段。 TI 追溯索引。 識別包含與追溯索引相關聯之資料的區段。 .data 區段儲存體-對映類別 TC0 TOC 錨點僅由預先定義的 TOC 符號使用。 識別特殊符號 TOC。 僅用於 TOC 錨點。 TC TOC 項目。 通常指出包含其他 csects 或廣域符號的位址的 csect。 如果它只包含一個位址,則 csect 長度通常為四個位元組。 - TD
- TOC 項目。 識別包含可直接從 TOC 存取之純量資料的 csect。 對於常用的廣域符號,這是 TOC 內透過位址指標 csect 間接存取的替代方案。 依慣例, TD 區段不應超過 4 個位元組。 包含可在程式執行期間修改的已起始設定資料。
UA 不明類型。 識別包含不明儲存體對映類別資料的區段。 rw 讀取/寫入資料。 識別包含已知在執行期間需要變更之資料的區段。 DS 該索引鍵。 識別函數描述子。 此資訊用於以 C 及 FORTRAN 等語言來說明函數指標。 .bss 區段儲存體-對映類別 BS BSS 類別。 識別包含未起始設定讀取/寫入資料的區段。 UC 未命名 FORTRAN 共用。 識別包含讀寫資料的區段。 csect 是下列其中一種符號類型:
ER 外部參照 (external reference) SD CSECT 區段定義 LD 進入點-標籤定義 CM 共用 (BSS) .tdata 區段儲存體-對映類別 TL 已起始設定執行緒本端儲存體。 識別在執行時期針對程式中每一個執行緒實例化的 csect。 .tbss 區段儲存體-對映類別 UL 未起始設定執行緒-本端儲存體。 識別在執行時期針對程式中每一個執行緒實例化的 csect。 - 所有具有相同 QualName 值的 csects 都分組在一起,且區段可以繼續使用具有相同 QualName的 .csect 陳述式。 不同的 csects 可以具有相同的名稱及不同的儲存體對映類別。 因此,當參照 csect 名稱作為其他虛擬作業或指令的運算元時,必須使用儲存體對映類別 ID。
不過,對於給定名稱,只能外部化一個 csect。 如果提出兩個以上同名的 csects ,則可能會發生執行錯誤,因為鏈結編輯器會將 csects 視為重複的符號定義,並只選取其中一個來使用。
- 將 csect 重新定位為主體。
- 沒有指定名稱 (名稱) 的 csects 會以其儲存體對映類別來識別,且每一個儲存體對映類別可以有一個未命名的 csect。 它們以僅具有儲存體對映類別 (例如, .csect [RW] 具有 [RW] 的 QualName ) 的 QualName 指定。
- 如果在出現任何指令之前未指定 .csect pseudo-op ,則會假設未命名的「程式碼」([PR]) csect。
- 具有 BS 或 UC 儲存體對映類別的 csect 類型為 CM (共用) ,它會保留空間但沒有已起始設定的資料。 使用 .csect 虛擬作業定義的所有其他 csects 都屬於 SD 類型 (區段定義)。 .comm 或 .lcomm 虛擬作業也可以用來定義 CM類型的 csects。 在類型 CM的 csect 中無法定義外部標籤。
- 不要標示 .csect 陳述式。 .csect 可以由其 QualName參照,標籤可以放置在 .csect的個別元素上。
參數
項目 | 說明 |
---|---|
數字 | 指定一個絕對表示式,它會評估為 0 到 31 (含) 之間的整數值。 此值指出所需對齊方式的日誌基數 2。 例如, 8 (雙字組) 的對齊方式會以整數值 3 表示; 2048 的對齊方式會以整數值 11 表示。 這與 .align pseudo-op 的 Number 參數用法類似。 對齊方式發生在 csect 的開頭。 未個別對齊 csect 的元素。 Number 參數是選用的。 如果未指定,則預設值為 2。 |
QualName | 指定 csect 的 名稱 和 StorageMapping類別 。 如果未提供 名稱 ,則會以其 StorageMappingClass來識別 csect。 如果既未提供 名稱 ,也未提供 StorageMapping類別 ,則 csect 不會命名,且儲存體對映類別為 [PR]。 如果指定 名稱 ,也必須指定 StorageMappingClass 。 |
範例
下列範例定義三個 csects:
# A csect of name proga with Program Code Storage-Mapping Class.
.csect proga[PR]
lh 30,0x64(5)
# A csect of name pdata_ with Read-Only Storage-Mapping Class.
.csect pdata_[RO]
l1: .long 0x7782
l2: .byte 'a,'b,'c,'d,'e
.csect [RW],3 # An unnamed csect with Read/Write
# Storage-Mapping Class and doubleword
# alignment.
.float -5