x86 и разыменование меток - PullRequest
0 голосов
/ 30 апреля 2011

Я хотел бы загрузить адрес второго значения ниже в регистр.

Вот мой код в синтаксисе 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 жалуется. Как определить местоположение ошибки шины в программе? Если этот код неверен, что я должен написать вместо этого?

1 Ответ

1 голос
/ 30 апреля 2011

Вам необходимо использовать инструкцию 'leal', чтобы получить эффективный адрес, например:

leal Lz7, %eax
addl $4, %eax
...