思考 ARM LR暫存器的思考

2021-10-25 02:43:20 字數 871 閱讀 3559

在armv7上,我們知道sp是r13,lr是r14, pc是r15;

到了armv8上,lr是x30,sp和pc不再是單獨的通用的暫存器. 這樣設計的原因是啥?

1、為什麼sp和pc不能map到通用暫存器上?

pc這麼做的原因,應該是防止使用者隨意更高pc指標,分離出來之後,不能使用mov pc,#temp 來修改pc了

2、lr為什麼依然map到通用暫存器上呢

lr是鏈結返回暫存器,它有它的特殊性, 我們可以看到在此架構下c語言翻譯成的彙編函式:

基本是在函式的開頭,都有類似stp x29, x30, [sp,#-48]的語句,目的就是儲存x29和x30,而x30恰好就是lr

0000000000203e94

:203e94

: a9bd7bfd stp x29, x30,

[sp,#-48]

!// 這裡儲存lr

203e98

:910003fd mov x29, sp

203e9c: a9025bf5 stp x21, x22,

[sp,#32

]203ea0:

2a0103f5 mov w21, w1..

...// 這裡可能會跳轉到別的函式中去,lr的值將會改變

204074

: a8c37bfd ldp x29, x30,

[sp]

,#48

//在此函式返回之前,恢復之前儲存的lr的值

204078

: d65f03c0 ret

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

STM32庫函式和暫存器操作的思考

從開始接觸51微控制器,到現在開始轉型學習功能更加強大的stm32f407系列,學習過程中引入了庫函式及相應操作,當時趕著進度做點東西出來,有點不求甚解。現在返回來求索 相比於原來51微控制器的暫存器,32系列的暫存器無論是個數還是實現功能時多個暫存器之間的呼叫配合,使用難度都高了不少,所以有了庫函...