0

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

这是我的 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 抱怨。如何确定程序中总线错误的位置?如果此代码不正确,我应该改写什么?

4

1 回答 1

1

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

leal Lz7, %eax
addl $4, %eax
于 2011-04-30T01:52:14.637 回答