VS c++ 64位 嵌入 汇编代码

dodo4444 2016-06-15 07:18:39
本人在vs 32 位程序下写过一个简单的汇编, 其代码是这样的:

static __forceinline int GetMinStep(unsigned int v)
{
__asm {
bsf eax, v
jnz l_f
mov eax, -1
l_f:
}
}

现在要把这份代码迁入vs2013 64位程序下. 查了下好像比较复杂. 求知道的朋友给一个比较详细的指导. 谢谢
...全文
936 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dodo4444 2016-06-17
  • 打赏
  • 举报
回复
引用 7 楼 DelphiGuy 的回复:
如果你传入的v是64位类型,编译器就会自动生成64位操作数的bsf指令,所以说最好用intrinsics替换内嵌汇编。
谢谢你...我结贴了.
dodo4444 2016-06-16
  • 打赏
  • 举报
回复
引用 2 楼 DelphiGuy 的回复:
VC++ 64未编译器不支持内嵌汇编,你非要用的话,要么换intel C++,要么连接外部汇编.obj。最简单的方法是用intrinsics替换内嵌汇编,可以32位、64位通用: #include <intrin.h> static __forceinline int GetMinStep(unsigned int v) { unsigned long index; if (_BitScanForward(&index, v)) return index; else return -1; }
真的很谢谢你. 这个函数很好用, 而且还有__int64的函数. 呵呵
dodo4444 2016-06-16
  • 打赏
  • 举报
回复 1
引用 2 楼 DelphiGuy 的回复:
VC++ 64未编译器不支持内嵌汇编,你非要用的话,要么换intel C++,要么连接外部汇编.obj。最简单的方法是用intrinsics替换内嵌汇编,可以32位、64位通用: #include <intrin.h> static __forceinline int GetMinStep(unsigned int v) { unsigned long index; if (_BitScanForward(&index, v)) return index; else return -1; }
我刚才使用.asm 文件编译了.obj文件成功, 但是我不知道如何在汇编下实现这一功能, 请问你能给我实现以下.asm的内部实现么? 如果参数是 unsigned __int64 的话最好. 谢谢你了!!(主要是没有对汇编不了解)
  • 打赏
  • 举报
回复
如果你传入的v是64位类型,编译器就会自动生成64位操作数的bsf指令,所以说最好用intrinsics替换内嵌汇编。
  • 打赏
  • 举报
回复
怎么总出错别字,是年纪大了,注意力不集中的表现 VC++ 64编译器不支持内嵌汇编
  • 打赏
  • 举报
回复
bsf指令延迟在最近几代core i处理器上都是3个时钟周期。
  • 打赏
  • 举报
回复
VC++ 64未编译器不支持内嵌汇编,你非要用的话,要么换intel C++,要么连接外部汇编.obj。最简单的方法是用intrinsics替换内嵌汇编,可以32位、64位通用: #include <intrin.h> static __forceinline int GetMinStep(unsigned int v) { unsigned long index; if (_BitScanForward(&index, v)) return index; else return -1; }
dodo4444 2016-06-15
  • 打赏
  • 举报
回复
补充下, 最好给一下 bsf 指令的执行时间周期 谢谢

21,458

社区成员

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

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