小弟初学习windows32位汇编开发,以前我是用C++的
有很多指令不是太懂请教
==========================
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
在汇编中的函数定义为什么要那样写特别是前面的
uses ebx edi esi 着3个寄存器在这里有什么用汇编语言的参数是如何的
传递的,如果在C语言中:
这样定义函数 void s(int a,int b)
要这样使用s(a,b)
但是我在32未汇编中很少看到参数的传递
有些是这么写的
invoke DialogBoxParam,eax,DLG_MAIN,NULL offset _ProcDlgMain,NULL
我知道上面的offset _ProcDlgMain是传递的函数地址那参数呢?
最后还有一个问题就是函数返回值的问题
是不是在32位汇编中函数返回ret都是默认的eax寄存器的内容,那怎么看出来返回的
是bool类型还是int类型
象这个_ProcDlgMain函数的最后是
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
象这样的函数的返回值是不是就是bool的
------解决方案--------------------------------------------------------
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
--------------------
uses ebx edi esi 是指 _ProcDlgMain 这个子程要使用到 ebx edi 和 esi 寄存器, 这样编译程序会在子程的开始自动加上将它们压栈的指令, 在子程结束返回前加上出栈恢复它们的指令.
hWnd, wMsg, wParam, lParam 就是传递给 _ProcDlgMain 子程的参数, 如同上面的那个 int a, int b 似的
invoke DialogBoxParam,eax,DLG_MAIN,NULL offset _ProcDlgMain,NULL
--------------------
这个是调用 DialogBoxParam 函数的意思. eax, DLG_MAIN, NULL, offset ProcDlgMain, NULL 都是传递给 DialogBoxParam 函数的参数. 这里的 offset ProdDlgMain 是将 ProcDlgMain 子程的起始地址作为参数传送给 DialogBoxParam 函数的, 和 ProcDlgMain 子程的参数没用关系
返回值的问题, bool 和 int 在汇报级上都是 dword 来表示的. 一个值, 是什么样数值的类型, 有你处理它的方法决定的. 如果是 bool 类型, 一般是通过查看它是否为 0 来决定是否是 false; 往往认为非 0 即是 true