曲径通幽论坛

标题: .section .data 数据区定义和 .section .bss 定义顺序要对 [打印本页]

作者: beyes    时间: 2010-1-17 17:49
标题: .section .data 数据区定义和 .section .bss 定义顺序要对
要先定义 .section .data ,然后再接着定义 .section .bss 。不然,可能造成 .bss 区后面的 data 数据失效,如:
.section .data
data1:
        .quad 7252051615
data2:
        .quad 5732348928

output:
        .asciz "The result is %qd"

output2:
        .asciz "%qd\n"

.section .bss
        .lcomm data, 32
上面定义是正确定义顺序。

如果换一下 .section .bss 的位置:
.section .data
data1:
        .quad 7252051615
data2:
        .quad 5732348928

.section .bss

        .lcomm data, 32


output:
        .asciz "The result is %qd"

output2:
        .asciz "%qd\n"
可能造成错误的定义顺序。如果程序后面有一个 call printf 输出字符串语句,那么是是不会看到有任何结果输出,这是因为 .bss 下面的数据(与 .section .text 之间的数据)会都被认为是未定义数据,故定义的字符串 The result is %qd 被注释,从造成输出无效!




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2