Почему я не могу скомпилировать эту сборку успешно? - PullRequest
1 голос
/ 04 апреля 2011

Цитируется из этот вопрос :

.text
    call start
    str:
        .string "test\n"
    start:
    movl    $4, %eax
    movl    $1, %ebx
    pop     %ecx
    movl    $5, %edx
    int     $0x80
    ret

gcc -c test.S дает:

test.S: Assembler messages:
test.S:8: Error: suffix or operands invalid for `pop'

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

pop это просто команда.В синтаксисе at & t вы должны отложить измерение операнда.поэтому вы должны изменить строку «pop» с помощью «popl»

Edit

  1. Правильный ответ - тот, который был у Jens Björnhager, как на моем 64-битномВ ноутбуке ваш код правильно собран, указав, что это 32-битная архитектура.
  2. Размер операнда не является обязательным, но рекомендуется настоятельно .
1 голос
/ 04 апреля 2011

Вы, вероятно, в 64-битной системе пытаетесь скомпилировать 32-битную сборку.Заставить gcc скомпилировать 32 бита с -m32 :

gcc -m32 -c test.S

Редактировать:

64-битная версия:

.text
    call start
    str:
        .string "test\n"
    start:
    movl    $1, %eax
    movl    $1, %edi
    popq    %rsi
    movl    $5, %edx
    syscall

    movl    $60,%eax
    movl    $0, %edi
    syscall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...