1. 程式人生 > >2019年1月12日【生日快樂】

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

ret 清理 返回 進制 基本 依次 並且 可變參 mmm

昨天期末考試結束,期末考試一結束我就開心的開始學習知識啦,開始寒假集訓,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裏的

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