嵌軟面試——ARM Cortex-M寄存器組

Cortex-M內存架構包含16個通用寄存器,其中R0-R12是13個32位的通用寄存器,另外三個寄存器是特殊用途,分別是R13(棧指針),R14(鏈接寄存器),R15(程序計數器)。

對于處理器來說,寄存器可以作為暫存器,存儲臨時結果,也可以作為輸入數據,方便運算,也可以作為索引,去訪問寄存器,其作用各種各樣。

其中R0-R7是低寄存器,因為16位的指令只能訪問他們,而R8-R12是高寄存器,可以被16或32位指令訪問,需要注意的的是,這些通用寄存器在復位后初始值是未定義的,所以在初始前,必須由程序顯式初始化,也可以編寫匯編代碼嵌入代碼段。

R13寄存器—— SP棧指針

它是ARM處理器中最重要的專用寄存器之一,負責管理函數調用和局部變量的內存分配。

我們通常通過PUSH和POP指令訪問棧空間,實現局部變量保存,函數返回地址等信息的管理,從物理機構看,ARM-Cortex-M系列寄存器實際上擁有兩個棧指針,主棧指針 MSP (Main Stack Pointer)和進程指針 PSP(Process Stack Pointer

  1. MSP (Main Stack Pointer,主棧指針)

    • 用于操作系統內核和異常處理

    • 所有異常模式默認使用MSP

  2. PSP (Process Stack Pointer,進程棧指針)

    • 用于用戶應用程序

    • 在用戶線程模式下使用

?R14—— LR鏈接寄存器

它用于保存函數或者子程序調用返回的地址

在函數或子程序被調用時,調用指令下一條指令的地址被保存到LR寄存器中,這樣,當函數或子程序結束時,處理器可以通過LR寄存器中的值返回到正確的地址繼續執行。

如果函數中調用了函數呢?A函數調用了B函數,B函數還調用了C函數,這時候LR的值會被覆蓋,從而無法再恢復到A函數中繼續運行,所以需要將LR的數值保存到棧中,包括異常處理也是由LR寄存器負責異常處理時的地址返回

為什么不能依賴 LR 本身?

  • LR 只有一個,但函數調用可以?無限嵌套,必須用棧存儲?調用鏈

  • 異常/中斷可能在任何時候發生,必須保證 LR 不被意外覆蓋。

  • 遞歸函數?必須保存 LR,否則無法正確返回。

?R15——PC程序計數器

該寄存器的值永遠是下一個執行指令的地址,在ARM架構中,CPU的執行指令包括 取指(Fetch)、譯碼(Decode)和執行(Execute)三個階段,PC在其中承擔關鍵作用,它決定了從哪里取指,控制程序的順序流轉,異常處理和函數跳轉都和PC指針息息相關,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90982.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90982.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

7.DRF 過濾、排序、分頁

過濾Filtering 對于列表數據可能需要根據字段進行過濾,我們可以通過添加django-fitlter擴展來增強支持。 pip install django-filter在配置文件中增加過濾器類的全局設置: """drf配置信息必須全部寫在REST_FRAMEWORK配置項中""…

二、CUDA、Pytorch與依賴的工具包

CUDA Compute Unified Device Architecture(統一計算架構)。專門用于 GPU 通用計算 的平臺 編程接口。CUDA可以使你的程序(比如矩陣、神經網絡)由 GPU 執行,這比CPU能快幾十甚至上百倍。 PyTorch 是一個深度學習框架…

SpringCloude快速入門

近期簡單了解一下SpringCloude微服務,本文主要就是我學習中所記錄的筆記,然后具體原理可能等以后再來深究,本文可能有些地方用詞不專業還望包容一下,感興趣可以參考官方文檔來深入學習一下微服務,然后我的下一步學習就是docker和linux了。 nacos: Nacos 快速開始 | Nacos 官網…

GPT Agent與Comet AI Aent瀏覽器對比橫評

1. 架構設計差異GPT Agent的雙瀏覽器架構:文本瀏覽器:專門用于高效處理大量文本內容,適合深度信息檢索和文獻追蹤,相當于Deep Research的延續可視化瀏覽器:具備界面識別與交互能力,可以點擊網頁按鈕、識別圖…

應用信息更新至1.18.0

增加DO權限 增加權限管理(需DO支持) 增加應用凍結隱藏(需DO支持) 增加權限委托(需DO支持) 增加特殊組件 ...

常用git命令集錦

git init 初始化 將當前目錄初始化為 git 本地倉庫,此時會在本地創建一個 .git 的文件夾 git init -q 靜默執行,就是在后臺執行 git init --bare –bare 參數,一般用來初始化一個空的目錄,作為遠程存儲倉庫 git init --template dir –templa…

skywalking安裝

一、簡介 SkyWalking是一款用于分布式系統跟蹤和性能監控的開源工具。它可以幫助開發人員了解分布式系統中不同組件之間的調用關系和性能指標,從而進行故障排查和性能優化。 它支持多種語言和框架,包括Java、.NET、Node.js等。它通過在應用程序中插入代…

利用DataStream和TrafficPeak實現大數據可觀察性

可觀察性工作流對于深入了解應用程序的健康狀況、客戶流量和整體性能至關重要。然而,要實現真正的可觀察性還面臨一些挑戰,包括海量的流量數據、數據保留、實施時間以及各項成本等。TrafficPeak是一款為Akamai云平臺打造,簡單易用、可快速部署…

jQuery 最新語法大全詳解(2025版)

引言 jQuery 作為輕量級 JavaScript 庫,核心價值在于 簡化 DOM 操作、跨瀏覽器兼容性和高效開發。盡管現代框架崛起,jQuery 仍在遺留系統維護、快速原型開發中廣泛應用。本文涵蓋 jQuery 3.6 核心語法,重點解析高效用法與最佳實踐。 一、jQu…

Android 15 修改截圖默認音量大小

概述 在 Android 15 中,截圖音效的默認音量可能過大,影響用戶體驗。本文將介紹如何通過修改系統源碼來調整截圖音效的默認音量大小。 修改位置 需要修改的文件路徑: frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotSoundProvider.kt…

Python爬蟲實戰:快速采集教育政策數據(附官網工具庫API)

解鎖教育政策研究的數據金礦,用技術提升學術效率 在教育政策研究領域,獲取最新、最全面的政策文本是學術工作的基礎。傳統手動收集方式效率低下且容易遺漏關鍵政策,而Python爬蟲技術為教育研究者提供了高效的數據采集解決方案。本文將系統介…

驗證回文串-leetcode

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后,短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串 。 字母和數字都屬于字母數字字符。 給你一個字符串 s,如果它是 回文串 ,返回 true ;否則&#xf…

嵌入式學習日志(十)

10 學習指針1 指針核心定義與本質1.1 指針與指針變量1、指針即地址,指針變量是存放地址的變量,其大小與操作系統位數相關:64 位系統中占 8 字節,32 位系統中占 4 字節。2、指針的核心功能是通過地址間接訪問目標變量&#xff0…

Anaconda創建環境報錯:CondaHTTPEFTOT: HTTP 403 FORBIDDEN for url

一、快速解決方案這類報錯的原因通常是由于 conda 無法訪問鏡像源或權限被服務器拒絕,以下是常見原因和對應的解決方案:檢查鏡像源拼寫是否正確conda config --show channels清華源鏡像示例如果不正確,先清除舊配置del %USERPROFILE%\.condar…

亞馬遜地址關聯暴雷:新算法下的賬號安全保衛戰

2025年Q3,上千個店鋪因共享稅代地址、海外倉信息重疊等問題被批量凍結,為行業敲響了“精細化合規”的警鐘。事件復盤:地址成為關聯風控的“致命開關”稅代機構違規引發“多米諾效應”事件的導火索指向稅代機構“saqibil”,其為降低…

在本地環境中運行 ‘dom-distiller‘ GitHub 庫的完整指南

在本地環境中運行 ‘dom-distiller’ GitHub 庫的完整指南 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家,覺得好請收藏。點擊跳轉到網站。 1. 項目概述 ‘dom-distiller’ 是一個用于將網頁…

11. isaacsim4.2教程-Transform 樹與Odometry

1. 前言學習目標在本示例中,你將學習如何:使用 TF 發布器將相機作為 TF 樹的一部分發布在 TF 上發布機械臂/可動結構(articulation)的樹狀結構發布里程計(Odometry)消息開始之前前置條件已完成 …

安寶特新聞丨安寶特與Logivations正式建立合作伙伴關系,共筑物流新未來

近日,安寶特與物流創新企業Logivations簽署合作協議,雙方將深度融合技術專長,共同為客戶提供高效、精準的智能物流解決方案,助力企業實現從人工巡檢到智能管控的跨越式升級。 關于Logivations Logivations是一家深耕物流與供應鏈…

第三階段—8天Python從入門到精通【itheima】-139節(pysqark實戰-前言介紹)

目錄 139節——pysqark實戰-前言介紹 1.學習目標 2.spark是什么 3.如下是詳細介紹 PySpark 的兩種使用方式,并提供具體的代碼示例【大數據應用開發比賽的代碼熟悉如潮水一般沖刷我的記憶】: 一、本地模式(作為 Python 第三方庫使用&#…

redis數據庫的四種取得 shell方法

Redis作為高性能內存數據庫,若配置不當(特別是未授權訪問),將面臨極高安全風險。攻擊者可利用漏洞實現遠程代碼執行(GetShell),嚴重威脅數據安全與服務器控制權。本文深入剖析此類漏洞的核心原理…