.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 ,从而生成半字对齐。 |
示例
- 要设置 5KB 存储器,请将其称为buffer:
.lcomm buffer,5120 # Can refer to this 5K # of storage as "buffer". - 要设置具有名称的标签,请执行以下操作:proga:
.lcomm b3,4,proga # b3 will be a label in a csect of class BS # and type CM with name "proga". - 要定义线程本地存储器的本地块,请执行以下操作:
.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].