地址、指針和引用

地址:?對(duì)變量取地址使用“&”符號(hào)

指針:?TYPE *?定義指針,TYPE為數(shù)據(jù)類型

引用:?TYPE &?定義引用,TYPE為數(shù)據(jù)類型

地址和指針
c?代碼
匯編

13? int nVar = 0x12345678;

mov dword ptr ss:[ebp-C],12345678

14? int *pnVar = &nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-18],eax? ? //直接將地址存入內(nèi)存

15? char *pcVar = (char*)&nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-24],eax

16? short *psnVar = (short*)&nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-30],eax

18? printf("Justin: %08x \r\n", *pnVar);

19? printf("Justin: %08x \r\n", *pcVar);

20? printf("Justin: %08x \r\n", *psnVar);

23? char cVar[5] = {0x01, 0x23, 0x45, 0x67, 0x89};

mov byte ptr ss:[ebp-40],1

mov byte ptr ss:[ebp-3F],23

mov byte ptr ss:[ebp-3E],45

mov byte ptr ss:[ebp-3D],67

mov byte ptr ss:[ebp-3C],89

內(nèi)存數(shù)據(jù)

24? int *pnVar1 = (int*)cVar;

lea eax,dword ptr ss:[ebp-40]

mov dword ptr ss:[ebp-4C],eax

25? char *pcVar1 = (char*)cVar;

lea eax,dword ptr ss:[ebp-40]

mov dword ptr ss:[ebp-58],eax

26? short *psnVar1 = (short*)cVar;

lea eax,dword ptr ss:[ebp-40]

mov dword ptr ss:[ebp-64],eax

27? pnVar1 += 1;

mov eax,dword ptr ss:[ebp-4C]

add eax,4? ?//int?指針 4?位

mov dword ptr ss:[ebp-4C],eax

28? pcVar1 += 1;

mov eax,dword ptr ss:[ebp-58]

add eax,1? ? //char?指針 1位

mov dword ptr ss:[ebp-58],eax

29? psnVar1 += 1;

mov eax,dword ptr ss:[ebp-64]

add eax,2? //short指針 2位

mov dword ptr ss:[ebp-64],eax

32? int &nVarType = nVar;

lea eax,dword ptr ss:[ebp-C]

mov dword ptr ss:[ebp-70],eax

33? Add(nVar);

lea eax,dword ptr ss:[ebp-C]

push eax

call addressandpointerref.A11320

add esp,4


void Add(int &nVar) {

nVar++;

mov eax,dword ptr ss:[ebp+8]? ? //堆棧寄存器,獲取函數(shù)調(diào)用前push的地址

mov ecx,dword ptr ds:[eax]? ? ? ? //數(shù)據(jù)段寄存器

add ecx,1

mov edx,dword ptr ss:[ebp+8]

mov dword ptr ds:[edx],ecx

}

AH&AL=AX(accumulator):累加寄存器?

BH&BL=BX(base):基址寄存器?

CH&CL=CX(count):計(jì)數(shù)寄存器?

DH&DL=DX(data):數(shù)據(jù)寄存器?

SP(Stack Pointer):堆棧指針寄存器?

BP(Base Pointer):基址指針寄存器?

SI(Source Index):源變址寄存器?

DI(Destination Index):目的變址寄存器?

IP(Instruction Pointer):指令指針寄存器?

CS(Code Segment)代碼段寄存器?

DS(Data Segment):數(shù)據(jù)段寄存器?

SS(Stack Segment):堆棧段寄存器?

ES(Extra Segment):附加段寄存器?

OF overflow flag 溢出標(biāo)志 操作數(shù)超出機(jī)器能表示的范圍表示溢出,溢出時(shí)為1.?

SF sign Flag 符號(hào)標(biāo)志 記錄運(yùn)算結(jié)果的符號(hào),結(jié)果負(fù)時(shí)為1.?

ZF zero flag 零標(biāo)志 運(yùn)算結(jié)果等于0時(shí)為1,否則為0.?

CF carry flag 進(jìn)位標(biāo)志 最高有效位產(chǎn)生進(jìn)位時(shí)為1,否則為0.?

AF auxiliary carry flag 輔助進(jìn)位標(biāo)志 運(yùn)算時(shí),第3位向第4位產(chǎn)生進(jìn)位時(shí)為1,否則為0.?

PF parity flag 奇偶標(biāo)志 運(yùn)算結(jié)果操作數(shù)位為1的個(gè)數(shù)為偶數(shù)個(gè)時(shí)為1,否則為0.?

DF direcion flag 方向標(biāo)志 用于串處理.DF=1時(shí),每次操作后使SI和DI減小.DF=0時(shí)則增大.?

IF interrupt flag 中斷標(biāo)志 IF=1時(shí),允許CPU響應(yīng)可屏蔽中斷,否則關(guān)閉中斷.?

TF trap flag 陷阱標(biāo)志 用于調(diào)試單步操作.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容