實(shí)驗(yàn)指導(dǎo)手冊(cè)_第1頁(yè)
實(shí)驗(yàn)指導(dǎo)手冊(cè)_第2頁(yè)
實(shí)驗(yàn)指導(dǎo)手冊(cè)_第3頁(yè)
實(shí)驗(yàn)指導(dǎo)手冊(cè)_第4頁(yè)
實(shí)驗(yàn)指導(dǎo)手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩119頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)1ADS開發(fā)工具介紹

1.1ARM開發(fā)環(huán)境的介紹

1.2ARMADS開發(fā)環(huán)境的安裝

1.3ARMADS開發(fā)環(huán)境的組成

ARMADS2的默認(rèn)安裝目錄:C:\ProgramFiles\ARM\ADSvl_2?

ARMADS2安裝目錄包含文件介紹:

Bin可執(zhí)行文件,armasm.exe,arm匯編器

Armcc.exe,armc編譯器

Armcpp.exe,armc++編譯器

Armlink.exe,armelf影像連接器

Armsd.ee,arm符號(hào)調(diào)試器

Axd.exe,arm調(diào)試器

IDE.exe,CodeWarrior應(yīng)用程序界面

其它各種各樣的卜一述應(yīng)用程序使用的動(dòng)態(tài)連接庫(kù)文件

CodeWarriorHelp--CodeWarriorIEDE使用指南

Examples---各種各樣的程序例子

Inclu加一Arm支持C語言的系統(tǒng)頭文件

Lib--編寫ARM程序時(shí)C語言可以使用的庫(kù)文件的目錄

PDF--各種各樣的手冊(cè)使用指南、幫助文檔,是學(xué)習(xí)使用ADS集成開發(fā)環(huán)境的

第一手?jǐn)?shù)據(jù)。

具體如下:

ADS_GettingStarted_D:ADS快速使用指南

ADS_DeveloperGuide_D:ADS開發(fā)者指南

ADSCodeWarriorlDEGuide:CodeWarriorlDE使用指南

ADS_AssemblerGuide_B:Arm?匚編2岸使用■}■旨南

ADS_CompilerGuide_D:ARM編譯器使用指南

ADS_LinkerGuide_A:ARM連接器使用指南

ADS_AXDarmsdGuide_D:ARM符號(hào)調(diào)試器指南

ADSDebugTargetGuideD:ARM調(diào)試目標(biāo)指南

1.4ARMADS2開發(fā)環(huán)境的基本使用

1)建立工作目錄:在電腦的D盤創(chuàng)建“my_project”目錄,以后我們的實(shí)驗(yàn)程序都放在這

個(gè)目錄下。

2)建立工程:運(yùn)行"CodeWarriorfbrARMDeveloperSuite"(以下簡(jiǎn)稱ADS)。然后選擇

File->New,彈出屬性為"New"的窗口,選中"ArmExecutableImagen選項(xiàng),并在右

面的“Location”文本框選擇D盤的my_project目錄,并輸入項(xiàng)目名稱"asm”,如圖1

所示。

圖1

在圖1中點(diǎn)擊“保存”按鈕,保存項(xiàng)目,結(jié)果如下圖2所示。

圖2

在圖2中點(diǎn)擊“確定”按鈕,該動(dòng)作將創(chuàng)建一個(gè)新的工程asm.mcp,該工程所在

目錄是D:\my_project\asm文件夾(可去該目錄下看新生成的一些文件)。同時(shí)在ADS中

創(chuàng)建了一個(gè)與工程名相同的工作區(qū),在工作區(qū)窗口將顯示該工作區(qū)和工程,如圖3所示。

圖3

3)建立源文件:選擇File->New菜單項(xiàng),在彈出的標(biāo)題為“New”的窗口中選擇“File”選

項(xiàng)卡,再選中“TextFile”選項(xiàng),并在右面的文本框中輸入如圖所示內(nèi)容。之后點(diǎn)擊確

