寄存器
內(nèi)部部件之間由總線連接
其中寄存器的作用就是進(jìn)行數(shù)據(jù)的臨時(shí)存儲烹卒。
CPU的運(yùn)算速度是非常快的盾计,為了性能CPU在內(nèi)部開辟一小塊臨時(shí)存儲區(qū)域搞糕,并在進(jìn)行運(yùn)算時(shí)先將數(shù)據(jù)從內(nèi)存復(fù)制到這一小塊臨時(shí)存儲區(qū)域中,運(yùn)算時(shí)就在這一小快臨時(shí)存儲區(qū)域內(nèi)進(jìn)行蜂科。我們稱這一小塊臨時(shí)存儲區(qū)域?yàn)榧拇嫫鳌?/p>
- 對程序員來說顽决,CPU中最主要部件是寄存器,可以通過改變寄存器的內(nèi)容來實(shí)現(xiàn)對CPU的控制
- 不同的CPU导匣,寄存器的個(gè)數(shù)才菠、結(jié)構(gòu)是不相同的
高速緩存
iPhoneX上搭載的ARM處理器A11它的1級緩存的容量是64KB,2級緩存的容量8M.
CPU每執(zhí)行一條指令前都需要從內(nèi)存中將指令讀取到CPU內(nèi)并執(zhí)行贡定。而寄存器的運(yùn)行速度相比內(nèi)存讀寫要快很多,為了性能,CPU還集成了一個(gè)高速緩存存儲區(qū)域.當(dāng)程序在運(yùn)行時(shí)赋访,先將要執(zhí)行的指令代碼以及數(shù)據(jù)復(fù)制到高速緩存中去(由操作系統(tǒng)完成).CPU直接從高速緩存依次讀取指令來執(zhí)行.
通用寄存器
- ARM64擁有有31個(gè)64位的通用寄存器 x0 到 x30,這些寄存器通常用來存放一般性的數(shù)據(jù),稱為通用寄存器(有時(shí)也有特定用途)
- 那么w0 到 w28 這些是32位的. 因?yàn)?4位CPU可以兼容32位.所以可以只使用64位寄存器的低32位.
-
比如 w0 就是 x0的低32位!
arm64寄存器
寄存器 | 描述 |
---|---|
X0-X30 | 通用寄存器缓待,如果有需要可以當(dāng)做32bit使用:WO-W30 |
FP(x29) | 保存棧幀地址(棧底指針) |
LR (X30) | 通常稱X30為程序鏈接寄存器蚓耽,保存跳轉(zhuǎn)返回信息地址 |
SP | 保存棧指針 |
PC | 程序計(jì)數(shù)器,俗稱PC指針命斧,總是指向即將要執(zhí)行的下一條指令 |
X0-X7: 用于子程序調(diào)用時(shí)的參數(shù)傳遞田晚,X0還用于返回值傳遞
wz r:零寄存器, 就是0值
cpsr:狀態(tài)寄存器
- 通常国葬,CPU會先將內(nèi)存中的數(shù)據(jù)存儲到通用寄存器中贤徒,然后再對通用寄存器中的數(shù)據(jù)進(jìn)行運(yùn)算
pc寄存器(program counter)
- 為指令指針寄存器,它指示了CPU當(dāng)前要讀取指令的地址
- 在內(nèi)存或者磁盤上汇四,指令和數(shù)據(jù)沒有任何區(qū)別接奈,都是二進(jìn)制信息
- CPU在工作的時(shí)候把有的信息看做指令,有的信息看做數(shù)據(jù)通孽,為同樣的信息賦予了不同的意義
- 比如 1110 0000 0000 0011 0000 1000 1010 1010
- 可以當(dāng)做數(shù)據(jù) 0xE003008AA
- 也可以當(dāng)做指令 mov x0, x8
- CPU根據(jù)什么將內(nèi)存中的信息看做指令序宦?
- CPU將pc指向的內(nèi)存單元的內(nèi)容看做指令
- 如果內(nèi)存中的某段內(nèi)容曾被CPU執(zhí)行過,那么它所在的內(nèi)存單元必然被pc指向過
浮點(diǎn)和向量寄存器
因?yàn)楦↑c(diǎn)數(shù)的存儲以及其運(yùn)算的特殊性,CPU中專門提供浮點(diǎn)數(shù)寄存器來處理浮點(diǎn)數(shù)
- 浮點(diǎn)寄存器 64位: D0 - D31 32位: S0 - S31
- fpsr寄存器:浮點(diǎn)狀態(tài)寄存器
- fpcr寄存器:浮點(diǎn)控制寄存器
現(xiàn)在的CPU支持向量運(yùn)算.(向量運(yùn)算在圖形處理相關(guān)的領(lǐng)域用得非常的多)為了支持向量計(jì)算系統(tǒng)了也提供了眾多的向量寄存器.
- 向量寄存器 128位:V0-V31
異常狀態(tài)寄存器
ni: 單步執(zhí)行機(jī)器指令
s:進(jìn)入機(jī)器指令
register read: 讀出所有寄存器
register read pc: 讀出寄存器pc的值
register read pc 0x1000000: 修改寄存器pc的值為0x1000000