嵌入式系統(tǒng)原理與應(yīng)用 第3版 ARM實(shí)驗(yàn)指導(dǎo)書與程序 實(shí)驗(yàn)匯總 1-15:匯編指令實(shí)驗(yàn)- ARM C指針實(shí)驗(yàn)_第1頁
嵌入式系統(tǒng)原理與應(yīng)用 第3版 ARM實(shí)驗(yàn)指導(dǎo)書與程序 實(shí)驗(yàn)匯總 1-15:匯編指令實(shí)驗(yàn)- ARM C指針實(shí)驗(yàn)_第2頁
嵌入式系統(tǒng)原理與應(yīng)用 第3版 ARM實(shí)驗(yàn)指導(dǎo)書與程序 實(shí)驗(yàn)匯總 1-15:匯編指令實(shí)驗(yàn)- ARM C指針實(shí)驗(yàn)_第3頁
嵌入式系統(tǒng)原理與應(yīng)用 第3版 ARM實(shí)驗(yàn)指導(dǎo)書與程序 實(shí)驗(yàn)匯總 1-15:匯編指令實(shí)驗(yàn)- ARM C指針實(shí)驗(yàn)_第4頁
嵌入式系統(tǒng)原理與應(yīng)用 第3版 ARM實(shí)驗(yàn)指導(dǎo)書與程序 實(shí)驗(yàn)匯總 1-15:匯編指令實(shí)驗(yàn)- ARM C指針實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

