二、函數(shù)本質(zhì)

關(guān)于CPU

寄存器

CPU除了有控制器歹苦、運(yùn)算器還有寄存器。其中寄存器的作用就是進(jìn)行數(shù)據(jù)的臨時(shí)存儲(chǔ)督怜。

CPU的運(yùn)算速度是非撑故荩快的,為了性能CPU在內(nèi)部開(kāi)辟一小塊臨時(shí)存儲(chǔ)區(qū)域号杠,并在進(jìn)行運(yùn)算時(shí)先將數(shù)據(jù)從內(nèi)存復(fù)制到這一小塊臨時(shí)存儲(chǔ)區(qū)域中蚪腋,運(yùn)算時(shí)就在這一小快臨時(shí)存儲(chǔ)區(qū)域內(nèi)進(jìn)行。我們稱(chēng)這一小塊臨時(shí)存儲(chǔ)區(qū)域?yàn)榧拇嫫鳌?/p>

對(duì)于arm64系的CPU來(lái)說(shuō)姨蟋, 如果寄存器以x開(kāi)頭則表明的是一個(gè)64位的寄存器屉凯,如果以w開(kāi)頭則表明是一個(gè)32位的寄存器,在系統(tǒng)中沒(méi)有提供16位和8位的寄存器供訪(fǎng)問(wèn)和使用眼溶。其中32位的寄存器是64位寄存器的低32位部分并不是獨(dú)立存在的悠砚。

高速緩存

iPhoneX上搭載的ARM處理器A11它的1級(jí)緩存的容量是64KB,2級(jí)緩存的容量8M.

CPU每執(zhí)行一條指令前都需要從內(nèi)存中將指令讀取到CPU內(nèi)并執(zhí)行堂飞。而寄存器的運(yùn)行速度相比內(nèi)存讀寫(xiě)要快很多,為了性能,CPU還集成了一個(gè)高速緩存存儲(chǔ)區(qū)域.當(dāng)程序在運(yùn)行時(shí)灌旧,先將要執(zhí)行的指令代碼以及數(shù)據(jù)復(fù)制到高速緩存中去(由操作系統(tǒng)完成).CPU直接從高速緩存依次讀取指令來(lái)執(zhí)行.

寄存器的補(bǔ)充

數(shù)據(jù)地址寄存器

數(shù)據(jù)地址寄存器通常用來(lái)做數(shù)據(jù)計(jì)算的臨時(shí)存儲(chǔ)、做累加绰筛、計(jì)數(shù)枢泰、地址保存等功能。定義這些寄存器的作用主要是用于在CPU指令中保存操作數(shù)铝噩,在CPU中當(dāng)做一些常規(guī)變量來(lái)使用衡蚂。
ARM64中

  • 64位: X0-X30, XZR(零寄存器)
  • 32位: W0-W30, WZR(零寄存器)

注意:
之前8086匯編中有一種特殊的寄存器段寄存器:CS,DS,SS,ES四個(gè)寄存器來(lái)保存這些段的基地址,這個(gè)屬于Intel架構(gòu)CPU中.在ARM中并沒(méi)有

浮點(diǎn)和向量寄存器

因?yàn)楦↑c(diǎn)數(shù)的存儲(chǔ)以及其運(yùn)算的特殊性,CPU中專(zhuān)門(mén)提供浮點(diǎn)數(shù)寄存器來(lái)處理浮點(diǎn)數(shù)

  • 浮點(diǎn)寄存器 64位: D0 - D31 32位: S0 - S31

現(xiàn)在的CPU支持向量運(yùn)算.(向量運(yùn)算在圖形處理相關(guān)的領(lǐng)域用得非常的多)為了支持向量計(jì)算系統(tǒng)了也提供了眾多的向量寄存器.

  • 向量寄存器 128位:V0-V31

  • 棧:是一種具有特殊的訪(fǎng)問(wèn)方式的存儲(chǔ)空間(后進(jìn)先出, Last In Out Firt骏庸,LIFO)


    15193998892055.jpg

SP和FP寄存器

  • sp寄存器在任意時(shí)刻會(huì)保存我們棧頂?shù)牡刂?
  • fp寄存器也稱(chēng)為x29寄存器屬于通用寄存器,但是在某些時(shí)刻我們利用它保存棧底的地址!()

注意:ARM64開(kāi)始,取消32位的 LDM,STM,PUSH,POP指令! 取而代之的是ldr\ldp str\stp
ARM64里面 對(duì)棧的操作是16字節(jié)對(duì)齊的!!

關(guān)于內(nèi)存讀寫(xiě)指令

注意:讀/寫(xiě) 數(shù)據(jù)是都是往高地址讀/寫(xiě)

str(store register)指令

將數(shù)據(jù)從寄存器中讀出來(lái),存到內(nèi)存中.

ldr(load register)指令

將數(shù)據(jù)從內(nèi)存中讀出來(lái),存到寄存器中

此ldr 和 str 的變種ldp 和 stp 還可以操作2個(gè)寄存器.

堆棧操作練習(xí)

