arm怎樣進(jìn)行編程?arm簡(jiǎn)介及編程示例
ARM(Advanced RISC Machines)是微處理器行業(yè)的一家知名企業(yè),設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點(diǎn)。適用于多種領(lǐng)域,比如嵌入控制、消費(fèi)/教育類(lèi)多媒體、DSP和移動(dòng)式應(yīng)用等。ARM將其技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體、軟件和OEM廠商,每個(gè)廠商得到的都是一套獨(dú)一無(wú)二的ARM相關(guān)技術(shù)及服務(wù)。利用這種合伙關(guān)系,ARM很快成為許多全球性RISC標(biāo)準(zhǔn)的締造者。目前,總共有30家半導(dǎo)體公司與ARM簽訂了硬件技術(shù)使用許可協(xié)議,其中包括Intel、IBM、LG半導(dǎo)體、NEC、SONY、菲利浦和國(guó)民半導(dǎo)體這樣的大公司。至于軟件系統(tǒng)的合伙人,則包括微軟、升陽(yáng)和MRI等一系列知名公司。
在一個(gè)程序之前先要進(jìn)行聲明:1)聲明代碼段:用AREA指令定義一個(gè)段,說(shuō)明所定義段的相關(guān)屬性。(說(shuō)明段的名字,段的屬性)2) 聲明ARM指令:用CODE32或CODE16來(lái)聲明程序?yàn)?2位ARM指令或是16位Thumb指令。3) 聲明程序入口:用ENTRY指令標(biāo)識(shí)程序的入口點(diǎn)。注:這3個(gè)聲明缺一不可。在程序完成后要用END 指令聲明程序結(jié)束。每一個(gè)匯編程序段都必須有一條END指令,指示代碼段的結(jié)束。
標(biāo)號(hào)域 操作助記符域 操作數(shù)域 注釋域1. 標(biāo)號(hào)域(LABLE)1>標(biāo)號(hào)域用來(lái)表示指令的地址、變量、過(guò)程名、數(shù)據(jù)的地址和常量。2>標(biāo)號(hào)是可以自己起名的標(biāo)識(shí)符,語(yǔ)句標(biāo)號(hào)可以是大小寫(xiě)字母混合,通常以字母開(kāi)頭,由字母、數(shù)字、下劃線(xiàn)等組成。3> 語(yǔ)句標(biāo)號(hào)不能與寄存器名、指令助記符、偽指令(操作)助記符、變量名同名。4> 語(yǔ)句標(biāo)號(hào)必須在一行的開(kāi)頭書(shū)寫(xiě),不能留空格。2. 操作助記符域(OPERATION)1>操作助記符域可以為指令、偽操作、宏指令或偽指令的助記符。2> ARM匯編器對(duì)大小寫(xiě)敏感,在匯編語(yǔ)言程序設(shè)計(jì)中,每一條指令的助記符可以全部用大寫(xiě)、或全部用小寫(xiě),但不允許在一條指令中大、小寫(xiě)混用。3> 所有的指令都不能在行的開(kāi)頭書(shū)寫(xiě),必須在指令的前面有空格,然后再書(shū)寫(xiě)指令。4> 指令助記符和后面的操作數(shù)或操作寄存器之間必須有空格,不可以在這之間使用逗號(hào)。3. 操作數(shù)域(OPERAND)操作數(shù)域表示操作的對(duì)象,操作數(shù)可以是常量、變量、標(biāo)號(hào)、寄存器名或表達(dá)式,不同對(duì)象之間必須用逗號(hào)“,”分開(kāi)。
RM處理器是基于RISC的,但不是純粹的RISC體系結(jié)構(gòu)。為了使ARM處理器能夠更好的滿(mǎn)足嵌入式系統(tǒng)的需要,ARM指令集和單純的RISC指令集有以下幾點(diǎn)不同:1、一些特定的指令周期數(shù)可變。例如多寄存器裝載或存儲(chǔ)的Load/Store指令執(zhí)行周期就是不確定的,這個(gè)會(huì)根據(jù)相關(guān)的寄存器個(gè)數(shù)而定。如果是訪(fǎng)問(wèn)連續(xù)的內(nèi)存地址,就可以改善性能,因?yàn)檫B續(xù)的內(nèi)存訪(fǎng)問(wèn)比隨機(jī)訪(fǎng)問(wèn)要快。根據(jù)這個(gè)特點(diǎn),由于在函數(shù)的起始和結(jié)尾通常會(huì)有多個(gè)寄存器與內(nèi)存進(jìn)行數(shù)據(jù)交換的操作,因此相應(yīng)操作的指令條數(shù)會(huì)減少,提高了代碼的密度。2、內(nèi)嵌的桶形移位寄存器產(chǎn)生了更復(fù)雜的指令。桶形移位寄存器是一個(gè)硬件部件,在一個(gè)寄存器被一條指令使用之前,桶形移位寄存器可以處理這個(gè)寄存器中的數(shù)據(jù)。桶形移位寄存器擴(kuò)展了許多指令的功能,以此改善內(nèi)核的性能,提高代碼密度。3、Thumb16位指令集。ARM處理器有兩種工作狀態(tài),一種是ARM狀態(tài),一種是Thumb狀態(tài)。ARM狀態(tài)下指令長(zhǎng)度為32位,Thumb狀態(tài)下指令長(zhǎng)度為16位。這種特點(diǎn)使得ARM既能執(zhí)行16位指令,又能執(zhí)行32位指令,從而增強(qiáng)了ARM內(nèi)核的功能。4、條件執(zhí)行。只有當(dāng)某個(gè)特定條件滿(mǎn)足時(shí)指令才會(huì)被執(zhí)行。這個(gè)特性可以減少分支指令的數(shù)目,從而改善性能,提高代碼密度。5、增強(qiáng)指令。一些功能強(qiáng)大的數(shù)字信號(hào)處理器(DSP)指令被加入到標(biāo)準(zhǔn)的ARM指令中,以支持快速的16*16乘法操作及飽和運(yùn)算。ARM的這些增強(qiáng)指令,使得ARM處理器不需要加上DSP即可實(shí)現(xiàn)。