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

正文內(nèi)容

嵌入式系統(tǒng)概論—基于32位微處理器與實(shí)時(shí)操作系統(tǒng)第四講(存儲(chǔ)版)

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

下一頁面
  

【正文】 1010101, r1=0x00009004 r 0r 1寄 存 器0 x 0 0 0 0 9 0 0 00 x 0 1 0 1 0 1 0 10 x 0 2 0 2 0 2 0 2存 儲(chǔ) 器0 x 0 0 0 0 9 0 0 4地 址30 數(shù)據(jù)傳送指令 5 COPY: ADR r1, TABLE1 。是否到達(dá)結(jié)束地址 BNE loop 。保存寄存器 r0~r12和 lr STMFD sp!, {r0r12,lr} 。 branch to SUBR .. 。 psr[_fields] = Rm 在這里: ? psr = CPSR or SPSR ? [_fields] = ‘fsxc’的任意組合 ? 也允許送一個(gè)立即數(shù)到 psr_fields ? MSR{cond} psr_fields,Immediate ? 用戶模式下,所有位均可以被讀取,但只有條件標(biāo)志位 (_)可被寫。 ? 核存在一個(gè)執(zhí)行狀態(tài) – Thumb狀態(tài) ? ARM和 Thumb之間切換使用 BX 指令 63 寫 Thumb匯編程序 ? Thumb不是一個(gè)“好” 指令集! ? 最好用編譯器來產(chǎn)生 ? 約束并不一致 ? 手動(dòng)編碼使用 ARM指令集比較好 ? 更多細(xì)節(jié),參看: ?ARM ―Architecture Reference Manual‖ 64 ADS與 ARM匯編程序設(shè)計(jì) 65 生成二進(jìn)制文件的過程 匯 編 程 序 1 匯 編 程 序 2 匯 編 程 序 N編 譯 器 ( A s s e m b l e r )目 標(biāo) 文 件 1 目 標(biāo) 文 件 2 目 標(biāo) 文 件 N鏈 接 器 ( L i n k e r )二 進(jìn) 制 文 件66 編譯器的基本功能 ? 規(guī)定匯編語言的語法規(guī)則 ? ADS Vs. GNU ? 預(yù)編譯 (Preassembler) → 標(biāo)準(zhǔn)匯編語言 ? 編譯 → 二進(jìn)制文件 匯 編 程 序預(yù) 編 譯( P r e a s s e m b l e r )編 譯 器( A s s e m b l e r )二 進(jìn) 制 文 件編 譯 器67 預(yù)編譯 (Preassembler) ? 處理偽指令 (PseudoInstruction) ? 偽指令:做為匯編語言的參數(shù),或被預(yù)編譯器識(shí)別,翻譯成標(biāo)準(zhǔn)匯編語言。 74 符號(hào)定義偽指令 Ⅴ 4. RLIST ? 格式:名稱 RLIST {寄存器列表 } ? 說明: RLIST可用于對(duì)一個(gè)通用寄存器列表定義名稱 , 該名稱可在 ARM指令 LDM/STM中使用 ?!?代替。 ? 9. FILED: 標(biāo)號(hào) FIELD 字節(jié)數(shù) 說明: FIELD用于定義一個(gè)結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域,“ ” 可用來代替 FILED。 83 匯編控制偽指令 Ⅲ ? 3. WHILE、 WEND: WHILE 邏輯表達(dá)式 代碼段 WEND 說明: WHILE和 WEND偽指令能根據(jù)邏輯表達(dá)式的成立與否決定是否循環(huán)執(zhí)行這個(gè)代碼段 。 85 其他偽指令 Ⅱ ? : AREA 段名 屬性 , ?? 說明: AREA用于定義一個(gè)代碼段 、 數(shù)據(jù)段或者特定屬性的段 。 表達(dá)式的取值范圍為 0—— 31。 如果表達(dá)式為 32位的常量 , 我們可以指定表達(dá)式的數(shù)據(jù)類型, 類型域可以有以下三種: CODE16/CODE32/DATA 88 其他偽指令 Ⅴ ? : EXPORT 標(biāo)號(hào) [,WEAK] 說明: EXPORT 在程序中聲明一個(gè)全局標(biāo)號(hào) , 該標(biāo)號(hào)可以被其他的文件中的代碼引用 。 與 IMPORT不同的是 , 如果當(dāng)前源文件實(shí)際上沒有引用該標(biāo)號(hào) , 該標(biāo)號(hào)就不會(huì)被加入到當(dāng)前文件的符號(hào)表中 。 ? : INCBIN 文件名 說明: INCBIN將一個(gè)數(shù)據(jù)文件或者目標(biāo)文件包含到當(dāng)前的源文件中, 編譯時(shí)被包含的文件不作任何變動(dòng)的存放在當(dāng)前文件中 , 編譯器從后面開始繼續(xù)處理 。 FIQStack 0。chang mode to UnderStack M[10001] ldr sp,=FIQStack 。chang mode to UnderStack M[10010] ldr sp,=IRQStack 。 AbortStack 2048。 我們通常這樣使用這個(gè)偽指令:在某源文件中定義一些宏指令 , 用 MAP和 FIELD定義結(jié)構(gòu)化的數(shù)據(jù)類型 , 用 EQU定義常量的符號(hào)名稱 , 然后用 GET/INCLUDE將這個(gè)源文件包含到其他的源文件中 。 編譯器在多數(shù)情況下將該標(biāo)號(hào)置為 0, 如果這個(gè)標(biāo)號(hào)被 B或 BL指令引用 , 則將 B或 BL指令替換為 NOP操作 。 87 其他偽指令 Ⅳ ? : END 說明:“ END” 告訴編譯器已經(jīng)到了源程序的結(jié)尾。 ? READWRITE:表示本段可讀寫 。 如果偽操作中沒有指定表達(dá)式 , 則編譯器會(huì)將當(dāng)前位置對(duì)齊到下一個(gè)字的位置 。 IF、 ELSE、 ENDIF可以分別用 “ [” 、 “ |” 、 “ ]” 代替 。 79 數(shù)據(jù)定義偽指令 Ⅴ ? 7. SPACE: 標(biāo)號(hào) SPACE 表達(dá)式 說明: SPACE用于分配一片連續(xù)的存儲(chǔ)區(qū)域并初始化為 0,表達(dá)式為要分配的字節(jié)數(shù) ,SPACE也可用“%”代替。 77 數(shù)據(jù)定義偽指令 Ⅲ ? 3. DCD/DCDU: 標(biāo)號(hào) DCD/DCDU 表達(dá)式 說明: DCD偽指令用于分配一塊 字 存儲(chǔ)單元并用偽指令中指定的表達(dá)式初始化,它定義的存儲(chǔ)空間是字對(duì)齊的。 72 符號(hào)定義偽指令 Ⅲ 2. GBLA、 GBLL、 GBLS ? 格式: GBLA/GBLL/GBLS 變量名 ? 說明: GBLA、 GBLL、 GBLS偽操作定義一個(gè)匯編程序中的全局變量, 并初始化 , 其中: ?GBLA定義一個(gè)全局?jǐn)?shù)字變量 , 并初始化為 0; ?GBLL定義一個(gè)全局邏輯變量 , 并初始化為 “ F” ; ?GBLS定義一個(gè)全局字符串變量 , 并初始化為空串; 這三條偽指令用于定義全局變量 , 因此在整個(gè)程序范圍內(nèi)變量名必須唯一 。 裝載 32 bit常數(shù) 62 0 15 31 0 ADDS r2,r2,1 ADD r2,1 32bit ARM 指令 16bit Thumb 指令 對(duì)于由編譯器產(chǎn)生的大部分指令: ?沒有條件執(zhí)行 ?源、目的寄存器必須相同 ?僅能使用低寄存器 ?常數(shù)大小有限制 ?不能使用在線移位器 關(guān)于 Thumb指令集 ? Thumb 是 16bit 指令集 ? 代碼密度優(yōu)化 (總代碼大小約為 ARM指令的 65%) ? 使用窄總線存儲(chǔ)器時(shí)可以大大提高性能。 ? 語法: ? MRS{cond} Rd,psr 。 n o o v e rf l o w o c c u rre d BVS Ov e rf l o w s e t S i g n e d i n te g e r o p e ra ti o n 。 ? 通過 SWI機(jī)制,運(yùn)行在用戶模式下的應(yīng)用程序,可請(qǐng)求操作系統(tǒng)執(zhí)行一系列特權(quán)操作。裝載 32字節(jié)并更新 r9指針 STMIA r10!, {r0r7} 。r0:a,r1:x if (a0) x=1。 ? 這樣可以提高代碼密度,減少分支跳轉(zhuǎn)指令數(shù)目,提高性能。 ? ROR:循環(huán)右移( Rotate Right)。 ? MOV指令語法: 〈 指令 〉 {〈 cond} {S} Rd, N 例: PRE r0= 5 , r2=6 MOV r0, r2 POST r0=6 ,r2=6 MOV r0, r2 r0 := r2 MVN r0, r2 r0 := not r2 13 桶形移位器 ALU 桶形移位器 Rd 結(jié)果 N 預(yù)處理 未預(yù)處理 Rm Rn 14 桶形移位器的使用 ? PRE r0=8, r2=5 ? MOV r0 ,r2, LSL 2(邏輯左移兩位: r22=r5*4) ? POST r0=20, r2=5 15 數(shù)據(jù)處理指令 ? 移位操作 ?在任何數(shù)據(jù)處理指令中 ,第二個(gè)寄存器操作數(shù)可以有應(yīng)用該操作數(shù)的移位操作 . ?邏輯移位 ?LSL:邏輯左移 ?字的最小位空位清零 ?LSR:邏輯右移字的最大位空位清零 . 16 桶形移位器操作 ? LSL:邏輯左移( Logical Shift Left)。寄存器中字的高端空出的位補(bǔ) 0。操作數(shù)右移一位,空位(位 [31])用原 C標(biāo)志填充。 loop … SUBS r1,r1,1 BNE loop 條件執(zhí)行及標(biāo)志位 ** 如果 Z標(biāo)志清零則跳轉(zhuǎn) R1減 1,并設(shè)置標(biāo)志位 21 Condition Codes 不等于( Not equal) 無符號(hào)的大于或等于 無符號(hào)的小于 負(fù)數(shù)( Minus) 等于( Equal) 溢出( Overflow) 沒溢出 無符號(hào)的大于 無符號(hào)的小于或大于 正數(shù)或零 小于( Less Than) 大于( Greater Than) 小于等于 總是執(zhí)行( Always) 大于等于 EQ NE CS/HS CC/LO PL VS HI LS GE LT GT LE AL MI VC Suffix 描述 Z=0 C=1 C=0 Z=1 測(cè)試的標(biāo)志位 N=1 N=0 V=1 V=0 C=1 amp。 r1 points to TABLE1 ADR r2, TABLE2 。不相等跳轉(zhuǎn) 目的 源 高地址 低地址 拷貝存儲(chǔ)地址 r9 r11 r10 38 堆棧操作 ? ARM使用多寄存器 Load/Store指令來完成堆棧操作; ? 使用堆棧時(shí),需要確定堆棧在存儲(chǔ)空間中是向上生長(zhǎng)(遞增的“ A‖)還是向下生長(zhǎng)(遞減的“ D‖); ? 滿堆棧(“ F‖)是指堆棧指針指向堆棧的最后一個(gè)已使用的地址或滿位置;相反,空堆棧(“ E‖)是指 SP指向堆棧的第一個(gè)沒有使用的地址或空位置; 39 堆棧操作尋址方式 尋址方式 說明 pop =LDM push =STM FA 遞增滿 LDMFA LDMDA STMFA STMIB FD 遞減滿 LDMFD LDMIA STMFD STMDB EA 遞增空 LDMEA LDMDB STMEA STMIA ED 遞減空 LDMED LDMIB STMED STMDA 40 LDMFD sp!,{r4r7,pc} SP 100 FF 1234 AOBE 8034 1010 1234 8420 9753 r4 1 r5 14544 r6 0 r7 12 lr 9048 pc 9020 100FF1234A0BE A0BE8034堆棧 r4 100 r5 FF r6 1234 r7 A0BE lr 8034 ABCD 8765 102E 16 FFFF 1010 1234 8420 9753 存儲(chǔ)器頂 SP SP 100 FF 1234A0BE 8034SP Old SP ? ARM堆棧操作通過塊傳送指令來完成 : ?STMFD (Push) 塊存儲(chǔ) Full Descending stack [STMDB] ?LDMFD (Pop) 塊裝載 Full Descending stack [LDMIA] STMFD sp!,{r4r7,lr} 41 例:把寄存器內(nèi)容放入堆棧,更新 sp 0x80018 0x00000001 0x80014 0x0000000
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1