操作系统:ubuntu11.10
在
bss 段中定义数据元素和 在数据段(data)中定义有些不同。
无须声明特定的数据类型,只要为所需目的保留的原始内存部分即可。
在 GNU 汇编器使用两个命令声明缓冲区,如下
虽然这两种区域的工作情况类似,但是本地通用内存区域是为不会从本地汇编代码之外进行访问的数据保留的。
这两个命令的格式:
.comm symbol, length
其中 symbol 是赋给内存 区域的标签,length是内存区域中包含的字节数量,
如:
.section .bss
.lcomm buffer, 10000
这些语句把 10000 字节的内存区域取值给buffer标签。
在声明本地通用内存取用的程序之外的函数是不能访问它们的(不能在.globl 命令中使用它们)
在bss段中声明数据的一个好处是数据不会包含在可执行程序 中,在数据中定义数据时,它必须被包含在可执行程序,因为必须使用特定值初始化它。因为他不能使用程序数据初始化 bss 段中声明的数据区域,所以内存区域被保留在运行时使用,并且不包含在最终的程序中。
测试实例1:
-
.section .text
-
.global _start
-
_start:
-
movl $1, %eax
-
movl $0, %ebx
-
int $0x80
可执行文件的总长度是 460字节
测试实例2:
-
.section .bss
-
.lcomm buffer, 10000
-
-
.section .text
-
.global _start
-
_start:
-
movl $1, %eax
-
movl $0, %ebx
-
int $0x80
可执行文件的总长度是 575个字节
测试实例3:
-
.section .data
-
buffer:
-
.fill 10000
-
-
.section .text
-
.global _start
-
_start:
-
movl $1, %eax
-
movl $0, %ebx
-
int $0x80
可执行文件的总长度是 10575个字节
阅读(9660) | 评论(0) | 转发(4) |