-- 作者:hankuu -- 時間:2005-12-29 14:56:03 -- 跳轉指令的格式爲
31 282725 24 23 0 __________________________ |cond |101| L |Signed_immed_24| |___ |___|_ |______________ |
其中cond爲該條指令執行的條件碼 101 是25,26,27三位的固定值 L 決定是非保存返回地址,以便返回使用 signed_immed_24是跟跳轉目標地址有關的值,呆會講該值的計算方法
那麼 0xEA000000+0x1FFE 就是一條跳轉指令,它的條件碼爲1110,表示無條件跳轉;L爲0表示不保存返回值(因爲這裏修改的是異常處理入口,不用返回值);0x1FFE指定跳轉目的地址。
下面我們看看signed_immed_24的計算方法: 1.將PC寄存器作爲該條跳轉指令的基地址; 2.用目標地址減去基地址,生成跳轉偏移量(程序要保證該偏移量小於33554432); 3.將這個值的bit[25:2]填入signed_immed_24中。 因此0x1FFE的意義就是目標地址相對當前地址爲 0x1FFE*4+8=0x8000
現在我們就明白了這段代碼是將RAM開始的32個字節中填入了8個跳轉指令,跳轉的目標地址爲當前指令地址+0x8000 如果你把你的程序加載到_RAM_STARTADDRESS+0x8000(在這塊板子上就是0x0C008000),那麼這幾個異常中斷都會跳轉到你自己程序中的異常中斷處理處,執行你自己的處理過程。 |
|