内嵌的汇编错误

starmoon 2000-05-26 07:07:00
extern "C" int ilog3(__int64 d)
{ int _Eax;
union{__int64 i64;int i[2];} u;
u.i64=d;
__asm mov ebx,0;
__asm inc u+4;
__asm bsr ebx,DWORD PTR u+4;//出错的行
__asm cmp ebx,0;
__asm jz m1;
__asm add ebx,32
#if !defined(__BORLANDC__)
__asm mov _Eax,ebx
return _Eax;
#else return _EAX;
#endif
__asm m1:
__asm inc u.i[0];
__asm bsr ebx,DWORD PTR u.i[0];
#if !defined(__BORLANDC__)
__asm mov _Eax,ebx
return _Eax;
#else
return _EAX;
#endif
}

第七行在vc4.1下边一总时报error structize
...全文
77 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolie 2000-05-26
  • 打赏
  • 举报
回复
試0試——asm bsr ebx,dword ptr[u+4]
gcc在编译内嵌汇编语言时,采取的步骤如下 变量输入: 根据限定符的内容将输入操作数放入合适的寄存器,如果限定符指定为立即数("i")或内存变量("m"),则该步被省略,如果限定符没有具体指定输入操作数的类型(如常用的"g"),gcc会视需要决定是否将该操作数输入到某个寄存器.这样每个占位符都与某个寄存器,内存变量,或立即数形成了一一对应的关系.这就是对第二个冒号后内容的解释.如::"a"(foo),"i"(100),"m"(bar)表示%0对应eax寄存器,%1对应100,%2对应内存变量bar. 生成代码: 然后根据这种一一对应的关系(还应包括输出操作符),用这些寄存器,内存变量,或立即数来取代汇编代码中的占位符(则有点像宏操作),注意,则一步骤并不检查由这种取代操作所生成的汇编代码是否合法,例如,如果有这样一条指令asm("movl %0,%1"::"m"(foo),"m"(bar));如果你用gcc -c -S选项编译该源文件,那么在生成的汇编文件中,你将会看到生成了movl foo,bar这样一条指令,这显然是错误的.这个错误在稍后的编译检查中会被发现. 变量输出: 按照输出限定符的指定将寄存器的内容输出到某个内存变量中,如果输出操作数的限定符指定为内存变量("m"),则该步骤被省略.这就是对第一个冒号后内容的解释,如:asm("mov %0,%1":"=m"(foo),"=a"(bar):);编译后为 #APP movl foo,eax #NO_APP movl eax,bar 该语句虽然有点怪怪的,但它很好的体现了gcc的运作方式. 
WIN-TC免费版是一个turbo C2 WINDOWS平台开发工具,最大特点是支持中文界面,支持鼠标操作,程序段复制,WIN-TC免费版为初学c语言、对高等编程环境不熟悉的同志们非常有帮助。 WIN-TC免费版使用turbo C2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具令你在编程过程中更加游刃有余,如虎添翼。WIN-TC简繁双语版可以正常运行于98及其以上的简体及繁体WINDOWS操作系统上。 主要功能: 1、在WINDOWS下编辑TC代码,可以充分利用WINDOWS的支持剪贴版和中文的特点;   2、Include和Lib路径自动定位,告别TC设置路径的历史;   3、编译错误捕捉功能,编译时不会出现烦人的DOS窗口;   4、支持C内嵌汇编从而实现C/ASM混合编程;   5、支持C扩展库(自定义LIB库);   6、错误警告定位功能、出现编译错误时双击输出框里的出错行信息可以自动寻找到错误的行,就像DOS的TC那样;   7、支持语法加亮功能,并可以自定义设置;   8、没有目录路径限制,你甚至可以安装到带有空格的路径文件夹里;   9、允许自定义设置输入风格,能够实现VC类似的输入风格;   10、可选择是否生成ASM、MAP或OBJ文件,你甚至可以指定只生成EXE文件;   11、稳定的文件操作功能,支持历史记录列表和使用模板;   12、撤消和重复功能,并可以按照自己内存情况设置最多撤消次数(最多允许999次);   13、具有行标计数的功能,并可以设置样式。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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