www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 工業(yè)控制 > 電子設(shè)計(jì)自動(dòng)化
[導(dǎo)讀]從這部分開始我們除了利用內(nèi)存的信息打印來進(jìn)行探索外,更多的會(huì)通過跟蹤和觀察編譯器產(chǎn)生的匯編代碼來理解編譯器對(duì)這些語言特性的實(shí)現(xiàn)方式。匯編方面知識(shí)的討論超出了本文的范圍,我只對(duì)和我們討論相關(guān)的匯編代碼進(jìn)

從這部分開始我們除了利用內(nèi)存的信息打印來進(jìn)行探索外,更多的會(huì)通過跟蹤和觀察編譯器產(chǎn)生的匯編代碼來理解編譯器對(duì)這些語言特性的實(shí)現(xiàn)方式。匯編方面知識(shí)的討論超出了本文的范圍,我只對(duì)和我們討論相關(guān)的匯編代碼進(jìn)行解析。理解本文要討論的知識(shí)并不需要有很完整的匯編知識(shí),但必須了解起碼的概念。

下面我們看看引入虛繼承后的影響。為了有所對(duì)比我們首先看看普通成員函數(shù)的調(diào)用情況。

執(zhí)行如下代碼,它包括了對(duì)象的普通成員函數(shù)調(diào)用,類的靜態(tài)成員函數(shù)調(diào)用、通過指針調(diào)用普通成員函數(shù):

C010 obj;PRINT_OBJ_ADR(obj)obj.foo();C012::sfoo();C010 * pt = &obj;pt-> foo();

結(jié)果如下:

obj's address is : 0012F843

這是obj對(duì)象的內(nèi)存地址。

首先我們看看對(duì)象的普通成員函數(shù)調(diào)用,obj.foo();,對(duì)應(yīng)的匯編代碼為:

00422E09 lea ecx,[ebp+FFFFF967h]00422E0F call 0041E289

第1行把對(duì)象的地址存入ecx寄存器,執(zhí)行完這行指令后,我們要以看到ecx中的值為0x0012F843,就是前面打印出的值。如果函數(shù)需要傳遞參數(shù),我們還會(huì)在前面看到一些push指令。在第2行我們可以看到call的是一個(gè)直接的地址,這也就是靜態(tài)綁定。即函數(shù)的調(diào)用地址在編譯時(shí)已經(jīng)被編譯器決議。

跟蹤進(jìn)去我們要以看到是一條跳轉(zhuǎn)指令,繼續(xù)執(zhí)行可以看到真正的函數(shù)代碼部分,如下(注:為了討論方便我在第行前面加了一個(gè)行號(hào)):

01 00425FE0 push ebp02 00425FE1 mov ebp,esp03 00425FE3 sub esp,0CCh04 00425FE9 push ebx05 00425FEA push esi06 00425FEB push edi07 00425FEC push ecx08 00425FED lea edi,[ebp+FFFFFF34h]09 00425FF3 mov ecx,33h10 00425FF8 mov eax,0CCCCCCCCh11 00425FFD rep stos dword ptr [edi]12 00425FFF pop ecx13 00426000 mov dword ptr [ebp-8],ecx14 00426003 mov eax,dword ptr [ebp-8]15 00426006 mov byte ptr [eax],216 00426009 pop edi17 0042600A pop esi18 0042600B pop ebx19 0042600C mov esp,ebp20 0042600E pop ebp21 0042600F ret

我們看看第7行,把ecx寄存器入棧,后面4行初始化了函數(shù)的堆棧中的保存局部變量的部分。第12行彈出ecx值,到這里時(shí)ecx的值保持為在函數(shù)調(diào)用前存入的對(duì)象內(nèi)存地址,第13行就是保存this指針的值,作為一個(gè)局部變量。這樣我們就知道了VC7.1不是象傳遞普通函數(shù)那樣通過壓棧來傳遞this 指針,而是通過ecx寄存器來傳遞。第14、15行利用這個(gè)this指針給對(duì)象的成員變量進(jìn)行了賦值。

再看看靜態(tài)成員函數(shù)調(diào)用的匯編代碼:

00422E14 call 0041DD84

非常直接,因?yàn)樗恍枰幚韙his指針,跟蹤到函數(shù)的匯編代碼,可以看到同樣不需要處理this指針。具體的代碼這里就不列出來了。

再看看通過指針調(diào)用普通成員函數(shù)pt-> foo();,產(chǎn)生的匯編代碼如下:

00422E25 mov ecx,dword ptr [ebp+FFFFF958h]00422E2B call 0041E289

和通過對(duì)象調(diào)用普通成員函數(shù)的代碼差不多。不過存對(duì)象地址到ecx寄存器地,是通過解引用pt指針來找到對(duì)象地址的。



來源:ks990次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在電子產(chǎn)品的設(shè)計(jì)過程中,PCB(Printed Circuit Board,印刷電路板)的布局與布線是至關(guān)重要的環(huán)節(jié)。Altium Designer(簡(jiǎn)稱AD)作為業(yè)界廣泛使用的PCB設(shè)計(jì)軟件,提供了豐富的功能和靈活的規(guī)...

關(guān)鍵字: PCB 印刷電路板 布局

在FPGA(現(xiàn)場(chǎng)可編程門陣列)設(shè)計(jì)中,布局與布線是兩個(gè)至關(guān)重要的環(huán)節(jié),它們直接影響著FPGA的性能、功耗以及可靠性。隨著FPGA應(yīng)用領(lǐng)域的不斷拓展和復(fù)雜化,如何優(yōu)化布局與布線以提高FPGA的性能,成為了設(shè)計(jì)師們必須深入研...

關(guān)鍵字: FPGA設(shè)計(jì) 布局 布線

最近一則熱帖在網(wǎng)上引起了熱議,起因是一位網(wǎng)友向高學(xué)歷人才發(fā)出了建議:回到小縣城發(fā)展!原因如下:憑借高學(xué)歷,能享受縣城各方面福利,對(duì)象好找,房子不貴,可以過得很舒適。但在大城市就是干電池,996,房奴,連個(gè)對(duì)象都沒有,跟以...

關(guān)鍵字: 高學(xué)歷 機(jī)會(huì) 對(duì)象

前些日子,一家名為能斯達(dá)的企業(yè)獲得小米長(zhǎng)江產(chǎn)業(yè)基金1000萬投資。此外在今年三月,該企業(yè)還獲得易方新達(dá)創(chuàng)業(yè)投資、共青城國謙成長(zhǎng)一號(hào)股權(quán)投資。據(jù)悉,該公司致力于柔性傳感技術(shù)的研發(fā)和產(chǎn)業(yè)化,在消費(fèi)電子、健康醫(yī)療、IOT等領(lǐng)域...

關(guān)鍵字: 能斯達(dá) 投資 布局

先直接拋出中心思想:俄羅斯做了初一(四州公投入俄+核威懾),就不要怪別國做十五(北溪管道炸洞)。不過,戰(zhàn)爭(zhēng)結(jié)局卻清晰了:俄羅斯會(huì)占一些土地,卻會(huì)失去歐洲,俄羅斯未來大概就是一個(gè)偽裝成國家的大號(hào)加油站了。對(duì)于中國而言,以前...

關(guān)鍵字: 俄烏戰(zhàn)爭(zhēng) 高能耗產(chǎn)業(yè) 布局

在這篇文章中,小編將為大家?guī)砉た刂靼宓南嚓P(guān)報(bào)道。如果你對(duì)本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 工控主板 布局 主板

對(duì)象類 一個(gè)類定義了一組對(duì)象。類具有行為(be-havoir),它描述一個(gè)對(duì)象能夠做什么以及做的方法(method),它們是可以對(duì)這個(gè)對(duì)象進(jìn)行操作的程序和過程。

關(guān)鍵字: 對(duì)象 行為

在生活中,你可能接觸過各種各樣的電子產(chǎn)品,那么你可能并不知道它的一些組成部分,比如它可能含有的開關(guān)電源,那么接下來讓小編帶領(lǐng)大家一起學(xué)習(xí)開關(guān)電源布局以及印制板布線的一些原則。

關(guān)鍵字: 開關(guān)電源 布局 印制板布線

分析好整個(gè)電路原理以后,就可以開始對(duì)整個(gè)電路進(jìn)行布局布線,下面,給大家介紹一下布局的思路和原則。

關(guān)鍵字: PCB 布局 原則

一般PCB基本設(shè)計(jì)流程如下:前期準(zhǔn)備→PCB結(jié)構(gòu)設(shè)計(jì)→導(dǎo)網(wǎng)表→規(guī)則設(shè)置→PCB布局→布線→布線優(yōu)化和絲印→網(wǎng)絡(luò)和DRC檢查和結(jié)構(gòu)檢查→輸出光繪→光繪審查→PCB制板生產(chǎn)/打樣資料→PCB板廠工程EQ確認(rèn)→貼片資料輸出→項(xiàng)...

關(guān)鍵字: PCB 布局 設(shè)計(jì)流程
關(guān)閉
關(guān)閉