Error suffix or operands invalid for 'push'

Тема в разделе "WASM.X64", создана пользователем progman, 18 окт 2010.

  1. progman

    progman New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    2
    камрады, помогите, надо под линухом либу пересобрать из исходников а там асм файл есть
    Код (Text):
    1. /*
    2. ********************* set precision ********************
    3. */
    4. ENTRY (P_SETP)
    5.         pushl %ebp
    6.         movl %esp,%ebp
    7.         pushl %ebx
    под х32 собирается отлично, но либа нужна х64 а там gcc выдает Error suffix or operands invalid for 'push'
    очевидно надо код править.
    что не по корану в строке pushl %ebp ???
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Эту часть (ассемблерную) придется переписать для x86-64.
     
  3. progman

    progman New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    2
    я это уже понял.
    я не могу найти описание команд и не понимаю что на что править.
    очевидно что push либо уже нет команды либо она ожидает 64 битный аргумент. хз
    я работал только с 32 битным асмом
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если говорить про 'push', то стек может уменьшаться либо на два байта, либо на восемь. Т.е. либо 'push bp', либо 'push rbp'. Команды остались те же (за некоторым исключением, но обратная совместимость поддерживается), их можно посмотреть в Intel Manual, например. Кроме того, конвенция вызова ф-ий поменялась, это тоже надо учесть.