标题: 求教关于命令AND EAX, 0FF的问题
性别:男-离线 武骧金星

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 29
帖子 1763
编号 56399
注册 2005-12-31
来自 上海


发表于 2010-2-27 14:44 资料 个人空间 短消息 只看该作者 QQ
求教关于命令AND EAX, 0FF的问题

抄袭代码过程中发现了一个问题:

假如有一段代码是这样的:

MOV ECX, MOV DWORD PTR SS:[EBP-4]
Call 45F670
AND EAX, 0FF
CMP eax, 10

我知道AND EAX, 0FF的作用是将EAX中除了AL外的其他位置清零,但这样有一个问题:45F670得到的武将ID,如果是10,110,210,310的话,会被这条代码全部同化成10。

当然这个问题很容易解决,只要改成AND EAX, 0FFF就可以了……一个字节也不用多加。

但是,我不明白为什么在调用45F670后,需要使用AND命令,否则有时候判断就会除错(根据写代码的结果,有时候不加AND EAX,0FFF的话代码判断就和原来不一样)。45F670不是将武将ID返回到EAX中吗?一个武将只有一个ID,那么直接比较不就可以了么?


顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2010-2-27 15:34 资料 个人空间 短消息 只看该作者
45F670的用法根据不同的地方,输出的值有所不同
如果用在DATA内存,DATA内存里面,第0、1位是武将编号,但是第1位是1*开头的,比如0号武将是00 10,1号武将是01 10……而第2、3位是R形象编号,而45F670是输出第0-3位的值(DWORD),所以一般要AND EAX,0FFF。
如果用在战场内存,战场内存的第0-3位就是武将编号,所以不用加AND
用在其他地方就要看实际情况。

所以要在DATA内存中取出武将编号,建议用CALL 409500。


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-6-18 13:39
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.010473 second(s), 10 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP