装配堆栈访问

时间:2013-01-11 19:20:20

标签: assembly x86 fpu

.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修改控制字......

1 个答案:

答案 0 :(得分:1)

在气体使用的AT& T语法中,括号而不是括号用于表示存储器访问。参见例如here

换句话说,它应该是:

    fldcw (%esp)

另请注意,与intel语法相比,操作数是相反的,因此如果您已经习惯了,那么您的代码可能无法满足您的期望。

如果您更喜欢intel语法,可以使用.intel_syntax noprefix指令。