2019年1月12日【生日快乐】

昨天期末考试结束,期末考试一结束我就开心的开始学习知识啦,开始寒假集训,emmm~
今天也过生日~,然而过生日也无法阻挡我的学习步伐~
当然玩也是很重要的,所以学的少一些喽~

目录:
1、为一段简单的汇编代码添加注释
2、学习函数调用的基本方式

一、解释以下汇编语言的含义(已经添加注释)
xor edx,edx //清空edx
mov edx,51EB851EH //明显的乘法运算将eax*edx,并且将高32位放在edx,低32位放在eax
imul ecx
shr edx 5 //将edx右移5位,并赋予eax
mov eax,edx
总作用:将edx与eax相乘,高32位放在edx,低32位放在eax,并将edx右移5位,放在eax中

二、名词解释:
__cdecl __fastcall __stdcall __thiscall __vectorcall __clrcall
这些词汇都是应用于约定调用的,它决定了以下3个细节:
1、函数参数的压栈顺序
2、由程序,还是函数本身将参数弹出栈
3、产生函数的修饰名的方法
__cdecl
1、c语言默认的调用方法
2、当被调用者无法得知参数大小的时候,手动清栈
3、从右向左调用程序
4、调用函数时传递过多过少的参数都不会引起编译错误,带有可变参数的函数只能使用__cdecl
__stdcall
1、c++的函数标准调用方式、windows API
2、从右向左进栈
3、堆栈中的参数由被调用的参数清除,指令为retnx,x代表参数占用的字节数,ret后自动弹出x字节的堆栈空间
__fastcall
1、特点是快,通过寄存器调用传递参数(ecx edx传送最左边两个双字【DWORD】或者更小的参数,剩下的从左到右依次传参)
2、从右向左进栈,函数在返回前自动清理传送参数的内存栈
__thiscall
1、仅仅应用于c++成员函数,this指针存放于cx寄存器,参数从右到左压,
2、thiscall是为了解决类成员变量调用this指针而规定的。
__vectorcall
1、要求尽可能在寄存器中传递参数,函数名改编为:@@函数名@参数字节数十进制
__clrcall
1、c++.net里的

猜你喜欢

转载自www.cnblogs.com/wuruixin/p/10262352.html