菜鸟请教AND EAX,80000007;和OR EAX,FFFFFFF8;的意义?
本帖最后由 学习中-2 于 2014-1-23 19:39 编辑请教各位老师,因为想了解一个程序的算法,初学C语言和反汇编,遇到AND EAX,80000007;和OR EAX,FFFFFFF8;这两段代码,想请教这个,80000007和FFFFFFF8有什么特别意义呢?这两条运算的目的是什么呢?谢谢大家!! 取出一些特定的bit位吧,把其他无关的抹杀掉! 本帖最后由 学习中-2 于 2014-1-23 20:23 编辑
无名侠 发表于 2014-1-23 19:55 static/image/common/back.gif
取出一些特定的bit位吧,把其他无关的抹杀掉!
谢谢版主的答复,我在动态调试时发现EAX是在00000000到0000FFFF之间变化,我想知道这样的两段运算具体能达到什么效果??
00409B1C .8BC5 MOV EAX,EBP
00409B1E .25 07000080 AND EAX,80000007
00409B23 .79 05 JNS SHORT 工具.00409B2A
00409B25 .48 DEC EAX
00409B26 .83C8 F8 OR EAX,FFFFFFF8
00409B29 .40 INC EAX
00409B2A >74 12 JE SHORT 工具.00409B3E
00409B2C .8BC5 MOV EAX,EBP
00409B2E .99 CDQ
00409B2F .83E2 07 AND EDX,7
00409B32 .03C2 ADD EAX,EDX
00409B34 .C1F8 03 SAR EAX,3
学习中-2 发表于 2014-1-23 20:19 static/image/common/back.gif
谢谢版主的答复,我在动态调试时发现EAX是在00000000到0000FFFF之间变化,我想知道这样的两段运算具体能达 ...
位移之类的感觉非常蛋疼,恕我无能为力。 我只是路过打酱油的。 OR EAX,FFFFFFF8 #FFFFFFF8 =11111111 11111111 1111111111111000
意思就是说如果EAX 最后3位是0 那么EAX里的值就是FFFFFFF8,如果EAX 最后3位不是0,那么EAX就是FFFFFFFF,说白了OR就是将某些位置置1。指令执行结果影响SF,ZF和PF标志位。
相反的是AND,说白了就是将某些位置置0。指令执行结果影响SF,ZF和PF标志位。
页:
[1]