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

正文內(nèi)容

第3章程序設(shè)計(jì)基礎(chǔ)(參考版)

2025-07-23 11:01本頁(yè)面
  

【正文】 C函數(shù)的第一個(gè)參數(shù)(最左邊的參數(shù))用 r0傳遞,后面的參數(shù)依次用 r r2等來(lái)傳遞。 ARM7 寄存器名字如表 31所示。 所有的尋址都是 32位地址的方式,因此程序模塊間可以很容易的共享變量和數(shù)據(jù)。 內(nèi)存模式 在 uClinux環(huán)境下,內(nèi)存模式為平模式,即整個(gè)內(nèi)存空間最大為 4GB。 ( 4) C語(yǔ)言模塊調(diào)用匯編模塊中的函數(shù) 該函數(shù)名在匯編程序中必須是全局的符號(hào),即必須用 .global聲明,然后在C語(yǔ)言中申明該函數(shù)的原型,最后在使用時(shí)與一般的 C函數(shù)一樣。 注意: C語(yǔ)言中的變量名在匯編中不用加下劃線。 ( 2)匯編模塊調(diào)用 C語(yǔ)言模塊中的函數(shù) 匯編模塊調(diào)用 C語(yǔ)言模塊時(shí),不同芯片傳遞參數(shù)的方式有差別,詳細(xì)見 。 方法如下: .global symbol 在本模塊中要使用其他模塊中的全局符號(hào),可以用 .extern symbol的方式聲明,但也可以不用聲明在匯編時(shí)自動(dòng)認(rèn)為它是其它模塊中的全局符號(hào)。 例如: .macro sum from=0, to=5 .long \from .if \to \from sum ―(\from+1)‖,\to .endif .endm 應(yīng)用: sum, 5 等價(jià)于 .long 0 …… .long 5 條件判斷可以嵌套使用, ifelseendif遵循最近匹配的原則。 ? .else 表示與前面的 if語(yǔ)句的條件相反。 ? .ifdef symbol 如果符號(hào)被定義則編譯后面的語(yǔ)句,否則后面的語(yǔ)句被忽略。宏定義中的參數(shù)還可以有缺省值,如: .macro test p1=0x100 p2 .long \p1 .long \p2 .endm 應(yīng)用: test , 2 等價(jià)于 .long 0x100 .long 2 3. 重復(fù)塊和源文件的嵌入 (1) 重復(fù)塊 定義: .rept count contents .endr 例如: .rept 2 .long 0x12908 .endr 等價(jià)于: .long 0x12908 .long 0x12908 (2) 源文件的嵌入 在一個(gè)匯編文件中可以嵌入其它匯編文件,例如匯編頭文件等。 2. 宏定義與宏調(diào)用 宏定義: .macro macro_name param1 ,param2, …..paramN .macro body .endm 例如:(使用 ARM的匯編指令集說(shuō)明) .macro ROMSEC_patova TTPA, pa_start, va_start, tmp, ic ldr \tmp, =APFIELD_ROM add \TTPA,\TTPA,\va_start,LSR 18 add \tmp, \tmp, \pa_start 20: str \tmp, [\TTPA], 4 add \tmp, \tmp, 0x10000 subs \ic, \ic, 1 bne 20b .endm 例如: .macro rept3 .long 0x9000000 .long 0x9000000 .long 0x9000000 .endm 應(yīng)用: .data rept3 等價(jià)于 .data .long 0x9000000 .long 0x9000000 .long 0x9000000 當(dāng)宏定義有參數(shù)時(shí),在參數(shù)前面添加前綴“ \‖ 。 (2) 過(guò)程(函數(shù))的定義 過(guò)程的結(jié)構(gòu)如下: 過(guò)程名: 過(guò)程體 返回語(yǔ)句 例如(用 ARM的匯編指令舉例說(shuō)明): .align 2 .globl uart1_sendch .type uart1_sendch,function uart1_sendch: ldr r2,=SYSFLG 1: ldr r1,[r2] tst r1,UTXFF1 bne 1b ldr r2,=UARTDR1 strb r0,[r2] mov pc,lr 一般情況下, .type 和 .align聲明可以缺省。 在匯編系統(tǒng)中有預(yù)定義的程序結(jié)構(gòu)語(yǔ)句,用戶也可以自己定義一些程序結(jié)構(gòu)段(詳見 .section的說(shuō)明)。 ( 4)一般執(zhí)行語(yǔ)句 不同的芯片有不同指令集,見相關(guān)的指令手冊(cè)。 (3) 列表控制語(yǔ)句 ① .title ―heading‖ 在匯編列表中將“ heading―作為標(biāo)題。 ? 條件匯編語(yǔ)句用于說(shuō)明匯編某部分語(yǔ)句時(shí)的條件,滿足條件則編譯 ,否則跳過(guò)這部分不予編譯 . (2) 數(shù)據(jù)語(yǔ)句 ? 一字節(jié)數(shù)據(jù)定義語(yǔ)句 語(yǔ)法: .byte expressions 例子: .byte 0x89 ,0x45, 56, ?K , ?M , 023, 0B101011 ? 兩字節(jié)數(shù)據(jù)定義語(yǔ)句 語(yǔ)法: .short expressions 例子: .short 0x6789 ,0b101110111 ? 四字節(jié)數(shù)據(jù)定義語(yǔ)句 語(yǔ)法: .long expressions 例子: .long 0x78896676 , 02356243563456 ? 八字節(jié)數(shù)據(jù)定義 語(yǔ)法: .quad expressions 例子: .quad 0x1122334455667788 ? 單個(gè)字串定義 語(yǔ)法: .string ― string‖ 例子: .string ―this is an example‖ ? 多個(gè)字串 1 語(yǔ)法: .ascii ―string‖….. 例子: .ascii ―string1‖ ,―string2‖,―string3‖ string1,string2,string3字串間是連續(xù)的。 ? 數(shù)據(jù)定義語(yǔ)句用于描述數(shù)據(jù)和給數(shù)據(jù)賦初值 . ? 列表控制語(yǔ)句用于說(shuō)明源程序的格式要求。 說(shuō)明性語(yǔ)句 由偽操作符定義,它用于用戶以源程序方式和匯編程序通信。 宏語(yǔ)句 由偽操作符定義,包括宏定義、宏調(diào)用及宏擴(kuò)展語(yǔ)句。 執(zhí)行性語(yǔ)句 是在編譯后有目標(biāo)程序與之對(duì)應(yīng),按其編譯后目標(biāo)程序的對(duì)應(yīng)情況又可以分為: 一般執(zhí)行性語(yǔ)句 和 宏語(yǔ)句 。 ^ ! + (7) 注釋符號(hào) 不同芯片的匯編程序中,注釋的符號(hào)有所不同,ARM以“ ‖開頭的程序行是注釋行。 (6) 表達(dá)式 在匯編程序中可以使用表達(dá)式,在表達(dá)式中可以使用常數(shù)和數(shù)值。J, 39。 標(biāo)號(hào)在最終的絕對(duì)定位的代碼中表示所在處的地址,因此在匯編中的標(biāo)號(hào)可以在C/C++程序中當(dāng)作變量或者函數(shù)來(lái)使用。 在引用時(shí),使用方法如下( N代表 0 ~ 9的數(shù)字): Nf ——在引用處的地方向前(程序地址增長(zhǎng)的方向)的 N標(biāo)號(hào)。 ① 標(biāo)號(hào) 標(biāo)號(hào)只能由 a ~ z 、 A ~ Z、0 ~ .、 _等字符組成,標(biāo)號(hào)的長(zhǎng)度不受限制 ,大小寫字母有區(qū)別。偽操作符是由匯編系統(tǒng)約定的名字,不用定義就能實(shí)現(xiàn)。 偽操作的功能由匯編系統(tǒng)實(shí)現(xiàn) ,沒(méi)有目標(biāo)代碼對(duì)應(yīng)。 (2) 約定的名字 包括寄存器名、指令名字和偽操作符。 { } % _ ― \ | ^ ? !。 匯編語(yǔ)言 1. 基本元素 (1) 字符集 匯編中使用下列字符組成源程序的各種語(yǔ)法元素:大寫字母 A ~ Z;小寫字母 a ~ z;數(shù)字 0 ~ 9;符號(hào) + * / = [ ] ( ) 。 偽指令在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,這些偽指令僅在匯編過(guò)程中起作用,一旦匯編結(jié)束,偽指令的使命就完成了。 ?如果要保留空格或注釋,可以在需要保留部分開始加入# APP,結(jié)束的地方加# NO_APP。 armelfgcc可以對(duì)后綴為 .S匯編程序進(jìn)行其他形式的預(yù)處理。 armelfas不執(zhí)行 armelfgcc預(yù)處理程序能完成的部分,如宏預(yù)處理和包含文件預(yù)處理。 例如 :編譯 : armelfas –I/include –o 5.如何取消警告信息 W 加選項(xiàng) W以后,運(yùn)行 armelfas就不輸出警告信息。 ? 可以通過(guò) o選項(xiàng)指定輸出文件名字,通常都以 .o為后綴。 ?缺省時(shí)顯示的信息輸出到屏幕,也可用重定向輸出到文件。 dhlns為其子選項(xiàng),分別表示: ? d ——不顯示調(diào)試信息 ? h ——顯示源碼信息 ? l ——顯示匯編列表 ? n ——不進(jìn)行格式處理 ? s ——顯示符號(hào)列表 ?在不添加子選項(xiàng)時(shí), a表示顯示源碼信息,顯示匯編列表,顯示符號(hào)列表。 I可以被使用多次以添加多個(gè)目錄,當(dāng)前工作目錄將最先被搜索,然后從左到右依次搜索 I指定的目錄。 可以通過(guò) o選項(xiàng)指定輸出文件名字,通常都以 .o為后綴。 1.命令格式 armelfas [option…] [asmfile…] 在命令 armelfas后面跟一個(gè)或多個(gè)選項(xiàng),以及該選項(xiàng)的子選項(xiàng),選項(xiàng)間用空格隔開,然后跟匯編源文件名。 實(shí)際上使用的 隱含規(guī)則 如下所示: ? 對(duì) *.c*.o的 隱含規(guī)則 為: %.o: %.c ${CC} ${CFLAGS} $ o $ ? 對(duì)于 *.s*.o的 隱含規(guī)則 為: %.o: %.s ${AS} ${ASFLAGS} $ o $ 交叉匯編器 armelfas 概述 armelfas 將匯編語(yǔ)言程序轉(zhuǎn)換為 ELF( Executable and Linking Format執(zhí)行時(shí)鏈接文件格式)格式的可重定位目標(biāo)代碼,這些目標(biāo)代碼同其它目標(biāo)模塊或庫(kù)易于定位和鏈接。 $(wildcard pattern...)表示與 pattern相匹配的所有文件。 ( 2) $(patsubst pattern,replacement,text)按模式 pattern替換 text中的字串。 8. make里的常用函數(shù) 函數(shù)的使用方式有兩種: 1. $(function arguments) 2. ${function arguments} 常用的函數(shù)有: ( 1) $( subst from,to,text)將字text中的 from子串替換為 to子串。 VarName表示變量名。 例如: var1 = hello first var2 = ${var1} var1 = hello second test_echo: echo ${var2} 執(zhí)行的結(jié)果是顯示: hello second var1 = hello first var2 := ${var1} var1 = hello second test_echo: echo ${var2} 執(zhí)行的結(jié)果是顯示: hello first 例如: var1 = hello first var1 = ${var1} and second echo_test: echo ${var1} 會(huì)陷入死循環(huán)中。 5. 如何定義變量 為了簡(jiǎn)化 makefile以及減少不必要的錯(cuò)誤,可以用變量的形式來(lái)代表目標(biāo)文件名或字符串,在需要使用時(shí)直接調(diào)用變量。 vpath %.c //c/demo vpath %.h //c/demo/head vpath %.c ——表示清除所有 vpath對(duì)%.c設(shè)置的搜索目錄 vpath ——表示清除所有以前用 vpath設(shè)置的搜索目錄 這兩種方式的效果是一樣的,但是后一種要明確一些。 例如: : //c/demo/中, //c/demo/head/中,則可以給 VPATH變量賦值: VPATH : = //c/demo //c/demo/head 或者 VPATH : = //c/demo: //c/demo/head 也可以使用指令 vpath,與 VAPTH在使用上的 區(qū)別 是 :vpath可以給不同類文件指定不同的搜索目錄。 make首先搜索當(dāng)前目錄,如果未找到依賴的文件, make將按照 VPATH中給的目錄依次搜索。只是第一種方式?jīng)]指明目標(biāo)名,第二種方式指明了目標(biāo)名。在執(zhí)行過(guò)程中將自動(dòng)更新他們所依賴的文件。 3. make調(diào)用 makefile中的規(guī)則 在默認(rèn)情況下, make運(yùn)行不是以“ .‖開頭的第一條規(guī)則。smcinit依賴于 ,而 , . ? 各目標(biāo)分別由命令 armelfar –ruvs –o ; armelfgcc –c –o ;armelfgcc –c –o 。如果某一行過(guò)長(zhǎng)可以
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1