鱼C论坛

 找回密码
 立即注册
查看: 2249|回复: 3

eax == IDM_BIG 这样比较没有错误吗?

[复制链接]
发表于 2014-7-9 08:38:41 | 显示全部楼层 |阅读模式
5鱼币
;资源文件定义如下:
#include                  <resource.h>

#define   IDM_BIG   0x2201         ;这里定义的IDM_BIG应该是16位的吧??

IDM_MAIN       menu        discardable   ;定义菜单
BEGIN
         popup    "图标和光标(&I)"
         BEGIN
                        menuitem       "大图标(&G)",       IDM_BIG
         END
END
;在程序中又有如下代码:
.elseif     eax == WM_COMMAND
              mov      eax, wParam
              movzx  eax, ax
             .if           eax == IDM_BIG      ;这里的eax是32位的吧?32位的与16位的可以进行比较吗?
上述程序是书中的源码,我把里面的 movzx eax, ax 去掉,把后面的eax改成ax, 变成   ax == IDM_BIG 也能通过编译并执行,
好像和原来并没有什么区别。
不管movzx对eax执行了什么操作,eax总是32位的吧?我总觉得32位的eax与16位的IDM_BIG比较是错误的。
有人给解释一下吗?

最佳答案

查看完整内容

.elseif eax == WM_COMMAND mov eax, wParam movzx eax, ax .if eax == IDM_BIG movzx eax,ax指令就是把EAX寄存器的低16位赋值为AX的值。高位填充0 所以 movzx eax,ax .if eax==IDM_BIG等价于直接 .if ax==IDM_BIG,区别就是eax的高位被改变了 你定义IDM_BIG 为0x2201 eax==IDM_BIG在编译的时候会被编译器替换成 eax==0x2201 这里就是你要的问 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-9 08:38:42 | 显示全部楼层
.elseif     eax == WM_COMMAND
              mov      eax, wParam
              movzx  eax, ax
             .if           eax == IDM_BIG

movzx eax,ax指令就是把EAX寄存器的低16位赋值为AX的值。高位填充0
所以
movzx eax,ax
.if eax==IDM_BIG等价于直接
.if ax==IDM_BIG,区别就是eax的高位被改变了

你定义IDM_BIG 为0x2201
eax==IDM_BIG在编译的时候会被编译器替换成
eax==0x2201


这里就是你要的问题了,eax可以为1吧。那eax应该就可以与1进行比较了
比如.if eax==1 .if eax==0x1 .if eax==0x2 .if eax==2
.if eax==0x10
.if eax==16
红色标记的两句是等价的


这里只是eax同数值进行比较而不是eax同其他寄存器的数值进行比较.if eax==ax像这样就不行了
由于不清楚楼主是哪里不清楚。所以回答了很多东西。楼主自己看下


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 20:25:42 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2014-7-11 21:36
.elseif     eax == WM_COMMAND
              mov      eax, wParam
              movzx  eax, ax

谢谢你的回答。我想我明白了。回答的很好,一看就开窍了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 20:26:50 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2014-7-11 21:36
.elseif     eax == WM_COMMAND
              mov      eax, wParam
              movzx  eax, ax

谢谢你的回答。我想我明白了。回答的很好,一看就开窍了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表