日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

[architecture]-ARMv8/armv7/linux的栈/sp的学习和总结

發(fā)布時(shí)間:2025/3/21 linux 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [architecture]-ARMv8/armv7/linux的栈/sp的学习和总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

快速鏈接:
.
👉👉👉 個(gè)人博客筆記導(dǎo)讀目錄(全部) 👈👈👈

文章目錄

        • 1、ARMV8 ARMV7的SP寄存器的介紹
          • (1)、ARMV7-aarch32的SP寄存器
          • (2)、ARMV8-aarch32的SP寄存器
          • (3)、ARMV8-aarch64的SP寄存器
        • 2、ARMV8 ARMV7的SP寄存器的使用舉例
          • (1)、aarch32狀態(tài)下讀寫SP的示例
          • (2)、aarch64狀態(tài)下讀寫SP的示例

1、ARMV8 ARMV7的SP寄存器的介紹

(1)、ARMV7-aarch32的SP寄存器

在ARMV8-aarch32的狀態(tài)下,有以下SP寄存器

  • sp
  • sp_usr
  • sp_svc
  • sp_abt
  • sp_und
  • sp_irq
  • sp_fiq
  • sp_mon
  • sp_hyp

注意:在armv7上,arm有七種模式:user、system、supervisor、abort、undefined、irq、fiq, 再加兩個(gè)擴(kuò)展模式:hyp、monitor

(2)、ARMV8-aarch32的SP寄存器

ASRMV8為了與armv7兼容,在ARMV8-aarch32的狀態(tài)下,SP寄存器同armv7的一致

  • sp
  • sp_usr
  • sp_svc
  • sp_abt
  • sp_und
  • sp_irq
  • sp_fiq
  • sp_mon
  • sp_hyp

其實(shí)armv8的aarch32的這些寄存器,map到了Xx通用寄存器上:

(3)、ARMV8-aarch64的SP寄存器

在ARMV8-aarch64的狀態(tài)下,有以下SP寄存器

  • SP_EL0 //當(dāng)PSTATE.SP=0(SPSel.SP == 0),高的級別訪問的sp就是sp_el0
  • SP_EL1 //在EL1級別下使用
  • SP_EL2 //在EL2級別下使用
  • SP_EL3 //在EL3級別下使用

2、ARMV8 ARMV7的SP寄存器的使用舉例

(1)、aarch32狀態(tài)下讀寫SP的示例
(1) FUNC thread_set_abt_sp , : UNWIND( .fnstart) UNWIND( .cantunwind)mrs r1, cpsrcps #CPSR_MODE_ABT //-------------切換到abt模式mov sp, r0 //-------------此時(shí)操作的sp就是sp_abtmsr cpsr, r1bx lr UNWIND( .fnend) END_FUNC thread_set_abt_sp(2) FUNC thread_set_und_sp , : UNWIND( .fnstart) UNWIND( .cantunwind)mrs r1, cpsrcps #CPSR_MODE_UND //-------------切換到und模式mov sp, r0 //-------------此時(shí)操作的sp就是sp_abtmsr cpsr, r1bx lr UNWIND( .fnend) END_FUNC thread_set_und_sp(3) FUNC thread_set_irq_sp , : UNWIND( .fnstart) UNWIND( .cantunwind)mrs r1, cpsrcps #CPSR_MODE_IRQ //-------------切換到irq模式mov sp, r0 //-------------此時(shí)操作的sp就是sp_abtmsr cpsr, r1bx lr UNWIND( .fnend) END_FUNC thread_set_irq_sp(4) FUNC thread_set_fiq_sp , : UNWIND( .fnstart) UNWIND( .cantunwind)mrs r1, cpsrcps #CPSR_MODE_FIQ //-------------切換到fiq模式mov sp, r0 //-------------此時(shí)操作的sp就是sp_abtmsr cpsr, r1bx lr UNWIND( .fnend) END_FUNC thread_set_fiq_sp......
(2)、aarch64狀態(tài)下讀寫SP的示例
/* The handler of native interrupt. */ .macro native_intr_handler mode:req ....... // 進(jìn)入中斷異常后,默認(rèn)的SP就是SP_EL1msr spsel, #0 // 在這里,將SP切換成SP_EL0mov sp, x1 .......adr x16, thread_nintr_handler_ptr // 真正的中斷處理函數(shù),使用的是SP_EL0 ......./* Switch back to SP_EL1 */msr spsel, #1 // 退出中斷之前,再將SP切換成SP_EL1/* Update core local flags */ldr w0, [sp, #THREAD_CORE_LOCAL_FLAGS]lsr w0, w0, #THREAD_CLF_SAVED_SHIFTstr w0, [sp, #THREAD_CORE_LOCAL_FLAGS] .......eret 1: b eret_to_el0 .endm

總結(jié)

以上是生活随笔為你收集整理的[architecture]-ARMv8/armv7/linux的栈/sp的学习和总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。