注册 登录
编程论坛 汇编论坛

【新手学汇编】在看老罗的书的时候,看其中一个例子 遇到点疑问

asdiopss 发布于 2016-10-12 18:12, 2749 次点击
代码如下
            .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



新手疑问,请各位大大代为解惑
4 回复
#2
Valenciax2016-10-13 15:30
GetDlgItemInt这里的意思应该是获取两个dialog box对话框,IDC_NUM1和IDC_NUM2里的值存入EAX
先取IDC_NUM1入栈,再取时EAX是IDC_NUM2对话框的值,pop回ECX后,EAX和ECX就是2个对话框的值,
再由_mod处理
#3
asdiopss2016-10-13 23:21
回复 2楼 Valenciax
我的意思是 Push eax  为什么不能写成 mov ecx,eax这样
#4
worldlc2016-10-14 08:40
回复 3楼 asdiopss
为了保证  值的完整。  因为你不确定 在运行到pop ecx之前  ecx的 是否被改变。   而  把 值 放到一个 不会被改变的 内存去。  用的 时候 再取出。  这样 就能保证  这个值的完整。
#5
卡魔2022-03-09 14:41
回复 楼主 asdiopss
这是windows函数调用约定的问题,API函数调用后,ECX的值会改变。
这就是不能直接mov ecx,eax的原因。
1