定,建立asm.s匯編文件。如圖4所示。

圖4

在該文件中輸入如下匯編程序代碼,并保存asm.s匯編源程序。

AREAINIT,CODE,READONLY;namethisblockofcode

numEQU20;Setnumberofwordstobecopied

ENTRY;markthefirstinstructiontocall

start

LDRrO,=src;rO=pointertosourceblock

LDRrl,=dst;rl=pointertodestinationblock

MOVr2,#num;r2=numberofwordstocopy

wordcopy

LDRr3,[r0],#4;awordfromthesource

STRr3,[rl],#4;storeawordtothedestination

SUBSr2,r2,#1;decrementthecounter

BNEwordcopy;...copymore

stop

MOVrO,#0x18;angelSWIreasonReportException

LDRrl,=0x20026;ADPStoppedApplicationExit

SWI0x123456;ARMsemihostingSWI

AREABlockData,DATA,READWRITE

srcDCD123,4,5,6,7,8,123,4,5,6,7,8,1,2,3,4

dstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

END

注:也可以使用你所喜歡的編輯工具編寫源文件,然后再拷貝到項(xiàng)目目錄。

該程序包括?個(gè)數(shù)據(jù)段和一個(gè)代碼段,在數(shù)據(jù)段定義了兩個(gè)緩沖區(qū):src和dst。代碼段

程序的主要功能是以字為單位把src緩沖區(qū)的存儲(chǔ)內(nèi)容依次拷貝到dst緩沖區(qū)。

4)添加源文件:在ADS中選擇“Project”->“AddFiles”,打開文件選擇對(duì)話框,在工程

目錄下選擇剛才建立的源文件asms。

5)開發(fā)工具設(shè)置:在工作區(qū)窗口中的下拉列表中選擇“Debug”條目,然后雙擊“target”

選項(xiàng)卡下的"Debug”條目,彈出“DebugSettings”窗口。分別見圖5?圖7。

^DebugRel

^Release

圖5

注意:圖5中,Debug、Release>DebugRel其實(shí)代表了三種不同的編譯選項(xiàng),選擇每

一種選項(xiàng)都可以編譯生成ARM可執(zhí)行映象。不同的是,Dcbgu選項(xiàng)所產(chǎn)生的映象包含了

比較多的調(diào)試信息,主要用于調(diào)試階段;而Release的映象則不包含任何調(diào)試信息,主要用

于程序發(fā)布階段。DebugRell選項(xiàng)產(chǎn)生的映象介于兩者之間。

@DebugRel

④Release

圖6

圖7

選擇該圖7窗口左面樹型列表里面的“TargetSettings"選項(xiàng)。在右面的Linker下拉菜單

處選擇ARMLinker作為程序連接器。Pre-Linker選項(xiàng)選擇None,Post-linker選項(xiàng)選擇ARM

fromELFo這里ARMfVomELF是ADS提供的一個(gè)小工具,用于在連接之后,把映象從ELF

格式轉(zhuǎn)換成bin格式。

選擇圖7窗口左面樹型列表里面的"LanguageSettings”條目下面的"ARMAssembler”

選項(xiàng),然后在右邊的“ArchitectureorProcessor”列表中選擇“ARM920T";uFloatingPoint

列表中選擇"NoFloatingPoint”。如圖8所示。

圖8

解釋:在圖8中,所做的設(shè)置其實(shí)是培植IDE調(diào)用匯編器時(shí)傳遞的命令行參數(shù)。每選選中

一項(xiàng)或取消一項(xiàng)都會(huì)對(duì)命令行參數(shù)進(jìn)行調(diào)整,在"EauivalentCommandLine”編輯框內(nèi)放映

了全部的命令行參數(shù)。至于每一個(gè)命令行參數(shù)代表什么意義請(qǐng)查閱

**ADSAssemblerGuideB",。

下面,選擇圖7窗口左面樹型列表里面的“LanguageSettings"條目下面的“ARMC

