【发布时间】:2015-05-31 15:21:00
【问题描述】:
我知道这是一个非常愚蠢的问题,但我有一段时间想不出答案
如何在 GAS AT&T 汇编语言中正确声明和定义“变量”?
例如,我想要 5 个字节的缓冲区、两个 1 字节的变量(初始值为 0)、2 字节的变量为 0 和 2 字节的变量为 10。
这段代码不能正常工作,至少调试器说(在程序的第一行,在这些声明之后,只是 nop 指令)b 和 c 是大数字而不是零。
.bss
.lcomm r, 5
.data
a: .byte 0
b: .byte 0
c: .word 0
d: .word 10
【问题讨论】:
-
对我来说似乎很好。也许您的调试器将
b和c读取为dwords,在这种情况下,b和c可能是0x0a0000和0x0a00,或者更大。 -
或者调试器可能显示地址而不是值。你没有显示你在调试器中做了什么,以及你使用了哪一个,但是要打印
a,你可以在gdb中做x/b &a。 -
这就是您在 GAS 程序集中定义变量的方式。您的调试器可能不知道
b和c应该是 8 位和 16 位数字。汇编器生成的调试信息不如编译器。 -
@user35443,我的调试器是
kdbg,如果这很重要的话。那么在这种情况下我能做些什么呢? -
@Construct 你如何检索
b和c的内容?您是否尝试过明确指定它们的大小,例如使用x/1b variable?
标签: assembly gnu-assembler att