實(shí)驗(yàn)一:熟悉開發(fā)環(huán)境與匯編編程實(shí)驗(yàn)1熟悉ADS1.2軟件開發(fā)環(huán)境;ARM920TLDR/STR實(shí)驗(yàn)內(nèi)容LDR0x3000310010STR0(2)ADS1.2(ProcessorRegisters)(Memory)0x30003100預(yù)備知識ARMADS1.2實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。indows98/XP/2000ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)ADS1.2ARMExecutableImagearm1.mcp(2)新建工程源文件,輸入文件名如arm1.s,選擇添加到工程DebugRel(3)進(jìn)行DebugRelSettings設(shè)置。在LanguageSettings中,將ARM匯編編譯器、C語言編譯器、C++語言編譯器、Thumb匯編編譯器、ThumbC語言編譯器的Target選項(xiàng)Processor全部選擇ARM920T處理器。(iker地址ROBae為x00WBase為0x30003000,設(shè)置調(diào)試口地址Imageentrypoint為0x30000000。AXD進(jìn)入pis中選擇onureagtoseet,ARMulate.dllConfigureARM920OK(6(PocsorRgtes,選擇urrnt項(xiàng)監(jiān)視1(Meor0x30003100,顯示方式Size為32Bit,監(jiān)視0x30003100地址上的值。F10/0x300031006、實(shí)驗(yàn)報告內(nèi)容(1)敘述ADS1.2集成開發(fā)環(huán)境的組成。(2)敘述主要調(diào)試窗口和作用。7參考程序:COUNTEQU0x30003100AREAExample111,CODE,READONLYENTRYCODE32START LDRR1,=COUNTMOVR0,#0STRR0,[R1]LOOP LDRR1,=COUNTLDRR0,[R1]ADDR0,R0,#1CMPR0,#10MOVHSR0,#0STRR0,[R1]BLOOPEND實(shí)驗(yàn)?zāi)康?/p>

實(shí)驗(yàn)二匯編指令實(shí)驗(yàn)2(1ARM實(shí)驗(yàn)內(nèi)容(1BLXn(2ADS1.2(Processor(Memory)0x30003000預(yù)備知識ARMADS1.2AXD實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。indows98/XP/2000ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)ADS1.2ARMExecutableImage工程模arm2.mcp。3ROBase為0x300000WBase為0x30003000,設(shè)置調(diào)試口地址Image entry point 為0x30000000。(4)Project|DebugAXD進(jìn)行軟件仿真調(diào)試。5(ProcessorRegistersCurent項(xiàng)監(jiān)視寄存器R0,R1,R13(SP)和R14(LR)的值。6(Meory0x30003EA0Size0x30003F00起始的滿遞減堆棧區(qū)。Xn“BLPOW”R0,R1的值進(jìn)行修改,然后繼續(xù)運(yùn)行程序。器的值。輸入數(shù)據(jù)可以是十進(jìn)制數(shù)(如136,19,也可以是十六進(jìn)制數(shù)(如0x123,0xF0,輸入數(shù)據(jù)后回車確定。實(shí)驗(yàn)報告內(nèi)容(1)分析匯編程序各行的功能或作用(2)敘述ARM中乘法指令的特點(diǎn)(3)敘述ARM中的B指令與BL指令的區(qū)別參考程序X EQU 9n EQU 2AREAExample2,CODE,READONLYENTRYCODE32START LDR SP,=0x30003F00LDR R0,=XLDR R1,=nBLPOWHALT BLHALTPOW STMFD SP!,{R1-R12,LR}MOVS R2,R1MOVEQ R0,#1 ;IF(R1)=0THEN(R0)=1BEQ POW_END ;ANDJUMPTOPOW_END,ELSEMOV R1,R0SUB R2,R2,#1POW_L1 BL DO_MULSUBS R2,R2,#1BNE POW_L1POW_ENDLDMFD SP!,{R1-R12,PC} ;POPSTATIC RETURNTOMAINPROGRAMDO_MUL MUL R0,R1,R0MOVPC,LR ;RETURNTOMAINPROGRAMEND實(shí)驗(yàn)?zāi)康?/p>

實(shí)驗(yàn)三 ARMC/C++語言實(shí)驗(yàn)1通過實(shí)驗(yàn)了解使用ADS1.2編寫C語言程序,并進(jìn)行調(diào)試。實(shí)驗(yàn)內(nèi)容(1)CCCC程序使用加法運(yùn)算來計算1+2++?+(-1)+N的值(N>0(2)ADS1.2(Processor(Memory)0x30003000預(yù)備知識ARM指令系統(tǒng)內(nèi)容;APCS(ARMProcedureCall過程調(diào)用內(nèi)容;ADS1.2AXD調(diào)試的內(nèi)容。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1ADS1.2ARMExecutableIage工程模板建立c1.mcp。(2tartup.s和c1(3.設(shè)置工程連接地址ROBase為0x3000000,WBase為0x30003000,設(shè)置調(diào)試口地址Imageentrypoint為0x30000000。(4.設(shè)置位于開始位置的起始代碼段。方法:在ARMLiner中的bject/Symbol的欄中填寫tartup.otartup.s文件的目標(biāo)代Section。(5.編譯連接工程,選擇Pojec|Debug,啟動AD進(jìn)行軟件仿真調(diào)試。(6.在tartup.S的”BMain”處設(shè)置斷點(diǎn),然后全速運(yùn)行程序。(7.程序在斷點(diǎn)處停止,單步運(yùn)行程序,判斷程序是否跳轉(zhuǎn)到C程序中運(yùn)行。(8Pocssoriws|aribles打開變量觀察窗口觀察全局變量的值,單步全速運(yùn)行程序,判斷程序的運(yùn)算結(jié)果是否正確。實(shí)驗(yàn)報告內(nèi)容(1)在ADS1.2中能直接編寫C語言程序進(jìn)行運(yùn)行嗎?為什么?(2)在匯編語言中調(diào)用C語言的格式怎樣?(3)匯編語言如何向C程序語言函數(shù)傳遞參數(shù)?參考程序(1)Startup.sMainAREA Start,CODE,READONLYENTRYCODE32Reset LDR SP,=0x40003F00LDR R0,=|Image$$RO$$Limit|LDR R1,=|Image$$RW$$Base|LDR R3,=|Image$$ZI$$Base|CMP R0,R1 ;比較只讀區(qū)域結(jié)束地址和讀寫區(qū)域起始地址,目的是判斷有幾個執(zhí);行區(qū)域,影響標(biāo)志位ZBEQ LOOP1;區(qū)域0;即跳到LOOP1標(biāo)號處;否則順序執(zhí)行標(biāo)號LOOP0LOOP0 CMP R1,R30影響標(biāo)志位如果R1<R3,C=0,條件CC為True,執(zhí)行以下3條語句。LDRCC R2,[R0],#4 ;將[R0]處的內(nèi)容搬移到[R1]處STRCC R2,[R1],#4BCC LOOP0 LOOP0(可能包含能改變自身的;程序,如果相等,則執(zhí)行LOOP1標(biāo)號后的程序LOOP1 LDR R1,=|Image$$ZI$$Limit|;這里R1又重新賦值為ZI的末地址MOVR2,#0LOOP2 CMP R3,R1 ;比較ZI的開始地址R3與末地址R1,如果R3<R1,則CC為TrueSTRCC R2,[R3],#4 ;初始化ZI區(qū)域BCC LOOP200址,BMainEND

;則跳到標(biāo)號LOOP2處繼續(xù)循環(huán)執(zhí)行(2)C語言C1.C程序代碼#defineuint8 unsignedchar#defineuint32unsignedint#defineN100uint32sum;voidMain(void){uint32i;sum=0;for(i=0;i<=N;i++){sum+=i;}while(1);}說明:①使用IMPORT關(guān)鍵字說明的幾個變量是ADS編譯器使用的變量;②|Image$$RO$$Base|是程序段的起始地址,即在編譯器中RO的首地址,例如0x30000000。|Image$$RO$$Limit|1,此地址無代碼段內(nèi)容,上一地址號有代碼內(nèi)容。代碼段存儲代碼編譯內(nèi)容和程序中定義的常量。|Image$$RW$$Base|RW0x30003000|Image$$RW$$Limit||Image$$ZI$$Base|④|Image$$ZI$$Base|RWZIZeroInit)的變量段的起始地址,RW|Image$$RW$$Limit||Image$$ZI$$Limit|0RWZI⑤經(jīng)編譯器編譯的程序代碼的空間分布是,代碼段編譯代碼、有初始化賦值的RWZImain|Image$$RW$$Base|的首ZI⑥C編譯后的存儲器分布與ADS的存儲器分布映射圖RO.Base初值

C編譯后代碼分布

ADS中RW.Base初值RW.Base初值RO.LimitZI.Base初值RW.LimitZI.Limit值初值0數(shù)據(jù)區(qū)讀寫數(shù)據(jù)區(qū)代碼區(qū)

RO.Base初值代碼區(qū)RW.Base初值代碼預(yù)留去讀寫數(shù)據(jù)區(qū)ZI.Base初值初值0數(shù)據(jù)區(qū)C代碼分布與ADS代碼分布映射圖注意:|Image$$RO$$Limit|就是為判斷|Image$$RW$$Base|而設(shè)計的,當(dāng)|Image$$RO$$Limit|大于|Image$$RW$$Base|ADSRW當(dāng)|Image$$RO$$Limit|等于|Image$$RW$$Base|ADSRW代碼的數(shù)據(jù)區(qū)重合,此時不需要對RW的數(shù)據(jù)區(qū)進(jìn)行搬移,只需要將ZI區(qū)清“0當(dāng)|Image$$RO$$Limit|小于|Image$$RW$$Base|ADSRWCRW1實(shí)驗(yàn)?zāi)康?/p>

實(shí)驗(yàn)四 ARMC/C++語言實(shí)驗(yàn)2掌握在C語言程序中調(diào)用匯編程序,了解ATPCS基本規(guī)則。2實(shí)驗(yàn)內(nèi)容Cunit32 Add(unit32x,unit32y)unit32unsignedint.(2ADS1.2Registers)監(jiān)視R0,R1的值,打開存儲器觀察窗口(Memory)監(jiān)視0x30003000上的值。預(yù)備知識ARMRM的PS3S1.2調(diào)試的內(nèi)容。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)ADS1.2ARMExecutableImagec2.mcp。Startup.SAdd.S(3)設(shè)置工程連接地址ROBase為0x30000000,RWBase為x00Iageentrypoint為000。(4)設(shè)置工程連接選項(xiàng),位于開始位置的起始代碼段設(shè)置為Startup.o的Start段.AXD(c1cd,然(7)程序在斷點(diǎn)處停止,使用StepIn單步運(yùn)行程序,觀察程序是否跳轉(zhuǎn)到匯編程序中Add.s運(yùn)行。(8)Processor|,觀/,實(shí)驗(yàn)報告內(nèi)容(1)簡述ATPCS含義和內(nèi)容。(2)C(1)Startup.sMainAREA Start,CODE,READONLYENTRYCODE32Reset LDR SP,=0x30003F00LDR R0,=|Image$$RO$$Limit|LDR R1,=|Image$$RW$$Base|LDR R3,=|Image$$ZI$$Base|CMP R0,R1BEQ LOOP1LOOP0 CMP R1,R3LDRCCR2,[R0],#4STRCCR2,[R1],#4BCCLOOP0LOOP1 LDR R1,=|Image$$ZI$$Limit|MOVR2,#0LOOP2 CMP R3,R1STRCC R2,[R3],#4BCC LOOP2BMainEND(2)C語言調(diào)用匯編語言程序#define uint8 unsignedchar#define uint32unsignedintextern uint32Add(uint32x,uint32y);uint32sum;voidMain(void){sum=Add(555,168);while(1);}(3)匯編加法程序代碼EXPORTAddAREAAdd1,CODE,READONLYENTRYCODE32Add ADDR0,R0,R1MOVPC,LREND實(shí)驗(yàn)五 寄存器裝載及存儲匯編指令實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腁DS1.2掌握寄存器裝載指令的條件執(zhí)行等和使用各種形式的寄存器裝載指令完成存儲器的訪問。實(shí)驗(yàn)內(nèi)容(1)主要內(nèi)容:①單一指令加載/存儲指令(LDR/STR)的基本格式有:LDR/STR{條件碼}{類型碼}Rd,[Rn]LDR/STR{條件碼}{類型碼}Rd,[Rn,F(xiàn)lexoffset]{!}LDR/STR{條件碼}{類型碼}Rd,labelLDR/STR{條件碼}{類型碼}Rd,[Rn],Flexoffset說明:條件碼:可選,默認(rèn)是無條件執(zhí)行。內(nèi)容見表2.6.1ARM條件碼表。類型碼:(32bit)BSB、無HSHD。Rd:ARM9/存儲操作的目的/源。RnARM9//目的。Flexoffset:Rn2一個立即數(shù),范圍-4095~+4095,書寫格式#常數(shù)或#常數(shù)表達(dá)式。shiftRmASRnn;LSLnn;LSRnn;RORnn;RRX1PC4K?。罕硎緦懟氐刂返姆?,可選。若帶有后綴!,表示加載/存儲完成后,將包含偏移量的新地址寫回Rn。②多數(shù)據(jù)加載/存儲指令(LDM/STM)的基本格式是:LDM/STM{條件碼}類型碼Rn{!},寄存器列表{^}條件碼:同上。類型碼:取其下列情況之一:IA:1;IB:1;DA:1;DB:1;FD:滿遞減堆棧;(ADS的堆棧方式)ED:空遞減堆棧;FA:滿遞增堆棧;EA:空遞增堆棧;Rn:是內(nèi)部寄存器,但不允許是R15,用作存儲器地址指針。寄存器列表:在格式中使用大括號括起來的內(nèi)部寄存器,一般用逗號分開。當(dāng)使用連續(xù)號的寄存器時,使用減號“-”CPSR^”:PCCPSRPCCPSRSTMFDR13!,{R0-R12,R14}??LDMFDR13!,{R0-R12,PC}^(2)主要實(shí)驗(yàn)項(xiàng)目ADS1.2②編制在各種基本指令下指令實(shí)驗(yàn)程序,上機(jī)調(diào)試,使用各種窗口觀察實(shí)驗(yàn)結(jié)果;③編制無符號字節(jié)塊、無符號半字塊和字塊的傳送指令,使用匯編偽指令DCB定義字節(jié)數(shù)據(jù)、DCW定義半字?jǐn)?shù)據(jù)、DCD定義字?jǐn)?shù)據(jù)。使用ARM偽指令A(yù)DR、LDR設(shè)置塊的首地址,完成各數(shù)據(jù)塊的傳送與拷貝工作。預(yù)備知識ARM指令系統(tǒng)的寄存器裝載及存儲指令;ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程arm1.mcp。(2)建立匯編源文件Exp5_arm.s,使用寄存器裝載及存儲指令編寫實(shí)驗(yàn)程序,然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容寄存器裝載及存儲指令可以完成哪些任務(wù)。簡要總結(jié)實(shí)驗(yàn)的內(nèi)容和收獲。實(shí)驗(yàn)六 算術(shù)加/減法匯編指令實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腁DS1.2掌握算術(shù)邏輯指令對標(biāo)志寄存器標(biāo)志的影響、條件執(zhí)行和功能等;使用算術(shù)指令編寫簡單的匯編程序并進(jìn)行調(diào)試。實(shí)驗(yàn)內(nèi)容主要內(nèi)容① ADDADCADD/ADC{條件碼}{S}Dest,Op1,Op2說明:條件碼:可選,默認(rèn)是無條件執(zhí)行。內(nèi)容見表2.6.1ARM條件碼表。S:可選,默認(rèn)是不影響狀態(tài)寄存器CPSR的標(biāo)志位。當(dāng)選寫S時,則影響CPSR的標(biāo)志位。Dest:為目的寄存器Rd。Op1、Op2:為兩個操作數(shù),Op2也可以是寄存器移位操作的結(jié)果。ADDDest=Op1Op2主要形式有:ADDRd,Rm,Rn ;Rd=Rm+RnADDRd,Rm,#立即數(shù) ;Rd=Rm+立即數(shù)ADDRd,Rm,Rn,shift ;Rd=Rm+RnshiftADCDest=Op1+Op2+進(jìn)位位。主要形式有:ADCRd,Rm,Rn ;Rd=Rm+Rn+進(jìn)位位ADCRd,Rm,#立即數(shù) ;Rd=Rm+立即數(shù)+進(jìn)位位ADCRd,Rm,Rn,shift ;Rd=Rm+Rnshift+進(jìn)位位shift代表Rm的可選移位方法,有:ASRn 算術(shù)右移n; LSLn 邏輯左移n;LSRn 邏輯右移n; RORn 循環(huán)右移n;RRX 1②不帶借位SUB指令、帶借位SBC指令的基本格式是:SUB/SBC{條件碼}{S}Dest,Op1,Op2說明:條件碼、S、Dest、Op1、Op2:同上。SUBDestOp1-Op2主要形式有:SUBRd,Rm,Rn ;Rd=Rm-RnSUBRd,Rm,#立即數(shù) ;Rd=Rm-立即數(shù)SUBRd,Rm,Rn,shift ;Rd=Rm-RnshiftSBCDest=Op1-Op2!Carry主要形式有:SBCRd,Rm,Rn ;Rd=Rm-Rn-!CarrySBCRd,Rm,#立即數(shù) ;Rd=Rm-立即數(shù)-!CarrySBCRd,Rm,Rn,shift ;Rd=Rm-Rnshift-!CarryShift同上③反向減法指令RSB、帶借位反向減法指令RSC的基本格式是:RSB/RSC{條件碼}{S}Dest,Op1,Op2說明:條件碼、S、Dest、Op1、Op2:同上。RSBDestOp2-Op1主要形式有:RSBRd,Rm,Rn ;Rd=Rn-RmRSBRd,Rm,#立即數(shù) ;Rd=立即數(shù)-RmRSBRd,Rm,Rn,shift ;Rd=Rnshift-RmRSCDestOp2-Op1!Carry主要形式有:RSCRd,Rm,Rn ;Rd=Rn-Rm-!CarryRSCRd,Rm,#立即數(shù) ;Rd=立即數(shù)-Rm-!CarryRSCRd,Rm,Rn,shift ;Rd=Rnshift-Rm-!CarryShift同上④位邏輯指令“與”AND、“或”O(jiān)RR、“異或”EOR和位清除指令BIC,其指令格式為:操作碼{條件碼}{S}Dest,Op1,Op2功能如下:AND功能:Dest=Op1ANDOp2 ;位與ORR功能:Dest=Op1ORROp2 ;位或EOR功能:Dest=Op1ANDOp2 ;位異或AND功能:Dest=Op1AND!Op2 ;將OP2中為1位的對應(yīng)位清0主要完成的工作①編寫一個匯編程序,通過寄存器窗口觀察每一指令的運(yùn)行結(jié)果和CPSR的狀態(tài)標(biāo)志位;②編寫代碼實(shí)現(xiàn)無符號數(shù)(R1)(R0)+(R3)(R2)→(R1)(R0),若有益處,則R48BICAND、ORROxaa,0x55;R48BICAND、ORROxaa,0x55;④編寫程序計算1+2+22+23+??+220的值。預(yù)備知識ARM指令系統(tǒng)的算術(shù)加/減法指令;ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。-實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程arm4.mcp。(2)建立匯編源文件Exp6_arm.s,使用算術(shù)類指令(主要是加減法)編寫實(shí)驗(yàn)程序,然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容ARM/減法指令的種類,各指令完成的功能。ARM0寫出上述實(shí)現(xiàn)無符號數(shù)相加減的部分程序代碼片段。實(shí)驗(yàn)七 ARM乘及其它指令匯編指令實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康恼莆誂RM乘法及其它指令對標(biāo)志寄存器標(biāo)志的影響、條件執(zhí)行和功能等;使用乘法指令編寫簡單的匯編程序并進(jìn)行調(diào)試。實(shí)驗(yàn)內(nèi)容主要內(nèi)容① 32MUL、32MLA,其基本格式分別為:乘法指令:MUL{條件}{S}Dest,Op1,Op2 ;Dest=Op1×Op2乘加指令MLA{條件}{S}Dest,Op1,Op2,Op3 ;Dest=Op1×Op2+Op3說明:條件碼、S與之前的意義相同;目的寄存器與操作數(shù)1必須是不同的寄存器,但不能使用R15寄存器。②64SMULLSMLAL64位無符號數(shù)乘UMULLUMLAL說明:具體格式參閱第2章的相關(guān)內(nèi)容。64位有符號數(shù)乘法指令SMULL{條件}{S}<RdLo>,<RdHi>,<Rm>,<Rs> ;Rd←Rm×Rs64位有符號數(shù)乘加指令SMLAL{條件}{S}<RdLo>,<RdHi>,<Rm>,<Rs>;RdLo←(Rm×Rs)Lo+RdLo RdHi←(Rm×Rs)Hi+RdHi注意:該指令高位計算時也包含低位的進(jìn)位位,但是高位相加的進(jìn)位不影響CPSR中的進(jìn)位位C64位無符號數(shù)乘法指令UMULL{條件}{S}<RdLo>,<RdHi>,<Rm>,<Rs>;Rd←Rm×Rs64位無符號數(shù)乘加指令UMLAL{條件}{S}<RdLo>,<RdHi>,<Rm>,<Rs>;RdLo←(Rm×Rs)Lo+RdLo RdHi←(Rm×Rs)Hi+RdHi注意:該指令高位計算時也包含低位的進(jìn)位位,但是高位相加的進(jìn)位不影響CPSR中的進(jìn)位位C(實(shí)驗(yàn)已證明)③傳送指令MOV和傳送取反值指令MVN指令,其基本格式分別是:MOV:MOV{條件碼}{S}Dest,Op1 ;Dest←Op1說明:條件碼、S、Dest:Op1;DestOp1NOPmovr0,r0可以對相同的寄存器進(jìn)行移位操作;例:MOVR0,R0,LSL#3MVN:MVN{條件}{S}Dest,Op1 ;Dest←~Op1,按位取反說明:MVNOp1DestMOVR0,#4 ;(R0)=0XFFFFFFF0④比較指令CMP、取反比較指令CMN,其基本指令格式是:CMP比較指令:CMP{條件}Op1,Op2Op1-Op2CPSRSUBSCMN比較指令:CMN{條件}Op1,Op2功能:完成Op1+Op2運(yùn)算但不保存結(jié)果,只影響CPSR的標(biāo)志,與加法指令A(yù)DDS相同。用以決定之后的條件匯編指令能否執(zhí)行。④位測試指令TST和相等測試指令TEQ,其指令格式為:TST:TST{條件碼}Op1,Op2功能:Op1ANDOp2CPSRANDSOp1。若Z=1,則0,0。例:TSTR0,#%1 ;IFZ==1,THENR0ISALL0.WHERE“%”ISBINARYTEQ:TEQ{條件碼}Op1,Op2Op1EOROp2CPSREORSOp1Z=1,則表示相等,否則不相等。例:TEQR0,#%1 ;IFZ==1,THENR0IS1.WHERE“%”ISBINARY主要完成的工作CPSR編寫代碼實(shí)現(xiàn)無符號數(shù)(R1)(R0)×(R3)(R2)→(R3)(R2)(R1)(R0),即完成64bit128bit預(yù)備知識ARM指令系統(tǒng)的乘法指令、傳送指令、比較指令和測試指令;ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程arm4.mcp。64(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容簡述本實(shí)驗(yàn)中各指令完成的功能。寫出上述實(shí)現(xiàn)無符號數(shù)相乘的部分程序代碼片段。實(shí)驗(yàn)八 ARM處器運(yùn)行模式與堆棧指針設(shè)置實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腗SRMRSARM工作模式的切換,CPU的理解;ARMSP實(shí)驗(yàn)內(nèi)容主要內(nèi)容① ARM97(1)表1.ARM9運(yùn)行模式處理器模式處理器模式描述CPSR寄存器的M[4:0]的值用戶模式usrARM處理器正常程序執(zhí)行模式0b10000快速中斷模式fiq用于高速數(shù)據(jù)傳輸或通道處理0b10001外部中斷模式irq用于通用的中斷處理0b10010管理模式svc操作系統(tǒng)使用的保護(hù)模式0b10011數(shù)據(jù)訪問終止模式abt當(dāng)數(shù)據(jù)或指令預(yù)取終止時進(jìn)入該模式,可用于虛擬存儲及存儲保護(hù)0b10111未定義指令終止模式und當(dāng)未定義的指令執(zhí)行時進(jìn)入該模式0b11011系統(tǒng)模式sys運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)0b1111165FIQ(FastInterruptReQuest)IRQ(InterruptReQuest)svc(Supervisor)abt(Abort)und(Undefined)在軟件的控制下可以改變模式,外部中斷和異常也可以引起模式發(fā)生改變。大多數(shù)應(yīng)用程序在用戶模式下執(zhí)行。當(dāng)處理器工作在用戶模式時,正在執(zhí)行的程序不能訪問某些被保護(hù)的處理器資源,也不能改變模式,除非異常(Exception)發(fā)生。這允許適當(dāng)編寫操作系統(tǒng)來控制系統(tǒng)資源的使用。ARM9體系結(jié)構(gòu)的異常類型和異常處理模式(如表2)表2異常類型進(jìn)入模式地址(異常向量)優(yōu)先級復(fù)位管理模式0x000000001(最高)未定義指令未定義模式0x000000046(最低)軟件中斷管理模式0x000000086(最低)指令預(yù)取中止中止模式0x0000000C5數(shù)據(jù)中止中止模式0x000000102外部中斷請求外部中斷請求模式0x000000184快速中斷請求快速中斷請求模式0x0000001C3②狀態(tài)寄存器CPSR/SPSR以及對其進(jìn)行的訪問CPSRSPSRSPSR,SPSRCPSRCPSRSPSRNZCVQ預(yù)留IFTM4M3M2M1M031-28NZCVNegativeZero、CarryOverflow??刂莆唬篒(b7)F(b6)ARM/ThumbARM處理器的工作模式。CPSR程序狀態(tài)寄存器到通用寄存器傳送指令格式MRS{條件碼}Op1,CPSR/SPSR ;Op1←CPSR/SPSR說明:Op1是通用寄存器;CPSR是當(dāng)前程序狀態(tài)寄存器。通用寄存器到程序狀態(tài)寄存器傳送指令格式MSR{條件碼}CPSR/SPSR,Op2_Domain, ;CPSR/SPSR←Op2說明:Op2是通用寄存器;CPSR是當(dāng)前程序狀態(tài)寄存器。DomainCPSP/SPSR,324最高8位,即b31-b24為條件標(biāo)志位域,用f表示。在指令中的形式為CPSR_f。8b23~b16s8b18~b8x最低8位,即b7~b0為控制位域,用c表示。在指令中的形式為CPSR_c。主要完成的工作0x00000000,即進(jìn)入到系統(tǒng)的啟動入口Reset,此時系統(tǒng)進(jìn)入到管理模式,這時就可以進(jìn)行模式的切換,設(shè)置各模SPSPARM9R13R14M[4:0]的取值而進(jìn)入相應(yīng)的模式,對其專有的寄存器賦值并觀察,最后回到用戶模式。EQUSP預(yù)備知識ARM9的運(yùn)行模式、特權(quán)模式、異常模式以及模式之間的轉(zhuǎn)換;ARM9的堆棧及堆棧指針寄存器。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程exp8.mcp。(2)Exp8_arm.sMRS/MSR(3)設(shè)置工程連接地址ROBase為0x00000000,RWBase為0x30003000,設(shè)置調(diào)試口地址Imageentrypoint為0x00000000。(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容ARM為什么每一模式下都要設(shè)置相應(yīng)的堆棧SP實(shí)驗(yàn)九LED虛擬顯示混合編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腁RMGPIOCC實(shí)驗(yàn)內(nèi)容G0LEDG1引LED2LED周期性地輪流交替點(diǎn)亮與熄滅。CG0LEDG1LED。預(yù)備知識(1)熟悉ARM處理器通用端口GPIO使用方法。(2)熟悉使用ARM匯編語言、C語言對通用I/O端口的控制與訪問。ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程Exp9.mcp。(2)建立匯編源文件Exp9_arm.s,使用ARM匯編語言對GPIO端口的訪問方法編寫實(shí)驗(yàn)程序,然后添加到工程中。包括匯編延時子程序。(3使用C語言對AM的GPO端口的控制方法編寫C語言程序xp9_.,并添加到工程中。(4)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(5)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(6)打開存儲器觀察窗口(Memor/O口對應(yīng)存儲器地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容ARM9I/OCI/O實(shí)驗(yàn)十匯編-C語言數(shù)據(jù)塊拷貝編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腃CARM實(shí)驗(yàn)內(nèi)容C②編寫C語言字符塊拷貝函數(shù),在匯編語言中調(diào)用??梢允褂弥羔樆蚝瘮?shù)strcpy()進(jìn)行編寫。C16short型指針編寫。C32int預(yù)備知識(1)匯編語言調(diào)用C語言的參數(shù)傳遞;(2)C語言中的相關(guān)函數(shù)和指針的應(yīng)用;ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程exp10.mcp。(2)建立匯編源文件startup.s,包括對數(shù)據(jù)區(qū)的賦值、參數(shù)傳遞地址的獲取、參數(shù)的傳遞和C語言函數(shù)的調(diào)用。將其添加到工程中。(3)建立編寫C語言文件exp_c10.c,實(shí)現(xiàn)各種數(shù)據(jù)塊的拷貝。(4)ROBase0x00000000,RWBase0x30003000,Imageentrypoint0x30000000。(5)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(6)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(7)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容C觀察存儲器窗口,在各種數(shù)據(jù)塊拷貝時,指針本身的字節(jié)長度與指針中內(nèi)容的字節(jié)長度有什么區(qū)別。實(shí)驗(yàn)十一C-匯編語言數(shù)據(jù)塊拷貝編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腃ARM實(shí)驗(yàn)內(nèi)容C②編寫匯編語言字符塊拷貝函數(shù),在C語言中調(diào)用。③編寫匯編語言半字塊拷貝函數(shù),在C語言中調(diào)用。④編寫匯編語言字塊拷貝函數(shù),在C語言中調(diào)用。預(yù)備知識(1)C語言調(diào)用匯編語言的方法以及參數(shù)傳遞;(2)匯編語言拷貝字節(jié)數(shù)據(jù)塊、半字?jǐn)?shù)據(jù)塊和字?jǐn)?shù)據(jù)塊的編程方法;ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程exp11.mcp。(2)建立匯編源文件startup.s,包括對數(shù)據(jù)區(qū)的賦值并跳轉(zhuǎn)到C的主函數(shù)中。Cexp11_asm.s,實(shí)現(xiàn)各種長度數(shù)據(jù)的拷貝。(4)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(5)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(6)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Mmor,設(shè)置觀察存儲器操作的地址內(nèi)容。(7)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容C字節(jié)、半字和字在存儲器是怎樣存儲的。實(shí)驗(yàn)十二匯編-C語言整型4參數(shù)加法編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腃語言程序的方法;ARMCR0—R4CR0、R1實(shí)驗(yàn)內(nèi)容(1)CC4(2)C4intshortchar預(yù)備知識ARM規(guī)則標(biāo)準(zhǔn)。ARMC語言的規(guī)則。ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程exp12.mcp。(2)建立匯編源文件exp12_arm.s并進(jìn)行編寫;分別編寫C語言函數(shù)longadd1(int,int,int,int,int)intadd2(short,short,short,short)shortadd3(unsignedunsignedunsignedunsignedchar,),然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容CCR0、R1實(shí)驗(yàn)十三 匯編-C語言BCD碼編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腃BCD碼的實(shí)現(xiàn)算法及其編程。ARMC實(shí)驗(yàn)內(nèi)容C4BCD4個全局變量中。(2)ARMC語言中定義的全局變量傳遞參數(shù),R0寄存器中。預(yù)備知識ARMC語言全局變量的方法。ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程exp13.mcp。(2)startup.sCC語言Cexp13_c.c,BCD4BCD4個全局變量中,然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容AXDBCD實(shí)驗(yàn)十四C-匯編語言整型4參數(shù)加法編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康腃語言程序調(diào)用匯編語言程序的方法;ARMC實(shí)驗(yàn)內(nèi)容(1)編寫一個匯編程序,建立C語言的運(yùn)行環(huán)境并進(jìn)入到C語言程序;(2)用匯編語言編寫具有4參數(shù)的字節(jié)數(shù)據(jù)、半字?jǐn)?shù)據(jù)和字?jǐn)?shù)據(jù)相加的程序,使用C語言調(diào)用。預(yù)備知識ARM規(guī)則標(biāo)準(zhǔn)。ARMC語言調(diào)用匯編語言的規(guī)則。ADS1.2AXD調(diào)試。實(shí)驗(yàn)設(shè)備硬件:PC機(jī)一臺。軟件:Windows98/XP/2000系統(tǒng),ADS1.2集成開發(fā)環(huán)境。實(shí)驗(yàn)步驟(1)啟動ADS1.2,使用ARMExecutableImage工程模板建立一個工程exp14.mcp。(2)建立匯編源文件exp14_arm.s、exp14_c.c和三個匯編加法程序并命名,進(jìn)行編寫;然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。設(shè)置工程的開始文件(4)編譯連接工程,選擇Project|Debug,啟動AXD進(jìn)行軟件仿真調(diào)試。(5)打開寄存器窗口(ProssorReistersCurnt項(xiàng)監(jiān)視其中寄存器的值。打開存儲器觀察窗口(Memor,設(shè)置觀察存儲器操作的地址內(nèi)容。(6)單步運(yùn)行程序,或設(shè)置斷點(diǎn)進(jìn)行觀察。6、實(shí)驗(yàn)報告內(nèi)容CC實(shí)驗(yàn)

溫馨提示

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

評論

0/150

提交評論