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

正文內(nèi)容

嵌入式lpc2103教程-第五章基于arm的嵌入式程序設(shè)計-資料下載頁

2025-04-14 01:05本頁面
  

【正文】 不相等 0010 CS/HS C置位 無符號數(shù)大于或等于 0011 CC/LO C清零 無符號數(shù)小于 0100 MI N置位 負數(shù) 0101 PL N清零 正數(shù)或零 0110 VS V置位 溢出 0111 VC V清零 未溢出 1000 HI C置位 Z清零 無符號數(shù)大于 1001 LS C清零 Z置位 無符號數(shù)小于或等于 1010 GE N等于 V 帶符號數(shù)大于或等于 1011 LT N不等于 V 帶符號數(shù)小于 1100 GT Z清零且( N等于 V) 帶符號數(shù)大于 1101 LE Z置位或( N不等于 V) 帶符號數(shù)小于或等于 1110 AL 忽略 無條件執(zhí)行 例 1:跳過語句簡單,可用條件執(zhí)行代替轉(zhuǎn)移指令 CMP R0,5 BEQ BYPASS ADD R1,R1,R0 SUB R1,R1,R2 BYPASS: 可替代為: CMP R0,5 ADDNE R1,R1,R0 SUBNE R1,R1,R2 例 2:循環(huán)使用轉(zhuǎn)移指令: MOV R0,0 LOOP … ADD R0,R0,1 CMP R0,10 BNE LOOP 子程序的調(diào)用 ARM匯編語言中 , 子程序調(diào)用通過 BL完成: BL subname。 subname是被調(diào)用子程序名稱 。 將 PC( R15) 的值保存到 LR寄存器 ( R14) 中 , PC被設(shè)置成目標子程序第一條指令地址 。 子程序的返回 在返回調(diào)用程序時,轉(zhuǎn)移鏈接指令保存到 LR寄存器( r14)中的值需要拷貝回程序寄存器 PC( r15)。 子程序返回的方法 1)最簡單子程序 SUB2 … MOV PC,R14 2)子程序中出現(xiàn)嵌套調(diào)用,鏈接寄存器 LR壓入堆棧來進行保存 。 SUB1 STMFD R13!,{R0R2,R14} BL SUB2 … LDMFD R13!{R0R2,PC} 例:子程序調(diào)用的方法 AREA EXAMPLE,CODE,READONLY ENTRY Start MOV R0,10 MOV R1,3 BL Doadd … Doadd ADD R0,R0,R1 MOV PC,LR END 4. 跳轉(zhuǎn)表思想 由計算值確定調(diào)用一系列子程序中的一個。 跳轉(zhuǎn)表是利用程序計數(shù)器 PC在通用寄存器文件中的可見性實現(xiàn) ,下例所示:根據(jù) R0的值轉(zhuǎn)移到相應(yīng)子程序 BL JUMPTAB … JUMPTAB ADR R1,SUBTAB CMP R0,SUBMAX LDRLS PC,[R1,R0,LSL 2] B ERROR SUBTAB DCD SUB0 DCD SUB1 DCD SUB2 5. ARM與 Thumb間的狀態(tài)轉(zhuǎn)換及函數(shù)的相調(diào)用 Thumb不能獨立組成應(yīng)用系統(tǒng) 1) 狀態(tài)切換的實現(xiàn) ARM/Thumb之間切換通過轉(zhuǎn)移指令 BX實現(xiàn)。 ?BX利用 Rn中目的地址值的最后一位來判斷跳轉(zhuǎn)后的狀態(tài)。 ?當最后一位為 0時,表示轉(zhuǎn)移到 ARM狀態(tài); ?當最后一位為 1時,表示轉(zhuǎn)移到 Thumb狀態(tài),如下圖所示。 CODE 32 ADR R0,Into_Thumb+1 BX R0 … CODE 16 Into_Thumb+1 … ADR R5,Back_to_ARM BX R5 … CODE 32 Back_to_ARM 2) ARM與 Thumb間的狀態(tài)轉(zhuǎn)換及函數(shù)的相調(diào)用 ?同一狀態(tài)下 ?在同一狀態(tài)下的子程序調(diào)用 BL function ?實現(xiàn)返回只需要從 LR恢復(fù) PC: MOV PC, LR ? ARM/Thumb之間的函數(shù)調(diào)用: ?需要在 BX之前先保存好 LR, BX不能自動保存返回地址到 LR。 ?需要由 BX來切換狀態(tài),因為 BL不能完成狀態(tài)切換。 ?需要 用 “ BX LR”來返回,不能使用 “ MOV PC,LR”,返回時要仔細考慮保存在 LR中最低位的內(nèi)容是否正確。 ARM指令程序 GNU編譯環(huán)境下有較多不同點,主要是符號及偽操作的不同。 例 90:簡單的 ARM指令程序 AREA ARMex,CODE,READONLY ENTRY start MOV R0,10 MOV R1,3 ADD R0,R0,R1 stop MOV R0,amp。18 LDR R1,=amp。20226 SWI 0x123456 END 例 90:數(shù)據(jù)塊復(fù)制 AREA Block,CODE,READONLY NUM EQU 20 ENTRY start LDR R0,=src LDR R1,=dst MOV R2,NUM MOV SP,amp。400 Bcopy MOVS R3,R2,LSR 3 BEQ Cword STMFD SP!,{R4R11} Ocopy LDMIA R0 !,{R4R11} STMIA R1 !,{R4R11} SUBS R3,R3,1 BNE Ocopy LDMFD SP!,{R4R11} Cword ANDS R2,R2,7 BEQ stop Wcopy LDR R3,[R0],4 STR R3,[R1],4 SUBS R2,R2,1 BNE Wcopy stop MOV R0,amp。18 LDR R1,=amp。20226 SWI 0x123456 AREA Bdata,DATA,READWRITE src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END 例 91:利用跳轉(zhuǎn)表實現(xiàn)程序的跳轉(zhuǎn) AREA Jump,CODE,READONLY NUM EQU 2 ENTRY Start MOV R0,0 MOV R1,3 MOV R2,2 BL Func Stop MOV R0,amp。18 LDR R1,=amp。20226 SWI 0x123456 Func CMP R0,NUM MOVHS PC,LR ADR R3,JTable LDR PC,[R3,R0,LSL 2] JTable DCD DoAdd DCD DoSub DoAdd ADD R0,R1,R2 MOV PC,LR DoSub SUB R0,R1,R2 MOV PC,LR END 嵌入式 C語言程序設(shè)計基礎(chǔ) C語言“預(yù)處理偽指令”在嵌入式程序 設(shè)計中的應(yīng)用 嵌入式程序設(shè)計中的函數(shù)及函數(shù)庫 嵌入式程序設(shè)計中常用的 C語言語句 嵌入式程序設(shè)計中 C語言的變量、數(shù) 組、結(jié)構(gòu)、聯(lián)合 ?符合 C語言基本語法,面向嵌入式應(yīng)用 “預(yù)處理偽指令”在嵌入式程序設(shè)計中的應(yīng)用 ?“預(yù)處理命令 ” 改進程序設(shè)計的環(huán)境 , 提高編程效率 , 一般以 號打頭 , 分為以下三種 : 文件包含 宏定義 條件編譯 ?將頭文件包含到程序中 。 ?頭文件中定義的內(nèi)容包括符號常量、復(fù)合變量原型、用戶定義的變量類型原型和函數(shù)的原型說明等。 ?編譯器編譯預(yù)處理時用文件包含的正文內(nèi)容替換到實際程序中。 ?文件包含偽指令的格式 include頭文件名 .h ; 標準頭文件 include“頭文件名 .h” ;自定義頭文件 include 宏標識符 如: include”” include ..\inc\ include ..\inc\ include ..\inc\ include ..\inc\ include include include include include 2. 宏定義 ?宏定義偽指令分為:簡單宏 、 參數(shù)宏 、 條件宏 、 預(yù)定義宏及宏釋放 。 簡單宏 : define宏標識符 宏體 參數(shù)宏: define宏標識符 ( 形式參數(shù) ) 宏體 條件宏定義: ifdef 宏標識符 ifndef 宏標識符 undef 宏標識符 define 宏標識符 宏體 define 宏標識符 宏體 else else undef 宏標識符 define 宏標識符 宏體 define 宏標識符 宏體 endif endif define STACKSIZE 0xa00 define rBWSCON (*(volatile unsigned *)0x48000000) //Bus width amp。 wait status define rBANKCON0 (*(volatile unsigned *)0x48000004) //Boot ROM control define rBANKCON1 (*(volatile unsigned *)0x48000008) //BANK1 control define rBANKCON2 (*(volatile unsigned *)0x4800000c) define rBANKCON3 (*(volatile unsigned *)0x48000010) //BANK3 control define rBANKCON4 (*(volatile unsigned *)0x48000014) //BANK4 control define rBANKCON5 (*(volatile unsigned *)0x48000018) //BANK5 control define rBANKCON6 (*(volatile unsigned *)0x4800001c) //BANK6 control define rBANKCON7 (*(volatile unsigned *)0x48000020) ifdef __BIG_ENDIAN define rUTXH0 (*(volatile unsigned char *)0x50000023) //UART 0 Transmission Hold define rURXH0 (*(volatile unsigned char *)0x50000027) //UART 0 Receive buffer define rUTXH1
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1