ARM基礎(chǔ)知識(shí)連載(3)
在ARM體系中通常有以下3種方式控制程序的執(zhí)行流程:
**在正常執(zhí)行過(guò)程中,每執(zhí)行一條ARM指令,程序計(jì)數(shù)器(PC)的值加4個(gè)字節(jié);每執(zhí)行一條Thumb指令,程序計(jì)數(shù)器寄存器(PC)加2個(gè)字節(jié)。整個(gè)過(guò)程是按順序執(zhí)行
。
**跳轉(zhuǎn)指令,程序可以跳轉(zhuǎn)到特定的地址標(biāo)號(hào)處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行。其中,B指令用于執(zhí)行跳轉(zhuǎn)操作;BL指令在執(zhí)行跳轉(zhuǎn)操作同時(shí),保存子程
序的返回地址;BX指令在執(zhí)行跳轉(zhuǎn)操作同時(shí),根據(jù)目標(biāo)地址為可以將程序切換到Thumb狀態(tài);BLX指令執(zhí)行3個(gè)操作,跳轉(zhuǎn)到目標(biāo)地址處執(zhí)行,保存子程序的返回
地址,根據(jù)目標(biāo)地址為可以將程序切換到Thumb狀態(tài)。
**當(dāng)異常中斷發(fā)生時(shí),系統(tǒng)執(zhí)行完當(dāng)前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。當(dāng)異常中斷處理程序執(zhí)行完成后,程序返回到發(fā)生中斷指令的下條指
令處執(zhí)行。在進(jìn)入異常中斷處理程序時(shí),要保存被中斷程序的執(zhí)行現(xiàn)場(chǎng),從異常中斷處理程序退出時(shí),要恢復(fù)被中斷程序的執(zhí)行現(xiàn)場(chǎng)。
ARM中異常中斷的種類(lèi)
**復(fù)位(RESET)**
當(dāng)處理器復(fù)位引腳有效時(shí),系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行。復(fù)位異常中斷通常用在下面幾種情況下:系統(tǒng)加電時(shí);系統(tǒng)復(fù)位時(shí);跳轉(zhuǎn)到復(fù)位中斷向量處執(zhí)行成為軟復(fù)位。
**未定義的指令**
當(dāng)ARM處理器或者是系統(tǒng)中的協(xié)處理器認(rèn)為當(dāng)前指令未定義時(shí),產(chǎn)生未定義的指令異常中斷,可以通過(guò)改異常中斷機(jī)制仿真浮點(diǎn)向量運(yùn)算。
**軟件中斷**
這是一個(gè)由用戶(hù)定義的中斷指令??捎糜谟脩?hù)模式下的程序調(diào)用特權(quán)操作指令。在實(shí)時(shí)操作系統(tǒng)中可以通過(guò)該機(jī)制西線(xiàn)系統(tǒng)功能調(diào)用。
**指令與取終止(PrefechAbort)**
如果處理器預(yù)取的指令的地址不存在,或者該地址不允許當(dāng)前指令訪問(wèn),當(dāng)被預(yù)取的指令執(zhí)行時(shí),處理器產(chǎn)生指令預(yù)取終止異常中斷。
**數(shù)據(jù)訪問(wèn)終止(DATAABORT)
如果數(shù)據(jù)訪問(wèn)指令的目標(biāo)地址不存在,,或者該地址不允許當(dāng)前指令訪問(wèn),處理器產(chǎn)生數(shù)據(jù)訪問(wèn)終止異常中斷
**外部中斷請(qǐng)求(IRQ)**
當(dāng)處理器的外部中斷請(qǐng)求引腳有效,而且CPSR的寄存器的I控制位被清除時(shí),處理器產(chǎn)生外部中斷請(qǐng)求異常中斷。系統(tǒng)中個(gè)外設(shè)通過(guò)該異常中斷請(qǐng)求處理服務(wù)。
**快速中斷請(qǐng)求(FIQ)**
當(dāng)處理器的外部快速中斷請(qǐng)求引腳有效,而且CPSR的F控制位被清除時(shí),處理器產(chǎn)生外部中斷請(qǐng)求異常中斷
異常中斷向量表及異常中斷優(yōu)先級(jí)
中斷向量表指定了個(gè)異常中斷及其處理程序的對(duì)應(yīng)關(guān)系。他通常存放在存儲(chǔ)地址的低端。在ARM體系中,異常中斷向量表的大小為32字節(jié),其中每個(gè)異常中斷占據(jù)4個(gè)字節(jié)大小,保留了4個(gè)字節(jié)空間。
每個(gè)異常中斷對(duì)應(yīng)的中斷向量表中的4個(gè)字節(jié)的空間中存放了一個(gè)跳轉(zhuǎn)指令或者一個(gè)向PC寄存器中賦值的數(shù)據(jù)訪問(wèn)指令。通過(guò)這兩種指令,程序?qū)⑻D(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。當(dāng)幾個(gè)異常中斷同時(shí)發(fā)生時(shí),就必須按照一定的次序來(lái)處理這些異常中斷。
各個(gè)異常中斷的中斷向量地址以及中斷的處理優(yōu)先級(jí)
中斷向量地址 異常中斷類(lèi)型 異常中斷模式 優(yōu)先級(jí)(6最低)
0x00 復(fù)位 特權(quán)模式 1
0x04 未定義的指令 未定義指令終止模式 6
0x08 軟件中斷 特權(quán)模式 6
0x0C 指令預(yù)取終止 終止模式 5
0x10 數(shù)據(jù)訪問(wèn)終止 終止模式 2
0x14 保留 未使用 未使用
0x18 外部中斷請(qǐng)求 IRQ模式 4
0x1C 快速中斷請(qǐng)求 FIQ模式 3
評(píng)論