用汇编语言定义“变量”

时间:2015-05-31 15:21:01

标签: assembly gas att

我认为这是非常愚蠢的静止,但我暂时无法找到答案 如何在GAS AT& T汇编语言中正确声明和定义“变量”? 例如,我想要缓冲区为5个字节,两个1字节变量(最初为0值),2字节变量为0,2字节变量为10。 这段代码不能正常工作,至少调试器说(在程序的第一行,在这些声明之后,只是nop指令),bc是大数而不是零。

.bss
    .lcomm r, 5

.data
    a:  .byte 0
    b:  .byte 0
    c:  .word 0
    d:  .word 10

1 个答案:

答案 0 :(得分:3)

这是您在“手表”窗口中看到的内容:

a = 0 = 0x00 = 0x0000 = 0x00 0000 = 0x0000 0000

b = 167772160 = 16777216 * 10 = 0x1000000 * 0x0A = 0xA000000

c = 655360 = 65536 * 10 = 0x10000 * 0x0A = 0xA0000

d = 10 = 0x0A = 0x0000 000A

这是什么意思?这意味着您的编译器完成了它的工作,但是您的调试器将cb读为双字(4字节)而不是字节。

当它读入b时,它会读取其值0x00c的值0x0000d的值{{1}在顶部,一起制作0x0A

类似的事情发生在0xA000000上。 c很幸运,因为接下来的4个字节为零,所以a实际上为零。

然而,并非总是如此。没有什么说a之后就没有任何垃圾了,更不用说d(在一个完全不同的内存位置)可能会出现等于零的变量。