freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

嵌入式系統(tǒng)概論—基于32位微處理器與實時操作系統(tǒng)第四講(更新版)

2024-11-19 21:09上一頁面

下一頁面
  

【正文】 ink register STMFD r13!, {r0r2,r14} BL SUB2 .. LDMFD r13!, {r0r2,pc} SUB2: .. MOV pc, r14 。return from SWI handler LDMFD sp!, {r0r12,pc}^ 50 控制和分支指令 ? 控制指令 ? 分支和分支連接 ?跳到希望的指令中 ?保存當前的 PC并返回 (with ‘L’ bit) ? 分支和交換 ?跳到期望的指令中與指令集交換 ?Rm[0] == 1: Subsequent inst. are THUMB. ?Rm[0] == 0: Subsequent inst. are ARM. co n d 1 0 1 L 2 4 b i t s i g n e d w o r d o f f se t31 28 27 25 24 23 0cond Rm 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 31 28 27 6 5 4 3 0 1 L 51 ? Branch : B{cond} label ? Branch with Link : BL{cond} subroutine_label ? 處理器把偏移量左移兩位,進行符號擴展后再與 PC相加 ? 跳轉范圍: 177。 Rm Rd 3 2 1 temp 存儲器 Rn SWP 44 SWAP指令的用法 ? PRE mem32[0x9000]=0x12345678, r0=0x00000000, r1=0x11112222, r2=0x00009000 執(zhí)行操作: SWP r0, r1, [r2] ? POST: mem32[0x9000]=0x11112222, r0=0x12345678, r1=0x11112222, r2=0x00009000 ? 交換指令多用于實現(xiàn)操作系統(tǒng)中的信號量和互斥操作,該指令有修飾符 B,即有字交換和字節(jié)交換兩種形式; 45 SWP指令應用示例 Spin MOV r1, =semaphore MOV r2, 1 SWP r3, r2, [r1] CMP r3, 1 BEQ spin 注:信號量指向的單元是 0或 1,如果為 1,則表示該服務被另一個過程使用,程序繼續(xù)循環(huán),直至為 0 46 軟件中斷 (SWI) ? 產生一個異常陷阱,跳轉到 SWI 硬件向量。 r2 points to TABLE2 LOOP: LDR r0, [r1], 4 STR r0, [r2], 4 ... TABLE1: ... TABLE2:... 31 多寄存器數(shù)據(jù)傳送指令 LDM ? 多數(shù)據(jù)傳送指令 (LDM, STM) ? load (LDM) 或 store (STM) 當前可訪問寄存器的任意子集 ? 使用 ?堆棧 : maintaining full or empty stacks which can grow up or down memory ?上下文切換 : 保存或重新存儲工作寄存器 ?塊拷貝 :在主存儲器中移動大數(shù)據(jù)塊 ? 尋址 ?Pre/Post indexing ?Auto increment or decrement ?回寫到基址寄存器 Write back the base register 32 多寄存器數(shù)據(jù)傳送指令的要點 ? 多寄存器 Load/Store指令會增加中斷的延遲,因為 ARM不會打斷正在執(zhí)行的指令去響應中斷,而必須等到指令執(zhí)行完成; ? 一般編譯器將提供一個選項以控制 Load/Store指令可以傳送的最大寄存器數(shù)目,以限制最大中斷延遲。 CMP r0,0 MOVEQ r0,1。 for hex 19 條件碼標志 ? 任何數(shù)據(jù)處理指令都可以設置條件碼 (N, Z, V, and C) ? 適用于除比較操作外的所有數(shù)據(jù)處理指令 ? 特殊的請求必須在匯編語言中實現(xiàn) ,這種請求是通過把 ” S”增加到選擇代碼中指定的 ? 算術操作設置所有的標志位 (N, Z, C, and V) ? 邏輯和移位操作設置 N and Z ? 當無移位操作時 ,保存 V和 C,或根據(jù)移位操作設置 ADDS r2, r2, r0 。若源操作數(shù)為正數(shù),則字的高端空出的位補 0。1 嵌入式系統(tǒng)概論 — 基于 32位微處理器與實時操作系統(tǒng) 第四講 ARM指令集與編程 北京航空航天大學 機器人研究所 魏洪興 2 指令長度 ? 指令集可以是以下任一種 ? 32 bits 長 (ARM狀態(tài) ) ? 16 bits 長 (Thumb 狀態(tài) ) ? ARM7TDMI 支持 3種數(shù)據(jù)類型 ? 字節(jié) (8bit) ? 半字 (16bit) ? 字 (32bit) ? 字必須被排成 4個字節(jié)邊界對齊 ,半字必須被排列成 2個字節(jié)邊界對齊 3 ARM 指令集的特點 ? 向后兼容:新版本增加指令,并保持指令向后兼容; ? Loadstore 結構 * ? load/store –從存儲器中讀某個值 ,操作完后再將其放回存儲器中 ? 只對存放在寄存器的數(shù)據(jù)進行處理; ? 對于存儲器中的數(shù)據(jù),只能使用 load/store指令進行存取 4 指令格式 ? 指令格式 ? 3 地址指令格式 ? 在 ARM狀態(tài)中使用 ? 例 指令語法 目標寄存器(Rd) 源寄存器 1(Rn) 源寄存器 2(Rm) ADD r3,r1,r2 r3 r1 r2 5 ARM 指令分類 ? 數(shù)據(jù)處理指令 – 使用和改變寄存器的值 ? 數(shù)據(jù)傳送指令 – 把存儲器的值拷貝到寄存器中 (load) or 把寄存器中的值拷貝到存儲器中 (store) ? 控制流指令 ? 分支 ? 分支和鏈接 , 保存返回的地址 ,以恢復最先的次序 ? 軟件中斷指令 ? 程序狀態(tài)寄存器指令 ? 協(xié)處理器指令 6 ARM指令編碼格式 ? 說明 ? Cond ? 指令執(zhí)行的條件編碼 ? Opcode ? 指令操作符編碼 ? S ? 決定指令的操作是否影響 CPSR的值 ? Rd ? 操作目標寄存器編碼 ? Rn ? 包含第一操作數(shù)的寄存器編碼 ? Shifter_operand ? 表示第二操作數(shù) cond 001 opcode s Rn Rd Shifter_operand 31 28 27 25 24 21 20 19 16 15 12 11 8 7 0 7 ARM指令集 8 數(shù)據(jù)處理指令 1 ? 數(shù)據(jù)處理指令的類別 ? 算術操作 ? 按位邏輯操作 ? 寄存器移位操作 ? 比較操作 ? 操作數(shù) : 32bits 寬 。算術移位的對象是帶符號數(shù),在移位過程中必須保持操作數(shù)的符號不變。ff r8 := r7[7:0], amp。 N=V Z=1 or N=!V ? 下表為所有可能的條件碼: ? 注意 :AL為默認狀態(tài),不需要單獨指出 22 條件執(zhí)行示例 ? 一系列的指令都使用條件指令 if (a==0) func(1)。 r1 points to TABLE1 ADR r2, TABLE2 。 ? 語法: ? SWP{cond}{B} Rd, Rm, [Rn] ? 可用作信號量 ? 不能由 armcc編譯產生,必須使用匯編器。 r10contains the SWI number BL service_routine 。 return BL SUB1 .. SUB1: 。 ? 這有三種協(xié)處理器指令 ? 協(xié)處理器數(shù)據(jù)處理指令 ? CDP:初始化協(xié)處理器數(shù)據(jù)處理操作 ? 協(xié)處理器寄存器傳送指令 ? MRC: 從 ARM 寄存器移到協(xié)處理器寄存器 ? MCR:從協(xié)處理器寄存器移到 ARM 寄存器 ? 協(xié) 處理器存儲器傳送指令 ? LDC:從存儲器裝載到協(xié)處理器寄存器 ? STC:從協(xié)處理器寄存器存儲到存儲器 60 常量的裝載 ? ARM指令不用于將一個 32位的常量裝入寄存器,因為 ARM本身是32位的,所以指令中不可能再定義一個普通的 32位常量; ? ARM增加了 2條偽指令,把 32位常量送入寄存器: ? 例: LDR Rd, =constant ; LDR—常量裝載偽指令 ADR Rd, Label ; ADR—地址裝載偽指令 61 ? 為允許裝載大常數(shù),匯編器提供了一條偽指令 : ? LDR rd, =const ? 它可能匯編成下列指令: ? MOV or MVN。 偽指令 70 符號定義偽指令 Ⅰ ? 用于定義 ARM匯編程序中的變量 、 對變量賦值以及定義寄存器的別名等 。 ? DCB ? DCW/DCWU ? DCD/DCDU ? DCQ/DCQU ? DCFS/DCFSU ? DCFD/DCFDU ? SPACE ? FIELD ? MAP 76 數(shù)據(jù)定義偽指令 Ⅱ ? 1. DCB: 標號 DCB 表達式 說明: DCB用于分配一塊 字節(jié) 單元并用偽指令中指定的表達式進行初始化 。 78 數(shù)據(jù)定義偽指令 Ⅳ ? : 標號 DCFD/DCFDU 表達式 說明: DCFD用于為雙精度的浮點數(shù)分配一片連續(xù)的字存儲單元并用偽指令中指定的表達式初始化 , 它定義的存儲空間是字對齊的 , 每個雙精度的浮點數(shù)占據(jù)兩個字單元 。在源程序被編譯時,匯編器將宏調用展開,用宏定義中的指令序列替換程序中的宏調用,并將實際參數(shù)的值傳遞給宏定義中的參數(shù)。 84 其他偽指令 Ⅰ ? : ASSERT 邏輯表達式 說明: ASSERT用來表示程序的編譯必須滿足一定的條件,如果邏輯表達式不滿足,則編譯器會報錯。 常見屬性如下: ? DATA:定義數(shù)據(jù)段 。 CODE32偽操作指示編譯器后面的代碼為 32位的 ARM指令 。 ? : IMPORT 標號 [, WEAK] 說明: IMPORT告訴編譯器這個標號要在當前源文件中使用 , 但標號是在其他的源文件中定義的 。 其中 , 名稱為給寄存器定義的別名 , 表達式為寄存器的編碼 。 92 應用示例 系統(tǒng)初始化 初 始 化 存 儲 器 及S D R A M初 始 化 堆 棧設 置 異 常 向 量初 始 化 C 語 言 運 行 環(huán)境 : 設 置 參 數(shù)改 變 C P U 運 行 模 式 為 用戶 模 式 ( U s e r M o d e )運 行 C 程 序復 位1 . R 1 4 _ s v c = P C2 . S P S R _ s v c = C P S R3 . S P C 和 S P S R 未 定 義4 . C P S R 的 M [ 4 : 0 ] = 1 0 0 1 15 . C P S R 的 I , F 位 置 16 . C P S R 的 T 位 置 17 . P C = 08 . 在 A R M 模 式 下 執(zhí) 行 0 位置 的 指 令復位動作 初始化過程 93 初始化堆棧 (1) ? 第一步 :定義 6種操作模式 AREA RamData, DATA, READWRITE ^ 0xDffff0010240 (MAP:定義存儲器的起始地址 ) UserStack 2048。let sp=UnderStack 設定中止模式堆棧 : mrs r0,cpsr bic r0,r0,0x1f orr r1,r0,0x17|0xc0 msr cpsr_cxsf,r1 。let sp=SVCStack 97 ATPCS( arm/thumb程序調用規(guī)范) r8 r9/sb r10/sl r11 r12 r13/sp r14/lr r15/pc r0
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1