xiaosawanjava 发表于 2014-10-11 20:44:08

EAX & MF_CHECKED 的疑问

invoke        GetMenuState,hMenu,EBX,MF_BYCOMMAND
                        .IF EAX&MF_CHECKED       
                                MOV EAX,MF_UNCHECKED
                        .else e
                                MOV EAX,MF_CHECKED
                        .endif

我搞不明白的就是 EAX&MF_CHECKED           这是怎么确定 EAX就是等于MF_CHECKED,这不是 按位与 操作吗,如果是        EAX==MF_CHECKED       这样写我还明白,   求解释


dAb 发表于 2014-10-12 01:21:03

.if   eax   ;如果eax为真
.if   !eax;如果eax不为真

.IF EAX&MF_CHECKED
API返回值eax 和 MF_CHECKED 与运算后,如果eax和MF_CHECKED一致,那么就是真了(与运算两边都是真才是真)
其实和EAX==MF_CHECKED差不多,说法是传说这样运行快点

xiaosawanjava 发表于 2014-10-12 13:21:09

dAb 发表于 2014-10-12 01:21
.if   eax   ;如果eax为真
.if   !eax;如果eax不为真



API返回值eax 和 MF_CHECKED 与运算后,如果eax和MF_CHECKED一致,那么就是真了

& 这个是 按位与运算,是不是说如果 eax & MF_CHECKED他们的结果还是 eax 那就表示他们相等?

dAb 发表于 2014-10-12 17:03:17

xiaosawanjava 发表于 2014-10-12 13:21
API返回值eax 和 MF_CHECKED 与运算后,如果eax和MF_CHECKED一致,那么就是真了

& 这个是 按位与 ...

与运算后结果只有真或假,MF_CHECKED是8,GetMenuState的返回值eax如果也是8,那么就是8和8进行与运行,结果当然是真了   
.IF EAX&MF_CHECKED    和    .IF EAX==MF_CHECKED    可以当一样理解
所以 他们的结果还是 eax 那就表示他们相等? 应该说 他们的结果是真那就表示他们相等

GetMenuState

库:user32
获取指定菜单条目的状态
返回值
一系列标志的组合,请看下表。
如条目是个弹出式菜单,那么结构的最低字节就包含了状态标志,而第二个字节包含条目在弹出式菜单中的数量MF_HILITE 菜单条目加亮显示(处于选定状态)
MF_CHECKED 菜单条目处于复选状态
MF_DISABLED 菜单条目处于禁止状态
MF_GRAYED 菜单条目以灰色显示,处于禁用状态
MF_MENUBARBREAK 为这个条目指定一条分隔线。参考ModifyMenu函数
MF_MENUBREAK 为这个条目指定一个菜单分隔标志。参考ModifyMenu函数
MF_SEPARATOR 菜单条目是一个分隔符


格式
GetMenuStatehMenu, wID, wFlags
参数 说明
hMenu 指定的窗口句柄
wID 欲检查的菜单条目的标识符。如果在wFlags参数中设置了MF_BYCOMMAND标志,这个参数就用于指定要改变的菜单条目的命令ID。如果设置的是MF_BYPOSITION标志,这个参数就用于指定条目在菜单中的位置(第一个条目的位置为0)
wFlags 常数MF_BYCOMMAND或MF_BYPOSITION,取决于wID参数的设置

xiaosawanjava 发表于 2014-10-12 21:28:17

dAb 发表于 2014-10-12 17:03
与运算后结果只有真或假,MF_CHECKED是8,GetMenuState的返回值eax如果也是8,那么就是8和8进行与运行, ...

假如 eax 是8   那就是   8 & 8   我搞不懂这个 &到底是什么运算,这个& 是相当于 c 语言的 && 吗,如果是的话,那 8 & 8   两边不为零 肯定是真,如果是汇编的 按位与 运算   那结果就是8

dAb 发表于 2014-10-12 22:12:42

Win32汇编的是
&   与
&& 逻辑与

不必纠结了,你以后就写 ==一样的

xiaosawanjava 发表于 2014-10-13 19:14:20

dAb 发表于 2014-10-12 22:12
Win32汇编的是
&   与
&& 逻辑与


大神,别放弃我。

ilboyvm 发表于 2014-10-13 23:01:22

不会,帮楼主顶上去

大个的糖果 发表于 2014-10-31 23:49:11

页: [1]
查看完整版本: EAX & MF_CHECKED 的疑问