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

正文內(nèi)容

第9章arm程序設(shè)計(jì)(文件)

2024-11-17 15:00 上一頁面

下一頁面
 

【正文】 art LDR R0, =data1 。 R0中保存 data2的首地址 ? LDR R3, [R0] 。 高 32位相加,并使用標(biāo)志位 C ? LDR R0,=result 。 R0中保存 data1 ? LDR R1, data2 。 將 R1的值賦給 R0 ? Save STR R0, result 。 運(yùn)算 ? CMP r0, num 。 查跳轉(zhuǎn)表,確定跳轉(zhuǎn)地址 ? JumpTable ? DCD DoAdd ? DCD DoSub1 ? DCD DoSub2 ? DoAdd …… ? DoSub1 …… ? DoSub2 …… ? Outofrange …… ? Save …… ? END 跳轉(zhuǎn)表 跳轉(zhuǎn)后執(zhí)行 程序跳轉(zhuǎn)示意圖 ?LDR pc, [r3,r0,LSL2] 。 外循環(huán)起始 ? LDR r1,=src ? inner 。 初始化待排序數(shù)組 ? len EQU 7*4 。 標(biāo)識程序入口 ? CODE32 ? ARM_CODE ? LDR SP,=0X30003F00 。 聲明文字池 ? CODE16 ? THUMB_CODE ? LDR R0,=N 。 將 N的值復(fù)制到 R2,并影響相應(yīng)條件標(biāo)志 ? …… ? SUN_L1 ? ADD R0,R1 ? …… ? BHS SUM_END ? …… ? B SUN_L1 ? SUM_ERR ? MOV R0,0 ? SUM_END ? MOV R8,R0 。 2.初始化部分與主應(yīng)用程序部分的銜接 當(dāng)所有的系統(tǒng)初始化工作完成之后,就需要把程序流程轉(zhuǎn)入到應(yīng)用程序。 ARM基本 的 ATPCS規(guī)定了 寄存器 使用、 數(shù)據(jù)棧 使用以及 參數(shù) 傳遞這三方面的基本規(guī)則; 而派生的其他幾種特定的 ATPCS則 是在 此 基礎(chǔ)上再添加其他規(guī)則 (如支持 子程序可重入性 、 數(shù)據(jù)棧 界限 檢查 等) 而形成 的。 ②寄存器 R4~R11( V1~V8 ) 用做子程序內(nèi)的局部變量保存。SP在子程序進(jìn)入和退出時(shí)的值必須相等。 ATPCS中的寄存器使用規(guī)則 寄存器 別名 用 法 R0~R3 A1~A4 入口參數(shù) / 返回值 / 臨時(shí) ( scratch)寄存器 R4~R11 V1~V8 子程序局部變量寄存器,其中: ? R7/V4也作為 Thumb狀態(tài)工作寄存器 WR; ?R9/V6在 支持可讀寫段位置無關(guān)的 ATPCS中用作靜態(tài)基址寄存器 SB; ; ; R12 IP 臨時(shí)( scratch)寄存器,用于過程鏈接膠合代碼中(如連接器提供的 veneers代碼協(xié)助實(shí)現(xiàn)長跳轉(zhuǎn)時(shí)會使用并修改其值) R13 SP 堆棧指針,不能用于其他用途 R14 LR 連接寄存器 R15 PC 程序計(jì)數(shù)器,不能用于其他用途 基本 ATPCS (2):數(shù)據(jù)棧使用規(guī)則 ARM的數(shù)據(jù)??蔀?FD(Full Descending), ED(Empty Descending), FA(Full Ascending)或 EA(Empty Ascending) ,但 ATPCS規(guī)定數(shù)據(jù)棧為 FD類型,且 8字節(jié)對齊 的。 ? 已占用的數(shù)據(jù)棧 (used stack)指?;泛?SP之間的區(qū)域,其中包括棧指針對應(yīng)的內(nèi)存單元。 56/52 C程序調(diào)用匯編函數(shù) 1. 匯編程序的設(shè)置要遵循 ATPCS 規(guī)則,保證程序調(diào)用時(shí) 參數(shù)、寄存器和堆棧 的正確使用。 IMPORT 偽指令聲明將要調(diào)用的 C 程序函數(shù)。 R1中的值為源數(shù)據(jù)塊的首地址 STRB R2, [R0], 1 。 char deststr[] = Second string destination。 將 斷點(diǎn) 存入堆棧 MOV R0,2 。 (R3)=i*5 STR R3,[SP, 4] 。 調(diào)整數(shù)據(jù)棧指針,準(zhǔn)備返回 LDR PC, [SP, 4] 。 內(nèi)嵌匯編中使用物理寄存器的注意事項(xiàng) 1 一般不要直接指定 物理寄存器 存放數(shù)據(jù) , 而應(yīng)該使用 C變量 ,讓編譯器自動(dòng)分配寄存器。如果編譯器 無法 分配 使用 合適的寄存器,將會報(bào)告 寄存器沖突錯(cuò)誤 。 } int example1(int x) /*正確 { _asm { ADD x, x, 1 } return x。但其值被視為無符號數(shù);若為帶符號數(shù)則用戶需要自己處理與符號有關(guān)的操作; ?若內(nèi)嵌匯編指令中的 C表達(dá)式包含有逗號,則該表達(dá)式應(yīng)該包含在括號中; 如: _asm{ADD x, y, (f(), z)} 。實(shí)現(xiàn) res=i+j ? } ? return res。 ? } 求和 子程序 調(diào)用 子程序(注意書上漏?。? 例 RVDS上的運(yùn)行結(jié)果 作業(yè) ? 必做: 、 、 ? 選做: 、 、 、 ? 注意,除題目明確要求外,所有的程序均采用匯編語言編寫 航空航天學(xué)院 清水河,研究院大樓 108 陳 敏 Email: TELE: 02861830626 第 9章 結(jié)束 。 ? a = add(2,3)?!?表示十六進(jìn)制數(shù); ?不支持 內(nèi)存分配 偽指令,可通過定義變量由編譯器自動(dòng)完成分配; ?不支持 BX指令,并且只有 B指令可以使用 C程序標(biāo)號 ,而 BL不行; ?不能向 PC賦值,程序跳轉(zhuǎn)只能使用 B或 BL指令; ?內(nèi)嵌的 SWI和 BL指令除了正常的操作數(shù)外,可增加幾個(gè)可選的寄存器列表用于參數(shù)傳送; ? …… 內(nèi)嵌匯編指令的應(yīng)用舉例:兩個(gè)數(shù)相加 ? include ? int add(int i, int j) ? { ? int res。因此左邊代碼段并不能完成對 x的加 1操作。 盡管有時(shí)寄存器明顯對應(yīng)某個(gè)變量,但也不能直接使用寄存器代替變量。因此左邊代碼段中 R0存放的數(shù)據(jù)在執(zhí)行 ADD指令前已被修改。 在 ARM C語言程序中使用關(guān)鍵詞 _asm來標(biāo)識一段匯編指令程序,其格式如下: _asm { instruction [。 (R3)=i*4 BL g 。 (R1)=i*2 ADD R2, R1, R0 。 //調(diào)用匯編函數(shù) strcopy …… } 數(shù)據(jù)塊復(fù)制 20201129 58/52 例 RVDS上的運(yùn)行結(jié)果 int g(int a, int b, int c, int d, int e) { return a + b + c + d + e } 在匯編函數(shù) f中調(diào)用 C函數(shù) g( ),以實(shí)現(xiàn)下面的功能: int f(int i){ return g(i, 2*i, 3*i, 4*i, 5*i)} EXPORT f AREA f, CODE, READONLY ENTRY IMPORT g 。 未復(fù)制完,循環(huán)繼續(xù)復(fù)制 MOV PC, LR 。 AREA SCopy, CODE, READONLY EXPORT strcopy 。 C 語言程序中使用 extern關(guān)鍵字聲明要調(diào)用的匯編子程序?yàn)橥獠亢瘮?shù)。 對于匯編代碼來說,必須保證在進(jìn)入該匯編代碼后,直到調(diào)用外部代碼之間,棧指針變化為偶數(shù)個(gè)字; 應(yīng)使用 PRESERVE8偽指令告訴連接器,本匯編代碼是 8字節(jié)對齊的; 應(yīng)使用 FRAME偽指令描述數(shù)據(jù)幀 ; 基本 ATPCS(3):參數(shù)傳遞規(guī)則 子程序入口參數(shù)傳遞規(guī)則 參數(shù)不超過 4個(gè)時(shí)使用寄存器 R0~R3,依次將各字?jǐn)?shù)據(jù)傳送到 寄存器; 參數(shù)超過 4個(gè)時(shí)將剩余的字?jǐn)?shù)據(jù)傳送到 數(shù)據(jù)棧, 入棧的順序與參數(shù)順序相反,即最后一個(gè)參數(shù)先入棧。 ? 數(shù)據(jù)棧 基址 (stack base)指向數(shù)據(jù)棧的最高地址。如果子程序中保存了返回地址,則 R14可用于其他用途。( Thumb程序通常只能使用 R4~R7) ③ 寄存器 R12( IP) 用作臨時(shí) ( scratch) 指針。 基本 ATPCS (1):寄存器使用規(guī)則 ①寄存器 R0~R3( A1~A4 ) 用做子程序參數(shù)傳遞。 ? 匯編程序和 C/C++程序之間的相互 調(diào)用 ( ATPCS) ? 在 C/C++代碼中 嵌入 匯編指令 51/52 基于 ARM/Thumb指令集過程調(diào)用的規(guī)則 ATPCS PCS用于保證 使用不同
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1