在' ['之前的汇编语言解析错误代币

时间:2014-05-18 22:15:06

标签: c gcc assembly inline-assembly parse-error

我在第24行得到一个解析错误(我相信)“在'''令牌之前解析错误

另外,如果你们中的任何一个人想给我一些有用的提示和对我的项目的见解,我将非常感激。我正在构建一个pow函数,所有计算都是在asm中完成的,这段代码是将FPU更改为舍入为0,这样我就可以将指数分成2部分(例如:2 ^ 3.2 = 2 ^ 3 * 2 ^ 0.2)

#include <stdio.h>
#include <stdlib.h>

#define PRECISION           3
#define RND_CTL_BIT_SHIFT   10

// floating point rounding modes: IA-32 Manual, Vol. 1, p. 4-20
typedef enum {
    ROUND_TOWARD_ZERO =     3 << RND_CTL_BIT_SHIFT
} RoundingMode;

int main(int argc, char **argv)
{

        int fpMask      = 0x1F9FF;
        int localVar    = 0x00000;

        asm("           FSTCW           %[localVarIn]                   \n" // store FPU control word into localVar
            "           add             %[localVarIn], %[fpMaskOut]     \n" // add fpMaskIn to localVar

        :   [localVarOut]   "=m"    (localVar)
        :   [fpMaskOut]     "=m"    (fpMask)

        :   [localVarIn]    "m"     (localVar)
        :   [fpMaskIn]      "m"     (localVar)
    );

    printf("FPU is 0x%08X\n\n", localVar);

return 0;

}

1 个答案:

答案 0 :(得分:3)

我相信你的骇客清单有点不对劲。在海湾合作委员会中,这些采取以下形式:

asm("MY ASM CODE" : output0, output1, outputn 
                  : input0, input1, inputn 
                  : clobber0, clobber1, clobbern);

请注意,每个都是以冒号分隔的(即输出的 set ,输入的 set 等),然后是每个元素集合以逗号分隔。因此,请尝试将ASM更改为以下内容:

asm("           FSTCW           %[localVarIn]                   \n" // store FPU control word into localVar
    "           add             %[localVarIn], %[fpMaskOut]     \n" // add fpMaskIn to localVar

    :   [localVarOut]   "=m"    (localVar),         // Outputs...
        [fpMaskOut]     "=m"    (fpMask)

    :   [localVarIn]    "m"     (localVar),         // Inputs...
        [fpMaskIn]      "m"     (localVar)