.csect pseudo-op

用途

將程式碼或資料分組到 csect (控制區段) ,並為該 csect 提供名稱、儲存體對映類別及對齊方式。

語法

項目 說明
.csect QualName[, Number]

其中 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。
  • 具有 BSUC 儲存體對映類別的 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