Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1132268
  • 博文数量: 300
  • 博客积分: 37
  • 博客等级: 民兵
  • 技术积分: 772
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-26 04:46
文章分类
文章存档

2017年(4)

2016年(7)

2015年(19)

2014年(72)

2013年(71)

2012年(127)

分类: LINUX

2013-08-26 22:03:25

操作系统:ubuntu11.10

      在 bss 段中定义数据元素和 在数据段(data)中定义有些不同。
无须声明特定的数据类型,只要为所需目的保留的原始内存部分即可。

      在 GNU 汇编器使用两个命令声明缓冲区,如下


    虽然这两种区域的工作情况类似,但是本地通用内存区域是为不会从本地汇编代码之外进行访问的数据保留的。

    这两个命令的格式:
        .comm symbol, length
        其中 symbol 是赋给内存 区域的标签,length是内存区域中包含的字节数量,
            如:
                .section .bss
                .lcomm buffer, 10000
                这些语句把 10000 字节的内存区域取值给buffer标签。
                在声明本地通用内存取用的程序之外的函数是不能访问它们的(不能在.globl 命令中使用它们)

    在bss段中声明数据的一个好处是数据不会包含在可执行程序 中,在数据中定义数据时,它必须被包含在可执行程序,因为必须使用特定值初始化它。因为他不能使用程序数据初始化 bss 段中声明的数据区域,所以内存区域被保留在运行时使用,并且不包含在最终的程序中。


    测试实例1:

点击(此处)折叠或打开

  1. .section .text
  2. .global    _start
  3. _start:
  4.     movl     $1, %eax
  5.     movl    $0,    %ebx
  6.     int        $0x80

可执行文件的总长度是 460字节


    测试实例2:

点击(此处)折叠或打开

  1. .section .bss
  2.     .lcomm    buffer, 10000

  3. .section .text
  4. .global    _start
  5. _start:
  6.     movl     $1, %eax
  7.     movl    $0,    %ebx
  8.     int        $0x80

可执行文件的总长度是 575个字节


    测试实例3:

点击(此处)折叠或打开

  1. .section .data
  2.     buffer:
  3.         .fill    10000

  4. .section .text
  5. .global    _start
  6. _start:
  7.     movl     $1, %eax
  8.     movl    $0,    %ebx
  9.     int        $0x80

可执行文件的总长度是 10575个字节



阅读(2233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~