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

正文內(nèi)容

嵌入式系統(tǒng)概論—基于32位微處理器與實(shí)時(shí)操作系統(tǒng)第四講-閱讀頁

2024-10-18 21:09本頁面
  

【正文】 儲(chǔ)器傳送指令 ? LDC:從存儲(chǔ)器裝載到協(xié)處理器寄存器 ? STC:從協(xié)處理器寄存器存儲(chǔ)到存儲(chǔ)器 60 常量的裝載 ? ARM指令不用于將一個(gè) 32位的常量裝入寄存器,因?yàn)?ARM本身是32位的,所以指令中不可能再定義一個(gè)普通的 32位常量; ? ARM增加了 2條偽指令,把 32位常量送入寄存器: ? 例: LDR Rd, =constant ; LDR—常量裝載偽指令 ADR Rd, Label ; ADR—地址裝載偽指令 61 ? 為允許裝載大常數(shù),匯編器提供了一條偽指令 : ? LDR rd, =const ? 它可能匯編成下列指令: ? MOV or MVN。 ? For example ? LDR r0,=0xFF = MOV r0,0xFF ? LDR r0,=0x55555555 = LDR r0,[PC,Imm12] … … DCD 0x55555555 ? 推薦使用這種方法把常數(shù)裝入寄存器 。 ? 是 ARM 指令集的一個(gè)子集。 ? 偽指令的功能: ? 提高程序的可讀性和易維護(hù)性 ? 易于編程 68 鏈接器( Linker) ? 將多個(gè)目標(biāo)文件鏈接成一個(gè)可執(zhí)行的文件 ? 編譯器只負(fù)責(zé)把程序翻譯成機(jī)器碼,但處理與存儲(chǔ)器地址相關(guān)的內(nèi)容,這部分工作由鏈接器來完成; ? 一個(gè)程序編譯完成后會(huì)分成代碼段( ReadOnly,RO)、數(shù)據(jù)段(ReadWrite,RW)、零初始化段( ZeroInitialized,ZI),需要把不同的程序的不同區(qū)段鏈接成一個(gè)完整連續(xù)的區(qū)。 偽指令 70 符號(hào)定義偽指令 Ⅰ ? 用于定義 ARM匯編程序中的變量 、 對(duì)變量賦值以及定義寄存器的別名等 。 71 符號(hào)定義偽指令 Ⅱ 1. LCLA、 LCLL、 LCLS ? 格式: LCLA/LCLL/LCLS 局部變量名 ? 說明: LCLA、 LCLL、 LCLS偽指令用于定義一個(gè)匯編程序中的局部變量 , 并初始化 , 其中: ?LCLA定義一個(gè)局部的數(shù)字變量 , 初始化為 0; ?LCLL定義一個(gè)局部的邏輯變量 , 初始化為 F; ?LCLS定義一個(gè)局部的字符串變量 , 初始化為空串; 這三條偽指令用于聲明局部變量 , 在其局部作用范圍內(nèi)變量名必須唯一 。 73 符號(hào)定義偽指令 Ⅳ 3. SETA、 SETL、 SETS ? 格式:變量名 SETA/SETL/SETS 表達(dá)式 ? 說明: SETA:給一個(gè)數(shù)字變量賦值; ?SETL:給一個(gè)邏輯變量賦值; ?SETS:給一個(gè)字符串變 Ⅳ 量賦值; 格式中的變量名必須為已經(jīng)定義過的全局或局部變量 , 表達(dá)式為將要賦給變量的值 。 在 LDM/STM指令中 , 列表中的寄存器為根據(jù)寄存器的編號(hào)由低到高訪問次序 , 與列表中的寄存器排列次序無關(guān) 。 ? DCB ? DCW/DCWU ? DCD/DCDU ? DCQ/DCQU ? DCFS/DCFSU ? DCFD/DCFDU ? SPACE ? FIELD ? MAP 76 數(shù)據(jù)定義偽指令 Ⅱ ? 1. DCB: 標(biāo)號(hào) DCB 表達(dá)式 說明: DCB用于分配一塊 字節(jié) 單元并用偽指令中指定的表達(dá)式進(jìn)行初始化 。 ? 2. DCW/DCWU: 標(biāo)號(hào) DCW/DCWU 表達(dá)式 說明: DCW分配一段半字存儲(chǔ)單元并用表達(dá)式值初始化 , 它定義的存儲(chǔ)空間是半字對(duì)齊的 。 DCD也可用“ amp。 ? 4. DCQ/DCQU: 標(biāo)號(hào) DCQ/DCQU 表達(dá)式 說明: DCQ用于分配一塊以 8個(gè)字節(jié) 為單位的存儲(chǔ)區(qū)域并用偽指令中指定的表達(dá)式初始化 , 它定義的存儲(chǔ)空間是字對(duì)齊的 。 78 數(shù)據(jù)定義偽指令 Ⅳ ? : 標(biāo)號(hào) DCFD/DCFDU 表達(dá)式 說明: DCFD用于為雙精度的浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元并用偽指令中指定的表達(dá)式初始化 , 它定義的存儲(chǔ)空間是字對(duì)齊的 , 每個(gè)雙精度的浮點(diǎn)數(shù)占據(jù)兩個(gè)字單元 。 ? : 標(biāo)號(hào) DCFS/DCFSU 表達(dá)式 說明: DCFS用于為單精度的浮點(diǎn)數(shù)分配一片連續(xù)的字存儲(chǔ)單元并用表達(dá)式初始化 ,它定義的存儲(chǔ)空間是字對(duì)齊的 ,每個(gè)單精度浮點(diǎn)數(shù)使用一個(gè)字單元 .DCFSU功能跟 DCFS類似 , 只是分配的存儲(chǔ)單元不嚴(yán)格字對(duì)齊 。 ? 8. MAP: MAP 表達(dá)式 [, 基址寄存器 ] 說明: MAP定義一個(gè)結(jié)構(gòu)化的內(nèi)存表的首地址 , “ ^ ” 可以用來代替 MAP。 80 匯編控制偽指令 Ⅰ ? 匯編控制偽操作用于指引匯編程序的執(zhí)行流程: ? MACRO、 MEND ? IF、 ELSE、 ENDIF ? WHILE、 WEND ? MEXIT 81 匯編控制偽指令 Ⅱ ? 1. MACRO、 MEND MACRO [$標(biāo)號(hào) ] 宏名 [$參數(shù) 1, $參數(shù) 2, ?? ] 指令序列 MEND 說明: MACRO 表明一個(gè)宏定義的開始, MEND則表示一個(gè)宏的結(jié)束, MACRO、 MEND前呼后應(yīng)可以將一段代碼定義為一個(gè)整體,又稱宏,然后就可以在程序中通過宏的名稱及參數(shù)調(diào)用該段代碼。在源程序被編譯時(shí),匯編器將宏調(diào)用展開,用宏定義中的指令序列替換程序中的宏調(diào)用,并將實(shí)際參數(shù)的值傳遞給宏定義中的參數(shù)。 82 匯編控制偽指令 Ⅲ ? 2. IF、 ELSE、 ENDIF IF邏輯表達(dá)式 代碼段 1 ELSE 代碼段 2 ENDIF 說明: IF、 ELSE、 ENDIF偽操作能根據(jù)邏輯表達(dá)式的成立與否決定是否在編譯時(shí)加入某個(gè)指令序列 。 IF、 ELSE、 ENDIF偽指令可以嵌套使用 。 WHILE、 WEND偽指令可以嵌套使用 。 84 其他偽指令 Ⅰ ? : ASSERT 邏輯表達(dá)式 說明: ASSERT用來表示程序的編譯必須滿足一定的條件,如果邏輯表達(dá)式不滿足,則編譯器會(huì)報(bào)錯(cuò)。 其中 , 表達(dá)式的值為 2的冪 , 如 16等 , 用于指定對(duì)齊方式 。 偏移量也是個(gè)數(shù)字表達(dá)式 , 如果存在偏移量 , 則當(dāng)前位置的自動(dòng)對(duì)齊到: 2的表達(dá)式值次方+偏移量 。 如果段名以數(shù)字開頭 , 那么該段名需用 “ |” 字符括起來 , 如 |7wolf|, 用 C的編譯器產(chǎn)生的代碼一般也用 “ |” 括起來 。 常見屬性如下: ? DATA:定義數(shù)據(jù)段 。 ? READONLY:表示本段為只讀 。 ? ALIGN=表達(dá)式:對(duì)齊方式為 2表達(dá)式次方 , 例如:表達(dá)式 =3, 則對(duì)齊方式為 8字節(jié)對(duì)齊 。 ? COMMON屬性:定義一個(gè)通用段 , 這個(gè)段不包含用戶代碼和數(shù)據(jù) 。 CODE32偽操作指示編譯器后面的代碼為 32位的 ARM指令 。 在一個(gè)完整的匯編程序中至少要有一個(gè) ENTRY, 程序中也可以有多個(gè) , 此時(shí) , 程序的真正入口點(diǎn)可在鏈接時(shí)指定 , 但在一個(gè)源文件里最多只能有一個(gè)ENTRY或者沒有 ENTRY。 ? : 名稱 EQU 表達(dá)式 [, 類型 ] 說明: EQU用于將程序中的數(shù)字常量 、 標(biāo)號(hào) 、 基于寄存器的值賦予一個(gè)等效的名稱 , 這一點(diǎn)類似于 C語言中的# define, 可用 “ *” 代替 EQU。 用戶也可以用 GLOBAL代替 EXPORT。 ? : IMPORT 標(biāo)號(hào) [, WEAK] 說明: IMPORT告訴編譯器這個(gè)標(biāo)號(hào)要在當(dāng)前源文件中使用 , 但標(biāo)號(hào)是在其他的源文件中定義的 。 [, WEAK]選項(xiàng)表示如果所有的源文件都沒有找到這個(gè)標(biāo)號(hào)的定義 , 編譯器也不會(huì)提示錯(cuò)誤信息 。 89 其他偽指令 Ⅵ ? : EXTERN 標(biāo)號(hào) [,WEAK] 說明: EXTERN告訴編譯器所使用的標(biāo)號(hào)要在當(dāng)前源文件中引用 ,但該標(biāo)號(hào)是在其他的源文件中定義的 。 [, WEAK]選項(xiàng)意義同IMPORT。 其中 , 名稱為給寄存器定義的別名 , 表達(dá)式為寄存器的編碼 。 INCLUDE和 GET作用等效的 。 GET/INCLUDE只能用于包含源文件 , 包含其他文件則需要使用 INCBIN偽指令 。 91 其他偽指令 Ⅷ ? : [名稱 ] ROUT 說明: ROUT可以給一個(gè)局部變量定義作用范圍 。 92 應(yīng)用示例 系統(tǒng)初始化 初 始 化 存 儲(chǔ) 器 及S D R A M初 始 化 堆 棧設(shè) 置 異 常 向 量初 始 化 C 語 言 運(yùn) 行 環(huán)境 : 設(shè) 置 參 數(shù)改 變 C P U 運(yùn) 行 模 式 為 用戶 模 式 ( U s e r M o d e )運(yùn) 行 C 程 序復(fù) 位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 位置 的 指 令復(fù)位動(dòng)作 初始化過程 93 初始化堆棧 (1) ? 第一步 :定義 6種操作模式 AREA RamData, DATA, READWRITE ^ 0xDffff0010240 (MAP:定義存儲(chǔ)器的起始地址 ) UserStack 2048。 UndefStack 2048。 IRQStack 2048。 2 0 4 82 0 4 82 0 4 82 0 4 82 0 4 82 0 4 8E n d o f S t a c kF I Q S t a c kI R Q S t a c kA b o r t S t a c kU n d e f S t a c kS V C S t a c kU s e r S t a c k0 x d f f f f 0 00 x d f f f 7 0 00 x d f f e f 0 00 x d f f e 7 0 00 x d f f d f 0 00 x d f f d 7 0 00 x d f f c f 0 094 初始化堆棧 (2) ? 第二步 :定義各種模式下的寄存器 設(shè)定未定義指令模式堆棧 : mrs r0,cpsr bic r0,r0,0x1f orr r1,r0,0x1b|0xc0 msr cpsr_cxsf,r1 。let sp=UnderStack 設(shè)定中止模式堆棧 : mrs r0,cpsr bic r0,r0,0x1f orr r1,r0,0x17|0xc0 msr cpsr_cxsf,r1 。let sp=AbortStack 95 初始化堆棧 (3) 設(shè)定中斷模式堆棧 : mrs r0,cpsr bic r0,r0,0x1f orr r1,r0,0x12|0xc0 msr cpsr_cxsf,r1 。let sp=IRQStack 設(shè)定快速中斷模式堆棧 : mrs r0,cpsr bic r0,r0,0x1f orr r1,r0,0x11|0xc0 msr cpsr_cxsf,r1 。let sp=FIQStack 96 初始化堆棧 (4) 設(shè)定監(jiān)控模式堆棧 : mrs r0,cpsr bic r0,r0,0x1f orr r1,r0,0x13|0xc0 msr cpsr_cxsf,r1 。let sp=SVCStack 97 ATPCS( arm/thumb程序調(diào)用規(guī)范) r8 r9/sb r10/sl r11 r12 r13/sp r14/lr r15/pc r0
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1