首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问关于C++中嵌入汇编语句出错的有关问题

2012-03-21 
请教关于C++中嵌入汇编语句出错的问题我自己定义一个清零4字节整数倍大小的内存的函数在VC上遇到一个奇怪

请教关于C++中嵌入汇编语句出错的问题
我自己定义一个清零4字节整数倍大小的内存的函数在VC上遇到一个奇怪的错误
void   ZeroMem4B(void*   p,   unsigned   int   size)
{
        _asm
        {
                mov   eax,   size     //实际是这里有问题
                shr   eax,   2
                mov   edi,   p     //这里报错   error   C2400:   inline   assembler   syntex
                                        //error   in   'second   operand ';   found   'new   line '
                mov   ecx,   eax
                mov   eax,   0
                rep   stosd
        }
}  

我改成下面的函数体就没问题了,为什么?纳闷阿
void   ZeroMem4B(void*   p,   unsigned   int   size)
{
        unsigned   int   s   =   size;     //加了这句
        _asm
        {
                mov   eax,   s                     //修改
                shr   eax,   2
                mov   edi,   p
                mov   ecx,   eax
                mov   eax,   0
                rep   stosd
        }
}

我定义了另外一个函数却没问题
float   _fastsqrt(float   f)
{
float   fResult;
_asm
{
mov   eax,   f           //这里也是直接使用参数,但是没问题
sub   eax,   0x3f800000
sar   eax,   1
add   eax,   0x3f800000
mov   fResult,   eax
}
return   fResult;
}

麻烦大虾解惑阿

[解决办法]
SIZE(size)在Inline Assembly中是一个关键字(大小写不敏感),有特别的含义,你把size改为s或其他非size即可。
[解决办法]
正常

热点排行