Compiler",設(shè)置C編譯器,如圖9所示。

j*pebugSettings01區(qū)]

gTargetSettingsFanels?ARfflCCompiler

Ff-Target

TargetandSourceATPCS!Waitings|Errors|Debug/Opt|PreprocessI

TargetSettings

AccessPathsArchitectureorProcessorFloatingPoint

BuildExtras|kRM920T|Pure-endiansoftfp

RuntimeSettings

FileMappings

SourceTrees

ARMTargetByteOrderSourceLanguage

?一LanguageSettingsGLittleEndi

(AHSI/ISOStandardC

LARMAssemblerr*BigEndiai

…MRMCCompiler

H

LARMC++Compiler

…ThumbCCompilerEquivalentCommandLine

一ThumbC++Com.-00-才-cpuARM920T

Linker

ABMLinker

ARMfromELF

一Editor

RevertImportPanel.|ExportPanel...

圖9

解釋:在此窗U中,可點(diǎn)擊其它選項(xiàng)卡,并進(jìn)行設(shè)置。這些設(shè)置會(huì)反映到C編譯器的命令

參數(shù)中,多代表的具體意義請(qǐng)參見"ADS_CompilerGuide_D”文檔。

接下來,設(shè)置程序連接器,點(diǎn)擊“Linker”目錄下的ARMLinker,并做如圖10所示設(shè)置(采

用默認(rèn)設(shè)置即可):

?■DebugSettings

factorySetting^EevertImportPanel.ExportPanel..

Apply

圖10

在圖10中點(diǎn)擊OK按鈕,開發(fā)環(huán)境設(shè)置完畢。

解釋:在此窗口的設(shè)置中,ROBASE和RWBASE其實(shí)分別指定了程序影像代碼段和數(shù)據(jù)

段的不同連接地址,當(dāng)RWBASE空著不填時(shí),默認(rèn)數(shù)據(jù)段根在代碼段的后面。在我們這個(gè)

例子中,我們選擇ROBASE的默認(rèn)地址。以后,編寫在實(shí)驗(yàn)板的SDRAM中運(yùn)行的程序時(shí),

ROBASE將會(huì)指定一個(gè)SDRAM中的地址。關(guān)于連接器的詳細(xì)設(shè)置,請(qǐng)參見

“ADS_LinkerGuide_A”文檔。

6)編譯生成目標(biāo)代碼:選擇“Project”->“Make”或者按下快捷鍵“F7”,生成目標(biāo)代碼。

也可以單擊工具欄或者工作區(qū)窗口中的相應(yīng)按鈕來完成,分別如圖11、圖12所示。

圖11

圖12

此時(shí),到項(xiàng)目所在文件夾D:\my_project\asm\asm_Data\Debug目錄下可以看到編譯生成

的可執(zhí)行目標(biāo)文件asm(armexecutablefile)。

注意:此時(shí)生成的文件是ELF格式的映像文件,借助于ADS集成的AXD軟件,我們可以

把此影響下在到軟件模擬器或者正式系統(tǒng)中單步或全速運(yùn)行。但若把此程序直接燒寫到0

地址的FLASH中,啟動(dòng)上電從0地址開始執(zhí)行程序時(shí),我們燒寫的程序是沒辦法正常運(yùn)行

的。原因是,此文件是ELF格式的文件,包含了除去我們所編寫指令外的其他很多用于調(diào)

試以及ELF格式本身所要求的信息。借助于AXD下載運(yùn)行時(shí),AXD會(huì)解釋這些附加的信

息;而燒寫到flash中去時(shí),此程序沒法正常運(yùn)行。必須向Hash中燒寫一個(gè).bin格式的只包

含程序指令和數(shù)據(jù)的文件,才能正常運(yùn)行。

下面利用軟件仿真器(Armulator)的方式調(diào)試該程序。

解釋:Armulaotr相當(dāng)于用軟件實(shí)現(xiàn)的一個(gè)arm處理器,可仿真多個(gè)系列的arm處理器,我

