标题:
求教关于命令AND EAX, 0FF的问题
[打印本页]
作者:
武骧金星
时间:
2010-2-27 14:44
标题:
求教关于命令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
时间:
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。
欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/)
Powered by Discuz! 5.0.0