@newuser8888

Почему не работает перенос ворда массива в регистр(gas syntax)?

.data
arrayW: .word 5,10,15,20

.text
.globl _start
_start:

leaw arrayW, %si
movw (%si), %ax


pushl $0
subl $4, %esp
movl $1, %eax
int $0x80
.end
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему не работает
leaw arrayW, %si
movw (%si), %ax


Потому что ты в 32-битной программе пытаешься адресоваться 16-битным регистром.
Вот так всё прекрасно работает:

leal arrayW, %esi
movw (%esi), %ax

:

$ gcc -m32 -static -nostartfiles load.s -o load
$ gdb ./load
(gdb) b _start
Breakpoint 1 at 0x8049000
(gdb) r
Starting program: /home/jcmvbkbc/tmp/toster/load

Breakpoint 1, 0x08049000 in _start ()
(gdb) si
0x08049006 in _start ()
(gdb) 
0x08049009 in _start ()
(gdb) p/x $esi
$1 = 0x804a000
(gdb) p/x $ax
$2 = 0x5
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы