1. 程式人生 > >ARM的暫存器及異常處理機制

ARM的暫存器及異常處理機制

arm的暫存器:
    普通:r0-r15
        r0-r12   //儲存任何資料
        r13(sp)  //棧指標暫存器(私有暫存器),當模式切換、程式跳轉時,可以儲存通用暫存器數值到sp指向的記憶體地址
        r14(lr)//連結暫存器()  當程式跳轉時,用來記錄程式返回地址
        r15(pc)//程式計數器    讀操作:arm狀態讀取得是當前正在執行的指令地址+8
                                 寫操作:cpu會自動跳轉到寫入地址處執行程式碼
                                 
    特殊:cpsr(程式當前狀態暫存器)
            N 31位   1表示結果為負  0表示結果為正
            Z 30位   1表示結果為0   0表示結果非0 
            C 29位   加法 1表示存在進位  0表示沒有進位  減法:1表示沒有借位 0表示有借位
            V 28位   溢位表示:1結果溢位  0沒有溢位
            運算表示位只能cpu根據運算結果自己修改,程式設計師不能寫
            E 9位    0小端   1大端
            I 7位    中斷控制位       1不接收中斷  0接收中斷
            F 6位    快速中斷控制位   1不接收快速中斷  0接收快速中斷
            M 4-0位  工作模式表示域
                      when '10000'  result = usr;  // User mode
                      when '10001'  result = fiq;  // FIQ mode
                      when '10010'  result = irq;  // IRQ mode
                      when '10011'  result = svc;  // Supervisor mode
                      when '10110'  result = mon;  // Monitor mode
                      when '10111'  result = abt;  // Abort mode
                      when '11010'  result = hyp;  // Hyp mode
                      when '11011'  result = und;  // Undefined mode
                      when '11111'  result = usr;  // System mode uses User mode registers
            
            修改模式的方法:
                1.在管理模式,程式設計師自主修改
                2.在異常發生時,cpu自動修改
          spsr(儲存的程式狀態暫存器)儲存存cpsr數值
          
arm的異常處理機制:
    異常發生時,cpu會自動跳轉到異常向量表固定位置執行程式碼
    異常向量表:arm的異常事件處理方法集合
    異常向量表基地址:0x00000000  0xffff0000   armv7可以設定在任意位置
    arm一共分7中異常
    0x0        reset異常
    0x4        Undefined Instruction(未定義)
    0x8        Supervisor Call(svc異常,軟體中斷)
    0xc        Prefetch Abort  (預取中止)
    0x10    Data Abort   (資料中止)
    0x14    not used
    0x18    irq 
    0x1c    fiq

當程式執行發生異常時,會自動跳轉到異常向量表的固定位置處執行程式碼。