国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[ARM 匯編]進階篇—異常處理與中斷—2.4.2 ARM處理器的異常向量表

這篇具有很好參考價值的文章主要介紹了[ARM 匯編]進階篇—異常處理與中斷—2.4.2 ARM處理器的異常向量表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

異常向量表簡介

在ARM架構中,異常向量表是一組固定位置的內(nèi)存地址,它們包含了處理器在遇到異常時需要跳轉到的處理程序的入口地址。每個異常類型都有一個對應的向量地址。當異常發(fā)生時,處理器會自動跳轉到對應的向量地址,并開始執(zhí)行異常處理程序。

異常向量表的位置

ARM處理器的異常向量表位于內(nèi)存的低地址空間。具體地址如下:

異常類型 向量地址
復位(Reset) 0x00000000
未定義指令(Undefined Instruction) 0x00000004
軟件中斷(SWI) 0x00000008
預取指令異常(Prefetch Abort) 0x0000000C
數(shù)據(jù)異常(Data Abort) 0x00000010
保留(Reserved) 0x00000014
外部中斷(IRQ) 0x00000018
快速外部中斷(FIQ) 0x0000001C

異常向量表的初始化

在ARM匯編開發(fā)中,我們需要在程序開始時初始化異常向量表。初始化過程包括將每個向量地址設置為對應的異常處理程序的入口地址。這通常通過將異常處理程序的地址存儲在向量表中的相應位置來完成。

以下是一個初始化異常向量表的示例代碼:

AREA Vectors, CODE, READONLY
    ; 復位向量
    LDR PC, Reset_Addr
    ; 未定義指令向量
    LDR PC, Undefined_Addr
    ; 軟件中斷向量
    LDR PC, SWI_Addr
    ; 預取指令異常向量
    LDR PC, Prefetch_Abort_Addr
    ; 數(shù)據(jù)異常向量
    LDR PC, Data_Abort_Addr
    ; 保留向量
    NOP
    ; 外部中斷向量
    LDR PC, IRQ_Addr
    ; 快速外部中斷向量
    LDR PC, FIQ_Addr

    ; 異常處理程序地址
    Reset_Addr          DCD _start
    Undefined_Addr      DCD Undefined_Handler
    SWI_Addr            DCD SWI_Handler
    Prefetch_Abort_Addr DCD Prefetch_Abort_Handler
    Data_Abort_Addr     DCD Data_Abort_Handler
    IRQ_Addr            DCD IRQ_Handler
    FIQ_Addr            DCD FIQ_Handler

在這個示例中,我們首先使用AREA指令定義一個名為Vectors的代碼段。接下來,我們將每個異常向量設置為對應的處理程序地址。例如,對于軟件中斷(SWI),我們將其向量地址設置為SWI_Handler

在向量表的末尾,我們使用DCD指令定義每個異常處理程序的入口地址。這些地址將在處理器遇到異常時被加載到程序計數(shù)器(PC)寄存器,從而實現(xiàn)異常處理的跳轉。

示例代碼

以下是一個簡單的示例代碼,演示了如何使用異常向量表處理軟件中斷(SWI):

