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

正文內(nèi)容

嵌入式lpc2103教程-第五章基于arm的嵌入式程序設(shè)計(編輯修改稿)

2025-05-11 01:05 本頁面
 

【文章內(nèi)容簡介】 似于C語言中的# define, 可用 “ *” 代替 EQU。 ? 如果表達式為 32位的常量 , 可以指定表達式的數(shù)據(jù)類型 , 類型域可以有以下三種:CODE16/CODE32/DATA X EQU 10 Y EQU label+100 Z EQU 0x10,CODE32 reg EQU 0xE01FC080 3) AREA AREA sectionname {,attr}{,attr}? 說明:定義一個代碼段 、 數(shù)據(jù)段或者特定屬性的段 。 如果段名以數(shù)字開頭 , 那么該段名需用 “ |”字符括起來 , 如 |7wolf|, 用 C的編譯器產(chǎn)生的代碼一般也用 “ |” 括起來 。 屬性表示該段相關(guān)屬性 , 多個屬性用 , 分隔 。 CODE 代碼段; DATA 數(shù)據(jù)段; READONLY 只讀 , 代碼段默認(rèn); READWRITE 可讀寫 , 數(shù)據(jù)段默認(rèn); ALIGN=~31,以 2expression字節(jié)對齊 。 AREA ChangeState,CLDE,READONLY 4) ENTRY 說明:指定匯編程序的入口 。 一個程序可包含多個源文件 , 在一個源文件里最多只能有一個ENTRY或沒有 ENTRY。 在一個完整匯編程序中至少要有一個 ENTRY, 程序中也可以有多個 ,此時 , 程序的真正入口點可在鏈接時指定 。 AREA example CODE,READONLY ENTRY CODE32 START MOV R1,0x53 … END 5) END 說明:每一個源程序包含一個 END,表示結(jié)束。 6) ALIGN 添加補丁字節(jié)使當(dāng)前位置滿足一定對齊方式。 ALIGN {expr{,offset}} ?expr 可能取值為 2的 n次冪,如 8. ?默認(rèn)當(dāng)前位置對齊到下一個字邊界處。 例如: AREA cache,CODE,ALIGN=3; 8字節(jié)對齊 … MOV PC,LR … ALIGN 8 AREA SCopy,CODE,READONLY ENTRY MOV R1,0xFF000000 DCB 0X11 DCB 0X34 ALIGN 4,3 DCB 0X24 7) EXPORT/ GLOBAL EXPORT symbol {[WEAK]} 說明:在程序中聲明一個符號 (區(qū)分大小寫 ),其他文件中代碼可引用該符號 。 [,WEAK]聲明其他文件有同名的標(biāo)號 , 則該同名標(biāo)號優(yōu)先于該標(biāo)號被引用 。 例如: AREA Example, CODE,READONLY EXPORT fun fun ADD R0,R0,R1 8) IMPORT IMPORT 符號 [, WEAK] 說明:告訴編譯器這個符號 (區(qū)分大小寫 )要在當(dāng)前源文件中使用 , 是在其他的源文件中定義的 。 [, WEAK] 表示如果所有的源文件都沒有找到這個標(biāo)號 , 編譯器也不會提示錯誤信息 。 9) EXTERN EXTERN 符號 [,WEAK] 說明:告訴編譯器所使用的符號要在當(dāng)前源文件中引用 , 是在其他的源文件中定義的 。 與IMPORT不同的是 , 如果當(dāng)前源文件實際上沒有引用該符號 , 該符號就不會被加入到當(dāng)前文件的符號表中 。 10) GET/INCLUDE GET 文件名 說明:將一個源文件包含到當(dāng)前的源文件 、 當(dāng)前位置展開進行匯編處理 。 只能用于包含源文件 , 包含其他文件則需要使用 INCBIN偽指令 。 11) INCBIN INCBIN 文件名 說明:將一個數(shù)據(jù)文件或者目標(biāo)文件包含到當(dāng)前的源文件中 , 編譯時被包含的文件不作任何變動的存放在當(dāng)前文件中 , 編譯器從后面開始繼續(xù)處理 。 AREA Example, CODE,READONLY GET GET c:\project\ GET c:\windows project\。可有空格 12) RN 名稱 RN 表達式 說明:給一個寄存器定義一個別名 ,以便程序員記憶該寄存器的功能 。 COUNT RN 6 CHOOSE RN 9 13) ROUT [名稱 ] ROUT 說明:給一個局部變量定義作用范圍 。 局部變量作用范圍為當(dāng)前 ROUT和下一個 ROUT之間 。 routine ROUT。定義局部變量 … 1routine 。局部標(biāo)號 1 … BEQ %2routine … BGE %1routine 2routine 。局部標(biāo)號 1 … otherroutine ROUT GNU編譯環(huán)境下偽操作和宏指令 GNU編譯環(huán)境下的偽操作可分為以下幾類: 常量編譯控制偽操作 匯編程序代碼控制偽操作 宏及條件編譯控制偽操作 其他偽操作 常量編譯控制偽操作 偽操作 語法格式 作 用 .byte .byte expr {, expr} … 分配一段字節(jié)內(nèi)存單元 , 并用 expr初始化 。 .hword/.short .hword expr {, expr} … 分配一段半字內(nèi)存單元 , 并用 expr初始化 。 .ascii .ascii expr {, expr} … 定義字符串 expr( 非零結(jié)束符 ) 。 .asciz /.string .asciz expr {, expr} … 定義字符串 expr( 以 /0為結(jié)束符 ) 。 .float/.single .float expr {, expr} … 定義一個 32bit IEEE 浮點數(shù) expr。 .double .double expr {, expr} … 定義 64bit IEEE浮點數(shù) expr。 word/.long /.int .word expr {, expr} … 分配一段字內(nèi)存單元 , 并用 expr初始化 。 .fill .fill repeat {, size}{, value} 分配一段字節(jié)內(nèi)存單元 , 用 size長度 value填充 repeat次 。 .zero .zero size 分配一段字節(jié)內(nèi)存單元 , 并用 0填充內(nèi)存 。 .space/.skip .space size {, value} 分配一段內(nèi)存單元 , 用 value將內(nèi)存單元初始化 。 匯編程序代碼控制偽操作 偽操作 語法格式 作 用 .section .section expr 定義域中包含的段 。 .text .text {subsection} 將操作符開始的代碼編譯到代碼段或代碼段子段 。 .data .data {subsection} 將操作符開始的數(shù)據(jù)編譯到數(shù)據(jù)段或數(shù)據(jù)段子段 。 .bss .bss {subsection} 將變量存放到 .bss段或 .bss段的子段 。 .code 16/.thumb .code 16 .thumb 表明當(dāng)前匯編指令的指令集選擇 Thumb指令集 。 .code 32/.arm .code 32 .arm 表明當(dāng)前匯編指令的指令集選擇 ARM指令集 。 .end .end 標(biāo)記匯編文件的結(jié)束行 , 即標(biāo)號后的代碼不作處理 。 .include .include “filename” 將一個源文件包含到當(dāng)前源文件中 。 .align/.balign .align {alignment} {,fill} {, max} 通過添加填充字節(jié)使當(dāng)前位置滿足一定的對齊方式 。 宏及條件編譯控制偽操作 偽操作 語法格式 作 用 .macro 、 .exitm及 .endm .macro acroname{ parameter{ , parameter} … } … .endm .macro偽操作標(biāo)識宏定義的開始 , .endm標(biāo)識宏定義的結(jié)束 。 用 .macro及 .endm定義一段代碼 , 稱為宏定義體 。 .exitm偽操作用于提前退出宏 。 . ifdef, .else及 .endif .ifdef condition … .else … .endif 當(dāng)滿足某條件時對一組語句進行編譯 , 而當(dāng)條件不滿足時則編譯另一組語句 。 其中 else可以缺省 。 其他偽操作 偽操作 語法格式 作 用 .eject .eject 在匯編符號列表文件中插入一分頁符 。 .list .list 產(chǎn)生匯編列表 ( 從 .list 到 .nolist) 。 .nolist .nolist 表示匯編列表結(jié)束處 。 .title .title “heading” 使用 “ heading ”作為標(biāo)題 。 .sbttl .sbttl “heading” 使用 “ heading”作為子標(biāo)題 。 .lt .lt 在當(dāng)前段的當(dāng)前地址 ( 字對齊 ) 產(chǎn)生一個文字池 。 .req .req name, expr 為一個特定的寄存器定義名稱 。 .err .err 使編譯時產(chǎn)生錯誤報告 。 .print .print string 打印信息到標(biāo)準(zhǔn)輸出 。 .fail .fail expr 編譯匯編文件時產(chǎn)生警告 。 偽指令 語法格式 作 用 ADR ADR { cond} register, expr 將基于 PC或基于寄存器的地址值讀取到寄存器中 。 小范圍的地址讀取 。 ADRL ADRL{cond} register, expr 將基于 PC或基于寄存器的地址值讀取到寄存器中 。 中等范圍的地址讀取 。 LDR LDR {cond} reg, =[ expr | labelexpr] 將一個 32位的立即數(shù)或者一個地址值讀取到寄存器中 。 大范圍的地址讀取 。 NOP NOP 在匯編時將被替換成 ARM中的空操作 。 匯編時被替換成 ARM或 Thumb指令 1) ADR { cond} register, expr expr:基于 PC或寄存器的地址表達式,取值范圍: 地址非字對齊 ,255~255 地址字對齊 ,1020~1020 將基于 PC或寄存器的地址值讀取到寄存器中。 ADR偽指令被替換成一條合適的指令( ADD指令或 SUB指令)。如果不能用一條來實現(xiàn) ADR偽指令的功能,編譯器將報告錯誤。 ADR-小范圍的地址讀取偽指令 示例 : start MOV r0,10; PC=當(dāng)前指令地址 +8字節(jié) ADR r4,start ;本 ADR偽指令將被編譯器替換成 。 SUB r4,pc,0xc 2) ADRL ADRL { cond} register, expr 將基于 PC或基于寄存器的地址值 expr讀取到寄存器中。 被替換成 2條 ADD或 SUB ARM指令,中等范圍的地址讀取 。 expr:基于 PC或寄存器的地址表達式,取值: 地址非字對齊 ,64KB~64KB 地址字對齊 ,256KB~256KB 例如 : start MOV R0,10 ADR R4,start+60000 ADRL-中等范圍的地址讀取偽指令 示例 : start M
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1