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

正文內容

第9章arm程序設計-文庫吧資料

2024-11-01 15:00本頁面
  

【正文】 。 查跳轉表,確定跳轉地址 ? JumpTable ? DCD DoAdd ? DCD DoSub1 ? DCD DoSub2 ? DoAdd …… ? DoSub1 …… ? DoSub2 …… ? Outofrange …… ? Save …… ? END 跳轉表 跳轉后執(zhí)行 程序跳轉示意圖 ?LDR pc, [r3,r0,LSL2] 。 參數超出跳轉表范圍直接賦值 R0=0xFF ? ADR r3, JumpTable 。 運算 ? CMP r0, num 。 定義跳轉表大小 ? ENTRY ? start ? MOV r0, 1 。 將 R1的值賦給 R0 ? Save STR R0, result 。 比較 R1和 R0中的值的大小 ? BHI save 。 R0中保存 data1 ? LDR R1, data2 。 保存結果的高位 ? STR R6,[R0, 4] 。 高 32位相加,并使用標志位 C ? LDR R0,=result 。 用寄存器間接尋址方式讀數據 1的低 32位到 R4 ? ADDS R6,R2,R4 。 R0中保存 data2的首地址 ? LDR R3, [R0] 。 用寄存器間接尋址方式讀數據 1的高 32位到 R1 ? LDR R2,[R0,4] 。 20201129 31/52 ARM匯編語言程序結構示例 ? GET ? GET ? …… ? AREA Init, CODE, READONLY ? ENTRY ? spr ? MUL r1, r0, r0 …… ? AREA Data1, DATA, READWRITE ? num DCD 10 ? …… ? END 引用其它源文件 代碼段 數據段 定義代碼段 指定程序入口 程序主體 ARM匯編程序設計實例 ? 重點介紹如何用 ARM匯編語言實現: –順序結構 –分支結構 –循環(huán)結構 –子程序調用與返回 順序結構 兩個 64位數相加 ? AREA add64, CODE, READONLY ? ENTRY ? start LDR R0, =data1 。 ? 零個或多個包含初始化數據的數據段,數據段的屬性默認為 READWRITE。當程序較長時,可以分割為多個代碼段和數據段,多個段在程序編譯連接時最終形成一個可執(zhí)行的映象文件。 20201129 30/52 ARM匯編語言程序結構 ARM(Thumb)匯編語言程序中,以 程序段(代碼段和數據段)為單位組織代碼。 ① BASE:X 返回基于寄存器的表達式 X中寄存器的編號。整數 Y表示要返回的字符個數 ⑥ X:CC:Y 將字符串 Y連接到字符串 X的后面形成一個新字符串。整數 Y表示要返回的字符個數 。 對于數字表達式, STR運算得到一個以十六進制字符組成的字符串; 對于邏輯表達式, STR運算得到字符串“ T”或“ F”。 ② CHR:M 將 0~255之間的整數 M轉換為一個字符。編譯器支持的字符串最大長度為 512字節(jié) 。 X:ROL:Y X循環(huán)左移 Y位 X:ROR:Y X循環(huán)右移 Y位 X:SHL:Y X左移 Y位 X:SHR:Y X右移 Y位 X:AND:Y 按位邏輯與 X:OR:Y 按位邏輯或 :NOT:Y 按位邏輯非 X:EOR:Y 按位邏輯異或 X = Y X等于 Y X Y X大于 Y X Y X小于 Y X = Y X大于等于 Y X = Y X小于等于 Y X /= Y X不等于 Y X Y X不等于 Y X:LAND:Y 邏輯與 X:LOR:Y 邏輯或 :LNOT:Y 邏輯非 X:LEOR:Y 邏輯異或 28/52 注意:這些運算在匯編過程中計算,機器碼中出現的已經是表達式的值了。 算術 /邏輯表達式及運算符 算術 /邏輯表達式由 數字 /邏輯變量、數字 /邏輯常量、運算符和括號 構成。 ? 常用表達式 有 數字表達式 、 邏輯表達式 和 字符串表達式 ,其運算次序遵循如下優(yōu)先級。 S2的值為 This is a Test!” 26/52 常用運算符和表達式 ? 在匯編語言程序設計中,經常會使用各種表達式。 LCLS S1 。 ? 如果邏輯變量前加“ $” ,編譯器會將該邏輯變量代換為其 值 (真或假 )。 ? 可用 GBLA, GBLL和 GBLS偽指令聲明全局變量,用 LCLA,LCLL和 LCLS偽指令聲明局部變量,并可使用 SETA, SETL和SETS對其進行初始化。 ? 字符串常量為一個固定的字符串,一般用于程序運行時的信息提示。 ? 數字常量一般為 32位的整數,用“ ”標識。盡管符號的命名由編程者決定,但并不是任意的,必須遵循以下的約定: – ? 符號區(qū)分大小寫,同名的大小寫字母符號會被編譯器認為是兩個不同的符號; – ? 局部標號可以以數字開頭,其他標號均不得以數字開頭; – ? 符號在其作用范圍內必須唯一; – ? 自定義的符號名不能與系統(tǒng)的保留字相同; – ? 符號名不應與指令或偽指令同名。 通知編譯器此處插入目標文件 C:\ …… END 編寫匯編源程序時,常將一個源文件專門用于定義 宏指令( MICRO)、 符號常量 ( EQU), 結構化數據類型 ( MAP和FIELD),然后再用 GET偽指令將這個源文件包含到其他源文件中 。 通知編譯器此處插入源文件 C:\ INCBIN 。 ?INCBIN偽指令用于將一個 目標文件或數據文件 包含到當前的源文件中 被包含的文件不作任何變動,編譯器從其后開始繼續(xù) 處理。源文件 2需要引用在別處定義的標號 Main …… END 22/52 INCLUDE(或 GET)、 INCBIN偽指令 INCLUDE 文件名 INCBIN 文件名 ?INCLUDE(或 GET)偽指令用于將一個 源文件 包含到當前的源文件中。 AREA Init1, CODE, READONLY EXPORT Main 。使用 EXTERN則標號未被引用時不會被加入到當前源文件的符號表中。若該標號被 B或 BL指令引用,則將 B或 BL指令置為 NOP操作。 ?IMPORT用于通知編譯器當前源文件可能要引用其他源文件中定義的標號。 定義標號 Addr的值為 0x55,且該處為 32位的 ARM指令 20201129 21/52 EXPORT(或 GLOBAL) 標號 {[WEAK]} IMPORT(或 EXTERN) 標號 {[WEAK]} ? EXPORT用于聲明一個全局標號,該標號可在其他文件中引用。 Test EQU 50 。其中 EQU可用 “ *” 代替。 通知編譯器其后為 16位的 Thumb指令 NEXT LDR R3, = 0x3FF …… END 。 將跳轉地址放入寄存器 R0 BX R0 。 AREA Init, CODE, READONLY …… CODE32 。為 8字節(jié)對齊 指令序列 END 20201129 19/52 CODE1 CODE32偽指令 在 ARM指令和 Thumb指令混合編程的代碼里,該偽指令用于通知編譯器其后的指令序列為 16位還是 32位。 AREA Init, CODE, READONLY, ALIEN = 3 。若未指定表達式則將當前位置對齊到下一個字的位置。通知編譯器源程序結束 18/52 ALIGN偽指令 ALIGN {表達式 {,偏移量 }} ALIGN偽指令可通過添加填充字節(jié)的方式,使當前位置滿足一定的對其方式。代碼段 Init屬性為只讀 ENTRY 。 ?COMMON:定義一個通用段,各源文件中同名 的 COMMON段共享同一段存儲單元。 ?ALIGN 表達式:表達式取值為 0~31。 ?READONLY:指定本段為只讀屬性,代碼段默認為 READONLY。 ,多個屬性關鍵字以逗號分隔: ?CODE:用于定義代碼段。宏調用 ,其中宏標號為 abc,參數為 subr1, de …… 。 參數 $p1為一個子程序的名稱 BGT $ …… ADR $p2 MEND 。 $ …… BGE $ $ 指令 。 宏定義開始 $lable xma
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1