x86和取消引用标签

x86和取消引用标签,x86,labels,memory-address,X86,Labels,Memory Address,我想将下面第二个值的地址加载到寄存器中 以下是我的Unix语法代码: .data Lz7: .long 24 .long 34 .long 80 .long 108 .long 101 .long 97 .long 115 .long 101 .long 32 .long 105 .long 110 ...etc... 我正在尝试使用以下代码: movl Lz7, %eax /* %g14

我想将下面第二个值的地址加载到寄存器中

以下是我的Unix语法代码:

.data
Lz7:
    .long 24
    .long 34
    .long 80
    .long 108
    .long 101
    .long 97
    .long 115
    .long 101
    .long 32
    .long 105
    .long 110
        ...etc...
我正在尝试使用以下代码:

movl Lz7, %eax /* %g14 */ 
movl $4, %ebx /* %g15 */ 
addl %ebx /* %g15 */ , %eax /* %g16 */  

但gcc抱怨运行时出现总线错误。在GDB中,我可以看到GCC正在将标签
Lz7
转换为十六进制值0x2068,这似乎太小了。我也试过4(Lz7),但GCC抱怨。如何确定程序中总线错误的位置?如果此代码不正确,我应该写什么?

您需要使用“leal”指令来获取有效地址,如下所示:

leal Lz7, %eax
addl $4, %eax