| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2582 人关注过本帖
标题:【新手学汇编】在看老罗的书的时候,看其中一个例子 遇到点疑问
只看楼主 加入收藏
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
结帖率:0
收藏
 问题点数:0 回复次数:4 
【新手学汇编】在看老罗的书的时候,看其中一个例子 遇到点疑问
代码如下
            .elseif ax ==    IDC_NUM1 || ax == IDC_NUM2
                invoke    GetDlgItemInt,hWnd,IDC_NUM1,NULL,FALSE
                push    eax                     ////这里 eax 应该是IDC_NUM1取的值,然后压栈保存  难道不应该写成mov ecx,eax 吗?
                invoke    GetDlgItemInt,hWnd,IDC_NUM2,NULL,FALSE
                pop    ecx                         ////这里  eax=IDC_NUM2,那么这个pop ecx是什么意思呢?
                invoke    _Mod,ecx,eax



新手疑问,请各位大大代为解惑
2016-10-12 18:12
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:340
专家分:2482
注 册:2016-5-15
收藏
得分:0 
GetDlgItemInt这里的意思应该是获取两个dialog box对话框,IDC_NUM1和IDC_NUM2里的值存入EAX
先取IDC_NUM1入栈,再取时EAX是IDC_NUM2对话框的值,pop回ECX后,EAX和ECX就是2个对话框的值,
再由_mod处理
2016-10-13 15:30
asdiopss
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-9-23
收藏
得分:0 
回复 2楼 Valenciax
我的意思是 Push eax  为什么不能写成 mov ecx,eax这样
2016-10-13 23:21
worldlc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:117
注 册:2016-10-13
收藏
得分:0 
回复 3楼 asdiopss
为了保证  值的完整。  因为你不确定 在运行到pop ecx之前  ecx的 是否被改变。     把 值 放到一个 不会被改变的 内存去。  用的 时候 再取出。  这样 就能保证  这个值的完整。
2016-10-14 08:40
卡魔
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-3-9
收藏
得分:0 
回复 楼主 asdiopss
这是windows函数调用约定的问题,API函数调用后,ECX的值会改变。
这就是不能直接mov ecx,eax的原因。
2022-03-09 14:41
快速回复:【新手学汇编】在看老罗的书的时候,看其中一个例子 遇到点疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025244 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved