免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: system888net
打印 上一主题 下一主题

32bit的编译器向64bit移植时要注意的一个小问题. [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-04-24 20:58 |只看该作者
dxcnjupt 所说是对的

另见:
http://bbs.chinaunix.net/viewthr ... 3Ddigest&page=7

论坛徽章:
0
22 [报告]
发表于 2008-04-24 21:48 |只看该作者

回复 #21 mik 的帖子

call dword ptr DS:[0xff]
                call dword ptr DS:[0xffffffff]
vc6.0编译后得:
        call        DWORD PTR ds:255
        call        DWORD PTR ds:-1

论坛徽章:
0
23 [报告]
发表于 2008-04-24 22:03 |只看该作者
原帖由 system888net 于 2008-4-24 21:48 发表
call dword ptr DS:[0xff]
                call dword ptr DS:[0xffffffff]
vc6.0编译后得:
        call        DWORD PTR ds:255
        call        DWORD PTR ds:-1


汗~
好,就拿你这两条语句来说:

call dword ptr ds:[0xff]            被编译成: 3e ff 15 ff 00 00 00
call dword ptr ds:[0xffffffff]      被编译成: 3e ff 15 ff ff ff ff

你自己说说是什么意思

论坛徽章:
0
24 [报告]
发表于 2008-04-24 22:14 |只看该作者
原帖由 mik 于 2008-4-24 22:03 发表


汗~
好,就拿你这两条语句来说:

call dword ptr ds:[0xff]            被编译成: 3e ff 15 ff 00 00 00
call dword ptr ds:[0xffffffff]      被编译成: 3e ff 15 ff ff ff ff

你自己说说是什么意思


大侠直接说出自己的观点!

论坛徽章:
0
25 [报告]
发表于 2008-04-24 22:18 |只看该作者
原帖由 system888net 于 2008-4-24 22:14 发表


大侠直接说出自己的观点!


我说很容易呀 ,不是叫你说说看,你理解成什么嘛!

这样才会学习到呀

论坛徽章:
0
26 [报告]
发表于 2008-04-24 22:22 |只看该作者
原帖由 mik 于 2008-4-24 22:18 发表


我说很容易呀 ,不是叫你说说看,你理解成什么嘛!

这样才会学习到呀


请说出你的编译工具和环境.

另外64bit反对的结论也请大侠说出依据或实例!

论坛徽章:
0
27 [报告]
发表于 2008-04-24 22:45 |只看该作者
原帖由 mik 于 2008-4-23 23:55 发表


你的理解完全是错误的!

call dword ptr [n32]     这种形式是绝对地址,目标地址来自[N32]
至于:
在64位下:call dword ptr [n32]  这种形式的调用是错误的!
64位下,地址强制性为64位,不可能转为 ...


闹了半天,这句话不用不用争了:
"call dword ptr [n32]     这种形式是绝对地址,目标地址来自[N32]"
原文也是这个意思.也许是表述的不太好.

和大侠分歧最大是在64bit这里:
对于64bit的说法,这里再描述一下:
address0: CALL DWORD PTR [N32]
在 32 位模式中,是调用地址 N32 中存储的 32 位指针值的指令:
在 64 位模式中,相同的操作码字节调用地址 address0+N32 中存储的 64 位指针值
指令本身也是5byte.
请大侠查清楚64bit的指令.

[ 本帖最后由 system888net 于 2008-4-24 22:47 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2008-04-24 23:08 |只看该作者
原帖由 system888net 于 2008-4-24 22:45 发表


闹了半天,这句话不用不用争了:
"call dword ptr [n32]     这种形式是绝对地址,目标地址来自[N32]"
原文也是这个意思.也许是表述的不太好.

和大侠分歧最大是在64bit这里:
对于64bit的说法,这里再 ...


从你的论述中,你还没明白 call dword ptr [n32] 的含义
以至于你会认为是5个字节,5个字节是错误的

至于你说的64位下,也不是等于你说的address0+n32

论坛徽章:
0
29 [报告]
发表于 2008-04-24 23:19 |只看该作者

回复 #16 mik 的帖子

这是真正的分歧所在.

对于64bit这次大侠的确有误
大侠自己可以测试一下或查一下intel的资料或与intel的人确认一下,再做结论.

如果大侠测试出不同的结果,请告知编译工具和平台,以便客观的进行交流.

可以看出大侠的汇编功底很好,这里顶一下,希望这个论坛更火爆.

论坛徽章:
0
30 [报告]
发表于 2008-04-24 23:25 |只看该作者
原帖由 mik 于 2008-4-24 23:08 发表


从你的论述中,你还没明白 call dword ptr [n32] 的含义
以至于你会认为是5个字节,5个字节是错误的

至于你说的64位下,也不是等于你说的address0+n32


是不是5个字节, 要指明编译器和平台,或见intel或者微软的<<开始进行 64 位 Windows 系统编程之前需要了解的所有信息>>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP