1. 簡(jiǎn)書(shū)-ARM寄存器講解
2. ARM寄存器解析
3. ARM64匯編-寄存器和指令
4. 堆椥倘唬基礎(chǔ)-windows
5.堆椓泵螅基礎(chǔ)-linux篇-32位
1. 關(guān)于寄存器的說(shuō)明
- R0-R3:用作傳入函數(shù)參數(shù)拟赊,傳出函數(shù)的返回值济锄。在子程序調(diào)用之前顾复,可以將r0-r3用于任何用途贡耽,被調(diào)用函數(shù)在返回之前不必恢復(fù)r0-r3.如果調(diào)用函數(shù)需要再次使用這幾個(gè)寄存器的內(nèi)容侄刽,則必須保留這些內(nèi)容指黎。
- R4-R11:被用來(lái)存放函數(shù)的局部變量。如果被調(diào)用函數(shù)使用了這些寄存器州丹,在返回之前必須恢復(fù)這些寄存器的值
- R12: 是內(nèi)部調(diào)用暫時(shí)寄存器ip醋安。它在過(guò)程鏈接膠合代碼中用于此角色∧苟荆可以將其用于任何用途吓揪。被調(diào)用函數(shù)在返回之前不必恢復(fù)r12.
- R13: 是棧指針SP,指向棧頂所计。.它不能用于任何其它用途柠辞。sp中存放的值在退出被調(diào)用函數(shù)時(shí)必須與進(jìn)入時(shí)值相同。
- R14: 是鏈接寄存器LR主胧。如果保存了返回地址叭首,則可以在調(diào)用之間將r14用于其它用途,程序返回時(shí)要恢復(fù)讥裤。
- R15: 是程序計(jì)數(shù)器PC放棒。用于執(zhí)行可執(zhí)行文件中的指令地址。
2. PC寄存器
- 為指令指針寄存器己英,它指示了CPU當(dāng)前要讀取指令的地址
- 在內(nèi)存或者磁盤(pán)上间螟,指令和數(shù)據(jù)沒(méi)有任何區(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)容被CPU執(zhí)行過(guò),那么它所在的內(nèi)存單元必然被PC指向過(guò)摩泪。
3. SP笆焰、fp、LR寄存器
- sp寄存器時(shí)刻保存我們的棧頂?shù)牡刂?/li>
- fp寄存器见坑,會(huì)保存我們的棧底的地址
- LR 程序鏈接寄存器:1. 用于保存函數(shù)的返回地址嚷掠。 2. 異常處理后的返回地址,例如中斷荞驴。
4. CPSR不皆、SPSR
- CPSR當(dāng)前狀態(tài)寄存器,其中每一位的bit都有意義熊楼。用于指示正負(fù)霹娄、加減、中斷等的狀態(tài)
- SPSR 系統(tǒng)狀態(tài)寄存器鲫骗,用于異常保護(hù)的CPSR的備份犬耻,異常時(shí)保存CPSR的值。異常退出時(shí)將該值恢復(fù)到CPSR执泰,以保障程序正常運(yùn)行枕磁。
5. 關(guān)于堆棧寄存器
- rsp、esp坦胶、sp:棧指針寄存器透典,內(nèi)存放著一個(gè)指針,永遠(yuǎn)指向系統(tǒng)棧的棧頂顿苇。(sp16位| esp32位|rsp64位)
- rbp峭咒、ebp、bp:基址指針寄存器纪岁,該指針永遠(yuǎn)指向系統(tǒng)棧上棧幀的底部凑队。
- rip、eip幔翰、ip: 指令寄存器漩氨,該指針永遠(yuǎn)指向下一條待執(zhí)行的指令地址。
- ss:寄存器存放的段地址遗增。
說(shuō)明: PC和ip其實(shí)是一回事兒叫惊。都是指令寄存器,指向當(dāng)前執(zhí)行指令的下一條指令做修。