; 初始化異常向量表
    AREA Vectors, CODE, READONLY
    LDR PC, Reset_Addr
    LDR PC, Undefined_Addr
    LDR PC, SWI_Addr
    LDR PC, Prefetch_Abort_Addr
    LDR PC, Data_Abort_Addr
    NOP
    LDR PC, IRQ_Addr
    LDR PC, FIQ_Addr

    Reset_Addr          DCD _start
    Undefined_Addr      DCD Undefined_Handler
    SWI_Addr            DCD SWI_Handler
    Prefetch_Abort_Addr DCD Prefetch_Abort_Handler
    Data_Abort_Addr```assembly
DCD Data_Abort_Handler
IRQ_Addr            DCD IRQ_Handler
FIQ_Addr            DCD FIQ_Handler

; 主程序
AREA Main, CODE, READONLY
_start
    ; 觸發(fā)軟件中斷
    SWI 0

; 異常處理程序
AREA Handlers, CODE, READONLY
Undefined_Handler
    B Undefined_Handler

SWI_Handler
    ; 在此處編寫軟件中斷處理程序
    ; ...
    ; 返回到主程序
    MOV PC, LR

Prefetch_Abort_Handler
    B Prefetch_Abort_Handler

Data_Abort_Handler
    B Data_Abort_Handler

IRQ_Handler
    B IRQ_Handler

FIQ_Handler
    B FIQ_Handler

在這個示例中,我們首先初始化異常向量表,然后在_start標簽下的主程序中觸發(fā)一個軟件中斷(SWI)。當軟件中斷發(fā)生時,處理器會自動跳轉到SWI_Handler異常處理程序。

SWI_Handler中,你可以編寫相應的處理代碼。處理完成后,使用MOV PC, LR指令返回到主程序。

需要注意的是,這個示例僅用于演示異常向量表的基本概念和用法。在實際開發(fā)中,你可能需要根據(jù)具體的硬件平臺和需求進行相應的調(diào)整和優(yōu)化。

小結

本節(jié)我們介紹了ARM處理器的異常向量表,包括其位置、初始化過程以及如何使用異常向量表處理異常。通過學習本節(jié)內(nèi)容,你應該對ARM匯編開發(fā)中的異常處理有了基本的了解。在之后的學習中,你可以更深入地探討各種異常類型以及如何編寫高效、穩(wěn)定的異常處理程序。
推薦閱讀:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

[ARM 匯編]進階篇—異常處理與中斷—2.4.2 ARM處理器的異常向量表文章來源地址http://www.zghlxwxcb.cn/news/detail-487925.html

到了這里,關于[ARM 匯編]進階篇—異常處理與中斷—2.4.2 ARM處理器的異常向量表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring MVC異常處理【單個控制異常處理器、全局異常處理器、自定義異常處理器】

    Spring MVC異常處理【單個控制異常處理器、全局異常處理器、自定義異常處理器】

    目錄 一、單個控制器異常處理 1.1 控制器方法 1.2 編寫出錯頁面 1.3 測試結果 二、全局異常處理 2.1 一個有異常的控制器類 2.2 全局異常處理器類 2.3 測試結果? 三、自定義異常處理器 3.1 自定義異常處理器 3.2 測試結果 往期專欄文章相關導讀? 1. Maven系列專欄文章 2. Mybatis系列

    2024年02月16日
    瀏覽(29)
  • MIPS指令集處理器設計(支持64條匯編指令)

    MIPS指令集處理器設計(支持64條匯編指令)

    一、題目背景和意義 二、國內(nèi)外研究現(xiàn)狀 (略) (1) .mips 基礎 指令集格式 總結 MIPS是(Microcomputer without interlocked pipeline stages)[10]的縮寫,含義是無互鎖流水級微處理器。MIPS 是最早、最成功的RISC處理器之一[11],源于Stanford 大學的John Hennessy 教授的研究成果。(Hennessy 于1984年在

    2024年02月07日
    瀏覽(25)
  • ARM--day7(cortex_M4核LED實驗流程、異常源、異常處理模式、異常向量表、異常處理流程、軟中斷編程、cortex_A7核中斷實驗)
  • ARM處理器概述

    RISC處理器和CISC處理器 首先了解一下兩種處理器名字: RISC(Reduced Instruction Set Computer): 精簡指令集 處理器 與之相對應的是: CISC(Complex Instruction Set Computer): 復雜指令集 處理器 顧名思義,RISC比CISC更加簡單,那么對于處理器來說什么能稱為簡單呢?可以聯(lián)想為生活中可

    2024年02月13日
    瀏覽(92)
  • SSM整合(三) | 異常處理器 - 項目異常的處理方案

    SSM整合(三) | 異常處理器 - 項目異常的處理方案

    異常處理器快速入門 程序開發(fā)過程中不可避免的會遇到異?,F(xiàn)象 出現(xiàn)異?,F(xiàn)象的常見位置與常見原因如下 : 框架內(nèi)部拋出的異常:因使用不規(guī)范導致 數(shù)據(jù)層拋出的異常:因外部服務器故障導致(例如:服務器訪問超時) 業(yè)務層拋出的異常:因業(yè)務邏輯書寫錯誤導致(例如

    2024年02月02日
    瀏覽(21)
  • 全局異常處理器

    前言:由于 Controller 調(diào)用 Services ,最后調(diào)用 Mapper 來操作數(shù)據(jù)庫,若 Mapper 操作數(shù)據(jù)庫出問題了,此時頁面報錯會按照調(diào)用的原路徑層層上報,最后未經(jīng)處理的異常會上報至框架,最后服務器會向前端返回一個 JSON 的報錯數(shù)據(jù),而前端接收的是對 Result 封裝過的 data 對象中的

    2024年02月11日
    瀏覽(28)
  • Spring異常處理器

    Spring異常處理器

    ?問題: ? 程序允許不免的在各層都可能會產(chǎn)生異常,我們該如何處理這些異常? 如果只是在方法里面單獨使用 try… catch… 語句去一個一個的進行捕捉處理的話,那毫無疑問是不現(xiàn)實的,因為異常數(shù)量是非常龐大的并且對于異常的出現(xiàn)種類是不可預料的,于是我們可以使用

    2024年02月13日
    瀏覽(19)
  • 除法的效率 arm處理器

    除法的效率 性能結論: 除法:545ms 乘法:93ms 差了3倍 代碼: 測試結果 : void fun(Pack1* restrict in, Pack2* restrict out) ; __restrict__ 申明該指針為唯一的訪問該內(nèi)存的指針 優(yōu)化成果: 時間優(yōu)化為原來的82% 指令優(yōu)化為74% cache miss 沒有變化 優(yōu)化對比 測試平臺 MTK arm天機 8000

    2024年02月10日
    瀏覽(85)
  • SpringMVC之異常處理器

    SpringMVC提供了一個處理控制器方法執(zhí)行過程中所出現(xiàn)的異常的接口:HandlerExceptionResolver。 HandlerExceptionResolver接口的實現(xiàn)類有:DefaultHandlerExceptionResolver(默認的)和 SimpleMappingExceptionResolver(自定義的)。 這里配置了兩個異常,出現(xiàn)其中一個異常后跳轉到error頁面。 以上就是異

    2024年02月10日
    瀏覽(24)
  • 13、SpringMVC之異常處理器

    13、SpringMVC之異常處理器

    創(chuàng)建名為spring_mvc_exception的新module,過程參考9.1節(jié)和9.5節(jié) SpringMVC 提供了一個處理控制器方法執(zhí)行異常的接口:HandlerExceptionResolver HandlerExceptionResolver 接口的實現(xiàn)類有:DefaultHandlerExceptionResolver 和 SimpleMappingExceptionResolver 實際工作中,有時使用 SimpleMappingExceptionResolver 異常解析器

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包