們可借助其仿真運(yùn)行、調(diào)試arm可執(zhí)行程序。

7)軟件仿真器設(shè)置:運(yùn)行AXD,選擇“Option”->“ConfigureTarget",在彈出來的對(duì)話

框中選擇開頭字母為"ARMUL”的選項(xiàng)。如下圖13所示:

圖13

該界面用于選擇程序運(yùn)行的目標(biāo)系統(tǒng),當(dāng)選擇ARMUL時(shí),即設(shè)定程序運(yùn)行目標(biāo)是

ARMULATOR仿真器,該仿真器是一個(gè)在程序,以dll文件的形式存在,可模擬多個(gè)系列的

ARM處理器。這種調(diào)試方式也即常說的“軟件模擬器調(diào)試”的方式。其它方式以后再講。

點(diǎn)擊窗口右邊的“Configure”按鈕,在彈出的對(duì)話框中做如圖14所示的設(shè)置。

ARBulatorConfiguration0E

圖14

然后點(diǎn)擊“OK”按鈕,再在“choosetarget”窗口中點(diǎn)擊“OK”按鈕。這樣我們就選

擇了實(shí)現(xiàn)arm920t處理器內(nèi)核的armulator作為我們的目標(biāo)執(zhí)行系統(tǒng)。

8)下載映象,準(zhǔn)備用軟件仿真器調(diào)試:在AXD中選擇“File”->“LoadImage”,彈出文

件選擇對(duì)話框,選擇"myprotect\asm\asm_Data\Debug”目錄下的asm.axf文件,然后點(diǎn)

擊“打開”按鈕,下載映象。常用方式是關(guān)掉AXD,在ADS的工具欄或者工作去窗口

中點(diǎn)擊對(duì)應(yīng)于Debug的按鈕,或者選擇Project->Debug,或者按下快捷鍵F5,都可以完

成映象文件的下裁。下載完畢后,AXD如圖15所示。

r'AXD-[ARI920T-D:\ayproject\asa\asa.s]□0?

圖15

在圖15中,第八行處的藍(lán)色箭頭表示下一條要執(zhí)行的指令。

9)調(diào)試環(huán)境的基本使用

(1)ProcessorViews菜單,如圖16所示

八AXD(ARB920TDa、”project\nsM\ns*??]

tFree、nrV?i?w??mVi?w?Fu*mi??0『aion?宣tedewHelp

?dCtrliR

照1喧Ia中0時(shí)].四曝]刖四向」|厄回舊畫回副鬼」|

世3chCtrl+K

ARM9RTn?cisl<AREAINTT.CODE,READONLY;noiH”t:

1abl?aClrliF

?工

numEQUjOec.ntuabee

由Cucnentfii*cktr?c?CtrifT

M?moryCtrlIM

田UHMK/SyfffLMMENTRY;mtiEkthet

tfl-FIQl^owL?v?lSymbolsAll+Z

CDIRQQe?mm?ChannelCtrl+H

fff3VCCtvl+N

田AboutLDR£□t-ozajcO-point

QiCtrl+llLDRvl,-dac;cl-point:

05必r

Sourfl?CO1.+SMOVc2/"nun;t2"numbe

CPIS

田c*chnbrairdcopy

HITLDoperacicFLDRt3,[EO]/#4:awocdEco:

田DrbuaComing(...)isJJTRE3/[EI]/4t43storeawo

i,3UB9K2,H2,fl:dacrftmAnt:

