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

ftkghost 2007-04-02 08:12:01
我自己定义一个清零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;
}

麻烦大虾解惑阿
...全文
262 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-04-03
  • 打赏
  • 举报
回复
关键字用错了,语义自然也错了
jixingzhong 2007-04-03
  • 打赏
  • 举报
回复
正常
ftkghost 2007-04-03
  • 打赏
  • 举报
回复
谢谢~解决了,的确是关键字的问题,不过这报错也忒奇怪~
NoBlank 2007-04-02
  • 打赏
  • 举报
回复
SIZE(size)在Inline Assembly中是一个关键字(大小写不敏感),有特别的含义,你把size改为s或其他非size即可。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