Доступ к стеку сборки

.data
     oldcw: .int 
     clear: .long 0xF0FF
     round: .long 0x0D00

    fstcw oldcw
    fwait
    mov oldcw,%ax
    and %ax,clear
    or %ax,round
    pushl %eax
    fldcw [%esp]
    popl %eax

Я получаю ошибку о скобках.

invalid char '[' beginning operand 1 `[%esp]'

Кто-нибудь может помочь, в чем проблема с брекетами? Я пытаюсь изменить управляющее слово с помощью fldcw здесь...


person Ali U.    schedule 11.01.2013    source источник


Ответы (1)


В синтаксисе AT&T, который использует gas, для обозначения доступа к памяти используются круглые скобки вместо скобок. См., например. здесь.

Другими словами, это должно быть:

    fldcw (%esp)

Также обратите внимание, что операнды перевернуты по сравнению с синтаксисом Intel, поэтому ваш код может не делать то, что вы ожидаете, если вы к этому привыкли.

Если вы предпочитаете синтаксис Intel, вы можете использовать директиву .intel_syntax noprefix.

person user786653    schedule 17.01.2013