.lcomm 伪操作

用途

定义本地未初始化的存储器块。

语法

描述
.lcomm Name1 Expression1[, Sectname [, Expression2]]

描述

.lcomm psuedo-op 定义未初始化的本地存储器块。 如果Sectname参数是StorageMappingClassUL 的QualName操作数,则存储的是线程本地变量。

.lcomm 伪操作用于可能无法在其他源文件中访问的数据。

Name1 参数是存储块开头的标签。 此存储器块的位置计数器将按 Expression1 参数的值递增。 可以使用 Sectname 参数指定特定存储块。 如果Sectname参数是QualName操作数,且StorageMappingClass类别为 UL,则存储块将被分配到.tbss部分。 否则,会将存储块分配给 .bss 部分。 如果未指定 Sectname ,那么将使用未命名的存储块。

可以使用 Expression2 参数指定存储块的对齐方式。 如果省略了 Expression2 ,那么存储块将在半字边界上对齐。

参数

描述
Name1 存储器块上的标签。 Name1 不会出现在符号表中,除非它是 .globl 语句的操作数。
Expression1 用于指定存储块长度的绝对表达式。
安全名称 可选的 csect 名称。 如果省略 Sectname ,那么将使用具有存储映射类 BS 的未命名存储器块。 如果Sectname是QualName, StorageMappingClass可以是 BS 或 UL。 如果 Sectname 是符号名称,那么将使用缺省存储映射类 BS。 同一个 Sectname 可以与多个 .lcomm 语句配合使用。 由 .lcomm 语句指定的存储块组合成单个 csect
Expression2 用于指定期望对齐的对数基数 2 的绝对表达式。 如果省略 Expression2 ,那么将使用值 2 ,从而生成半字对齐。

示例

  1. 要设置 5KB 存储器,请将其称为buffer:
    
    .lcomm buffer,5120
            # Can refer to this 5K
            # of storage as "buffer".
    
  2. 要设置具有名称的标签,请执行以下操作:proga:
    
    .lcomm b3,4,proga
            # b3 will be a label in a csect of class BS
            # and type CM with name "proga".
    
  3. 要定义线程本地存储器的本地块,请执行以下操作:
    
    .lcomm tls1,32,tls_static[UL],3
            # tls1 is a label on a block of thread-local storage 32 bytes
            # long aligned on a doubleword boundary. The name of the block of
            # storage is tls_static[UL].