使用32個(gè)字節(jié)空間作為這段程序的椕祝空間,然后利用棧將x0和x1的值進(jìn)行交換.

sub    sp, sp, #0x20    ;拉伸棧空間32個(gè)字節(jié)
stp    x0, x1, [sp, #0x10] ;sp往上加16個(gè)字節(jié),存放x0 和 x1
ldp    x1, x0, [sp, #0x10] ;將sp偏移16個(gè)字節(jié)的值取出來(lái),放入x1 和 x0

bl和ret指令

bl標(biāo)號(hào)

  • 將下一條指令的地址放入lr(x30)寄存器
  • 轉(zhuǎn)到標(biāo)號(hào)處執(zhí)行指令

ret

  • 默認(rèn)使用lr(x30)寄存器的值,通過(guò)底層指令提示CPU此處作為下條指令地址!

ARM64平臺(tái)的特色指令,它面向硬件做了優(yōu)化處理的

x30寄存器

x30寄存器存放的是函數(shù)的返回地址.當(dāng)ret指令執(zhí)行時(shí)刻,會(huì)尋找x30寄存器保存的地址值!

注意:在函數(shù)嵌套調(diào)用的時(shí)候.需要講x30入棧!

函數(shù)的參數(shù)和返回值

ARM64下,函數(shù)的參數(shù)是存放在X0到X7(W0到W7)這8個(gè)寄存器里面的.如果超過(guò)8個(gè)參數(shù),就會(huì)入棧.
函數(shù)的返回值是放在X0 寄存器里面的.

函數(shù)的局部變量

函數(shù)的局部變量放在棧里面!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末具被,一起剝皮案震驚了整個(gè)濱河市丽啡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硬猫,老刑警劉巖补箍,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件改执,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坑雅,警方通過(guò)查閱死者的電腦和手機(jī)辈挂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)裹粤,“玉大人终蒂,你說(shuō)我怎么就攤上這事∫K撸” “怎么了拇泣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)矮锈。 經(jīng)常有香客問(wèn)我霉翔,道長(zhǎng),這世上最難降的妖魔是什么苞笨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任债朵,我火速辦了婚禮,結(jié)果婚禮上瀑凝,老公的妹妹穿的比我還像新娘序芦。我一直安慰自己,他們只是感情好粤咪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布谚中。 她就那樣靜靜地躺著,像睡著了一般寥枝。 火紅的嫁衣襯著肌膚如雪藏杖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天脉顿,我揣著相機(jī)與錄音蝌麸,去河邊找鬼。 笑死艾疟,一個(gè)胖子當(dāng)著我的面吹牛来吩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔽莱,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弟疆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盗冷?” 一聲冷哼從身側(cè)響起怠苔,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仪糖,沒(méi)想到半個(gè)月后柑司,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體迫肖,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年攒驰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟆湖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玻粪,死狀恐怖隅津,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劲室,我是刑警寧澤伦仍,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站很洋,受9級(jí)特大地震影響充蓝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蹲缠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悠垛。 院中可真熱鬧线定,春花似錦、人聲如沸确买。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)湾趾。三九已至芭商,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搀缠,已是汗流浹背铛楣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺普,地道東北人簸州。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像歧譬,于是被迫代替她去往敵國(guó)和親岸浑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 002--函數(shù)本質(zhì) 關(guān)于CPU的補(bǔ)充 寄存器 CPU除了有控制器瑰步、運(yùn)算器還有寄存器矢洲。其中寄存器的作用就是進(jìn)行數(shù)據(jù)的...
    小Ping平閱讀 192評(píng)論 0 1
  • 概念 一、寄存器 1.數(shù)據(jù)地址寄存器 通常用來(lái)做數(shù)據(jù)計(jì)算的臨時(shí)存儲(chǔ)缩焦、累加读虏、計(jì)數(shù)责静、地址保存等功能。定義這些寄存器的作...
    33ty33閱讀 320評(píng)論 0 0
  • 組件 計(jì)算機(jī)是一種數(shù)據(jù)處理設(shè)備掘譬,它由CPU和內(nèi)存以及外部設(shè)備組成泰演。CPU負(fù)責(zé)數(shù)據(jù)處理,內(nèi)存負(fù)責(zé)存儲(chǔ)葱轩,外部設(shè)備負(fù)責(zé)數(shù)...
    哆啦灬少A夢(mèng)閱讀 1,569評(píng)論 1 2
  • 一彈指六十剎那睦焕,一剎那九百生滅。 --《仁王經(jīng)》 組件 計(jì)算機(jī)是一種數(shù)據(jù)處理設(shè)備靴拱,它由CPU和內(nèi)存以及外部設(shè)備組成...
    歐陽(yáng)大哥2013閱讀 21,248評(píng)論 15 147
  • 8086匯編 本筆記是筆者觀看小甲魚(yú)老師(魚(yú)C論壇)《零基礎(chǔ)入門(mén)學(xué)習(xí)匯編語(yǔ)言》系列視頻的筆記陌知,在此感謝他和像他一樣...
    Gibbs基閱讀 37,115評(píng)論 8 114