178NEwocdoopy;?.(copya

IB三

ID

200tOp

Z1MOVE0<4(OxlD3anael_SUIr

T<r<0tjimnc?|File*|C1*BK)22LDRtri,-0x20026:ADP_9spM

S5WI0x129456;APM-seniho

9拚ARM92OT-23

24

25AREABlGQMDetut,DATA.RKADWRTTK

26

273ECDCD1,2/3/4/5,6,7,0,1,2,3,5,6,

2BDCD0,0,0,0,0,0t0,0,0,0,0,0,0,0,

END

4I

圖16

在圖16中,當(dāng)選擇“Register”菜單時(shí),界面左側(cè)出現(xiàn)浮動(dòng)窗口“ARM920T-Registers”,

在此窗口內(nèi)可察看ARM920T處理器內(nèi)的所有寄存器。其中“Current”樹狀目錄下反應(yīng)了當(dāng)

前模式下程序可以訪問的寄存器。其中,PC寄存器存放即將執(zhí)行指令的地址,CPSR寄存

器放映了當(dāng)前程序運(yùn)行的狀態(tài)。根據(jù)CPSR的值可計(jì)算出當(dāng)前處理器所處的工作模式。如圖

所17示。

■'AXD-[ARJI920T-D:\ay_project\asM\asB.s

FileSearchProcessorViewsSystemViewsExecute

囹詡■周■HIH.I0

ARM920T-Registers1

RegisterValueA2

S

B-Current{…}4

FrO0x000080345

l-rl0x000080846

h-120x000000007

卜工30x000000008

9"工40x000000009

410

i-r50x00000000

11

I-r6

0x00000000工

;2

Ir70x0000000013

Fr80x0000000014

I-1:90x0000000015

|rrl00x0000000016

Hr110x0000000017

18

?-rl20x00000000

19

rr130x0000000020

”114

0x0000000021

iPC0x0000800422

cpsrnzcvqIFt_SVC23

spsrnzcvqift_Res24

?User/System{…}25

0-FIQ26

27

國(guó)IRQ

{…}28

0SVC{…}29

?Abort{…}

0TTnrtpfV

圖17

在圖16中,當(dāng)選擇“Memory”菜單時(shí),彈出“ARM920T-Memory”的浮動(dòng)窗口,從

此窗口內(nèi)可察看系統(tǒng)任意地址處存儲(chǔ)器內(nèi)的內(nèi)容。在本手冊(cè)中,顯示了從0地址開始的一段

存儲(chǔ)器內(nèi)的內(nèi)容。每一行顯示了16個(gè)字節(jié)的存儲(chǔ)器內(nèi)容。在該窗口上點(diǎn)擊鼠標(biāo)右鍵,可探

出浮動(dòng)菜單欄,從“size”菜單內(nèi)可選擇以字節(jié)、半字或者字的方式顯示存儲(chǔ)器內(nèi)容。從

“fbrmat”菜單內(nèi)可選擇具體的8進(jìn)制、16進(jìn)制、二進(jìn)制、ASCH碼等顯示格式。其它菜單

的使用請(qǐng)參見CodeWarriorIDE使用手冊(cè)。

Aimmr???wy八6…g

T?M-J*??-??R?<??11?乂~Aw〃|?*fu|T?t3-tka->?pi?£>??T?Mr*“i*|

AWIff__0"□

ixODocoooamOQG

IMOOOOOOIDIOFkF00nnEjrm??ry

hODOOOO^l10Wrr&,414b,

UOOOOOO>U10Mrrn

hrOCOOQ04a10FrMrr

FrTMCI?lr?,,》AN

irOGOOoaM10"MTTrr

_一TfC?l?fit

(>avy?aMttfr

皿51n?H<LM:

XafrM&b

L?<filt

T,pp?r?t?K

|A/W92DT|W,BIcKtetUlO-cacre(Fh/pcdffrnnayflUILitteenAnFl??(■ri?A*?

iSwithMtinQDstKACarnnCh?r?l4GliMwrtoTirmProiiHT&

£7c^d*tajnAutraWkCMti*c?.kllevdck?M

R(llC<>>irauw*4wia?8

IAFMRDI15IA,YNCRC*PwiccdCCEE心vl2IB&rwte9051匚QDHEk<AFMUT?VO2001

圖18

在圖16種,當(dāng)選擇"source"菜單時(shí),可彈出"opensource”窗口,從中可以選擇把項(xiàng)目中

的任一個(gè)選文件顯示在當(dāng)前窗口。如下圖19所示:

圖19

(2)"execute”菜單

g。-全速運(yùn)行程序,直到結(jié)束或斷點(diǎn)處。Stop-停止程序運(yùn)行

StepIn-在子函數(shù)調(diào)用語句處,用“stepin”執(zhí)行語句,可跟蹤進(jìn)入子函數(shù)

Step-單步執(zhí)行一條指令,若是子函數(shù)調(diào)用語句,不盡如子函數(shù)。

Stepout-當(dāng)子函數(shù)內(nèi)執(zhí)行時(shí),點(diǎn)擊此菜單,子函數(shù)剩余未執(zhí)行語句全部執(zhí)行完畢,并

返回到調(diào)用子函數(shù)指令的下一條指令處。

ToggleBreakpoint-設(shè)置斷點(diǎn)/去處斷點(diǎn)

?.、AXDIAKVP2OT

£11?&?&ruhEr9tfMkMorVl?wv口「幺,Mtindow

但訂臃f|a|cat]J

ARM92OT-―

VAIUSIn

OCurrent1?.?)

xooxoooaea34Qut

-?rl0x00008064Cursor

EZoxooooaooo

gx?cutionCont?>:<■

-K3DxOClOOOOOO

E4OXOOOOOOOO.?R*?mlkpolnt

??KSoxooaooooo

IEQuxuauuuooo

卜.七7

Dxonnooooo?AllBr?alcpointM

I'r?oxaooooooo"r^V[EJ,*4

,—?:90x00000000STRU3?[ri]/,4

-E10OxODOOOUUO3UD5£2/r2r"JI

I£110X00000000DNEwordeopy

圖20

10)根據(jù)上述調(diào)試工具的描述,單步運(yùn)行程序,并觀察處理器寄存器的變化。

實(shí)驗(yàn)2Arm處理器工作模式實(shí)驗(yàn)

2.1實(shí)驗(yàn)?zāi)康?/p>

1.掌握Arm處理器的幾種不同的工作模式

2.掌握使用MSR/MRS指令實(shí)現(xiàn)Arm處理器工作模式的切換,觀察不同模式下的寄存器,

加深對(duì)CPU結(jié)構(gòu)的理解

3.理解狀態(tài)寄存器的具體作用和使用

2.2實(shí)驗(yàn)設(shè)備

1.硬件:PC機(jī)

2.軟件:ARMADS2集成開發(fā)環(huán)境,Windows98/2000/NT/XP

2.3實(shí)驗(yàn)內(nèi)容

通過Arm匯編指令,在各種處理器模式下切換并觀察各種模式下寄存器的區(qū)別;掌握

ARM不同處理器模式的進(jìn)入和退出

2.4預(yù)備知識(shí)

1.ArmAds2集成開發(fā)環(huán)境的啟動(dòng)和基本使用(請(qǐng)參見系統(tǒng)說明手冊(cè)第四章)

2.Arm體系結(jié)構(gòu)及匯編編程基本知識(shí)(請(qǐng)參見Arm體系結(jié)構(gòu)及編程一書)

2.5實(shí)驗(yàn)原理

1.Arm處理器的運(yùn)行模式

>ARM微處理器支持7種運(yùn)行模式,分別為:

用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)

快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理

外部中斷模式(irq):用于通用的中斷處理

管理模式(svc):操作系統(tǒng)使用的保護(hù)模式

數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)

及存儲(chǔ)保護(hù)。

系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。

未定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件

協(xié)處理器的軟件仿真。

>ARM微處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。大

多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)

資源是不能被訪問的。

>除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式

(PrivilegedModes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式

(ExceptionModes),常用于處理中斷或異常,及需要訪問受保護(hù)的系統(tǒng)資源等情況。

>ARM體系結(jié)構(gòu)包含一個(gè)當(dāng)前程序狀態(tài)寄存器(CPSR)和五個(gè)備份的程序狀態(tài)寄存器

(SPSRs)o備份的程序狀態(tài)寄存器用來進(jìn)行異常處理,其功能包括:

保存ALU中的當(dāng)前操作信息

控制允許和禁止中斷

設(shè)置處理器的運(yùn)行模式

>程序狀態(tài)寄存器的每一位的安排如圖2.6所示:

梟件用標(biāo)志保W抒制位

11II1

3130202s272635Xa76543Zf0

丁丁「1丁T夕…「「?一「丁「一|?

NZCV../Z.If1M4M3M2MlMO

Dita

CairyBarturtE?endStaletil

ZuioFtOifisaM

IRUdg汕Im

圖2.6程序狀態(tài)寄存器格式

(1)條件碼標(biāo)志(ConditionCodeFlags)

N、Z、C、V均為條件碼標(biāo)志位。它們的內(nèi)容可被算術(shù)或邏輯運(yùn)算的結(jié)果所改變,并且

可以決定某條指令是否被執(zhí)行。

在ARM狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的。

在Thumb狀態(tài)下,僅有分支指令是有條件執(zhí)行的。

條件碼標(biāo)志各位的具體含義如表2-1所示:

表2-1條件碼標(biāo)志的具體含義

標(biāo)志位含義

N當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí).W表示運(yùn)算的結(jié)果為負(fù)數(shù):N=0表示運(yùn)算的結(jié)

