c语言的嵌入汇编的一个问题,高分,请高手进入,不够再加分

wtzmax 2008-04-18 06:04:28
在一段linux下的代码中有这样一段
#elif i386

asm(" .text
.align 8
.globl _get_sw,__get_sw
__get_sw:
_get_sw:
pushl %ebp
movl %esp,%ebp
movl $0,%eax
fnstsw %ax
movl %ebp,%esp
popl %ebp
ret

.align 8
.globl _get_cw,__get_cw
__get_cw:
_get_cw:
pushl %ebp
movl %esp,%ebp
subw $2,%esp
fnstcw -2(%ebp)
movw -2(%ebp),%eax
movl %ebp,%esp
popl %ebp
ret


");


#else

不知道是什么意思,请高手解释一下。另外怎样才能在VC下编译通过,VC出了一堆错误
error C2143: syntax error : missing ';' before '__asm'
error C2001: newline in constant
error C2501: '_get_sw' : missing storage-class or type specifiers
error C2239: unexpected token ':' following declaration of '_get_sw'
error C2059: syntax error : '%'
error C2001: newline in constant
#warning no fpu trap support for this target
#endif

谢谢高手能给予指点
...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我啃 2008-04-18
  • 打赏
  • 举报
回复
VC支持M$风格的汇编,GCC支持AT&T的风格
关键词不同
VC:
__asm
{
;code here
}

GCC:
asm(;code here)
GCC麻烦一点,建议google一下
cnzdgs 2008-04-18
  • 打赏
  • 举报
回复
在VC中定义两个函数,你试试下列代码:
WORD _get_sw(void)
{
WORD result;
__asm xor eax, eax
__asm fnstsw ax
return result;
}

WORD _get_cw(void)
{
WORD result;
__asm fnstcw result
return result;
}
wtzmax 2008-04-18
  • 打赏
  • 举报
回复
有高人能大致改改不?
独孤过儿 2008-04-18
  • 打赏
  • 举报
回复
你内嵌的是AT&T的汇编,这个是gcc编译器才认的,VC根本不认...你要是想在VC里面嵌汇编,要将汇编改成MASM格式的才行啊!

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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