果為正數(shù)或零:

ZZ=1表示運(yùn)算的結(jié)祟為零:z=o表示運(yùn)算的洽奧為非零;

C可以有4種方法設(shè)置C的值:

—加法運(yùn)算(包拈比較指令CMX):當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無符號(hào)數(shù)就出).C=l.否則

c=o.

-戰(zhàn)法運(yùn)算(包括比較指令CMP):當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無符號(hào)數(shù)溢出),C=0,否則C=1

—對(duì)于包含移位操作的非加/減運(yùn)算指令,C為移出值的最后?位.

-對(duì)于其他的非加依運(yùn)算指令,C的值通常不改變.

V可以有2種方法設(shè)置¥的值:

一支可」:」,性制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí)?丫=1」

符號(hào)位潛出.

一對(duì)手其他的非加/誠(chéng)運(yùn)算指令.C的值通常不改變。

Q4ARiIv5及以上版本的E系列處理器中.用Q標(biāo)志位指小增強(qiáng)的DSP運(yùn)算指令是否發(fā)生了溢

出.在其他版本的處理器中,Q標(biāo)志位無定義.

(2)控制位

PSR的低8位(包括I、F、T和M[4:0])稱為控制位,當(dāng)發(fā)生異常時(shí)這些位可以被改變。

如果處理器運(yùn)行特權(quán)模式,這些位也可以由程序修改。

(3)中斷禁止位I、F:

1=1禁止IRQ中斷;

F=1禁止FIQ中斷。

(4)T標(biāo)志位:該位反映處理器的運(yùn)行狀態(tài)。

對(duì)于ARM體系結(jié)構(gòu)v5及以上的版本的T系列處理器,當(dāng)該位為1時(shí),程序運(yùn)行于Thumb

狀態(tài),否則運(yùn)行于ARM狀態(tài)。

對(duì)于ARM體系結(jié)構(gòu)v5及以上的版本的非T系列處理器,當(dāng)該位為1時(shí),執(zhí)行下一條指令

以引起為定義的指令異常;當(dāng)該位為0時(shí),表示運(yùn)行于ARM狀態(tài)。

(5)運(yùn)行模式位M[4:0]:MO,Ml、M2、M3、M4是模式位。這些位決定了處理器的運(yùn)行

模式。具體含義如表2-2所示:

表2-2運(yùn)行模式位0]的具體含義

M[4:0]處理器模式可訪問的寄存器

Obi0000用戶模式PC.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論