嵌入式系统原理与应用 第3版 ARM实验指导书与程序 实验汇总 1-15:汇编指令实验- ARM C指针实验_第1页
嵌入式系统原理与应用 第3版 ARM实验指导书与程序 实验汇总 1-15:汇编指令实验- ARM C指针实验_第2页
嵌入式系统原理与应用 第3版 ARM实验指导书与程序 实验汇总 1-15:汇编指令实验- ARM C指针实验_第3页
嵌入式系统原理与应用 第3版 ARM实验指导书与程序 实验汇总 1-15:汇编指令实验- ARM C指针实验_第4页
嵌入式系统原理与应用 第3版 ARM实验指导书与程序 实验汇总 1-15:汇编指令实验- ARM C指针实验_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验目的

实验一:熟悉开发环境与汇编编程实验1熟悉ADS1.2软件开发环境;ARM920TLDR/STR实验内容LDR0x3000310010STR0(2)ADS1.2(ProcessorRegisters)(Memory)0x30003100预备知识ARMADS1.2实验设备硬件:PC机一台。indows98/XP/2000ADS1.2集成开发环境。实验步骤(1)ADS1.2ARMExecutableImagearm1.mcp(2)新建工程源文件,输入文件名如arm1.s,选择添加到工程DebugRel(3)进行DebugRelSettings设置。在LanguageSettings中,将ARM汇编编译器、C语言编译器、C++语言编译器、Thumb汇编编译器、ThumbC语言编译器的Target选项Processor全部选择ARM920T处理器。(iker地址ROBae为x00WBase为0x30003000,设置调试口地址Imageentrypoint为0x30000000。AXD进入pis中选择onureagtoseet,ARMulate.dllConfigureARM920OK(6(PocsorRgtes,选择urrnt项监视1(Meor0x30003100,显示方式Size为32Bit,监视0x30003100地址上的值。F10/0x300031006、实验报告内容(1)叙述ADS1.2集成开发环境的组成。(2)叙述主要调试窗口和作用。7参考程序:COUNTEQU0x30003100AREAExample111,CODE,READONLYENTRYCODE32START LDRR1,=COUNTMOVR0,#0STRR0,[R1]LOOP LDRR1,=COUNTLDRR0,[R1]ADDR0,R0,#1CMPR0,#10MOVHSR0,#0STRR0,[R1]BLOOPEND实验目的

实验二汇编指令实验2(1ARM实验内容(1BLXn(2ADS1.2(Processor(Memory)0x30003000预备知识ARMADS1.2AXD实验设备硬件:PC机一台。indows98/XP/2000ADS1.2集成开发环境。实验步骤(1)ADS1.2ARMExecutableImage工程模arm2.mcp。3ROBase为0x300000WBase为0x30003000,设置调试口地址Image entry point 为0x30000000。(4)Project|DebugAXD进行软件仿真调试。5(ProcessorRegistersCurent项监视寄存器R0,R1,R13(SP)和R14(LR)的值。6(Meory0x30003EA0Size0x30003F00起始的满递减堆栈区。Xn“BLPOW”R0,R1的值进行修改,然后继续运行程序。器的值。输入数据可以是十进制数(如136,19,也可以是十六进制数(如0x123,0xF0,输入数据后回车确定。实验报告内容(1)分析汇编程序各行的功能或作用(2)叙述ARM中乘法指令的特点(3)叙述ARM中的B指令与BL指令的区别参考程序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实验目的

实验三 ARMC/C++语言实验1通过实验了解使用ADS1.2编写C语言程序,并进行调试。实验内容(1)CCCC程序使用加法运算来计算1+2++„+(-1)+N的值(N>0(2)ADS1.2(Processor(Memory)0x30003000预备知识ARM指令系统内容;APCS(ARMProcedureCall过程调用内容;ADS1.2AXD调试的内容。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1ADS1.2ARMExecutableIage工程模板建立c1.mcp。(2tartup.s和c1(3.设置工程连接地址ROBase为0x3000000,WBase为0x30003000,设置调试口地址Imageentrypoint为0x30000000。(4.设置位于开始位置的起始代码段。方法:在ARMLiner中的bject/Symbol的栏中填写tartup.otartup.s文件的目标代Section。(5.编译连接工程,选择Pojec|Debug,启动AD进行软件仿真调试。(6.在tartup.S的”BMain”处设置断点,然后全速运行程序。(7.程序在断点处停止,单步运行程序,判断程序是否跳转到C程序中运行。(8Pocssoriws|aribles打开变量观察窗口观察全局变量的值,单步全速运行程序,判断程序的运算结果是否正确。实验报告内容(1)在ADS1.2中能直接编写C语言程序进行运行吗?为什么?(2)在汇编语言中调用C语言的格式怎样?(3)汇编语言如何向C程序语言函数传递参数?参考程序(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 ;比较只读区域结束地址和读写区域起始地址,目的是判断有几个执;行区域,影响标志位ZBEQ LOOP1;区域0;即跳到LOOP1标号处;否则顺序执行标号LOOP0LOOP0 CMP R1,R30影响标志位如果R1<R3,C=0,条件CC为True,执行以下3条语句。LDRCC R2,[R0],#4 ;将[R0]处的内容搬移到[R1]处STRCC R2,[R1],#4BCC LOOP0 LOOP0(可能包含能改变自身的;程序,如果相等,则执行LOOP1标号后的程序LOOP1 LDR R1,=|Image$$ZI$$Limit|;这里R1又重新赋值为ZI的末地址MOVR2,#0LOOP2 CMP R3,R1 ;比较ZI的开始地址R3与末地址R1,如果R3<R1,则CC为TrueSTRCC R2,[R3],#4 ;初始化ZI区域BCC LOOP200址,BMainEND

;则跳到标号LOOP2处继续循环执行(2)C语言C1.C程序代码#defineuint8 unsignedchar#defineuint32unsignedint#defineN100uint32sum;voidMain(void){uint32i;sum=0;for(i=0;i<=N;i++){sum+=i;}while(1);}说明:①使用IMPORT关键字说明的几个变量是ADS编译器使用的变量;②|Image$$RO$$Base|是程序段的起始地址,即在编译器中RO的首地址,例如0x30000000。|Image$$RO$$Limit|1,此地址无代码段内容,上一地址号有代码内容。代码段存储代码编译内容和程序中定义的常量。|Image$$RW$$Base|RW0x30003000|Image$$RW$$Limit||Image$$ZI$$Base|④|Image$$ZI$$Base|RWZIZeroInit)的变量段的起始地址,RW|Image$$RW$$Limit||Image$$ZI$$Limit|0RWZI⑤经编译器编译的程序代码的空间分布是,代码段编译代码、有初始化赋值的RWZImain|Image$$RW$$Base|的首ZI⑥C编译后的存储器分布与ADS的存储器分布映射图RO.Base初值

C编译后代码分布

ADS中RW.Base初值RW.Base初值RO.LimitZI.Base初值RW.LimitZI.Limit值初值0数据区读写数据区代码区

RO.Base初值代码区RW.Base初值代码预留去读写数据区ZI.Base初值初值0数据区C代码分布与ADS代码分布映射图注意:|Image$$RO$$Limit|就是为判断|Image$$RW$$Base|而设计的,当|Image$$RO$$Limit|大于|Image$$RW$$Base|ADSRW当|Image$$RO$$Limit|等于|Image$$RW$$Base|ADSRW代码的数据区重合,此时不需要对RW的数据区进行搬移,只需要将ZI区清“0当|Image$$RO$$Limit|小于|Image$$RW$$Base|ADSRWCRW1实验目的

实验四 ARMC/C++语言实验2掌握在C语言程序中调用汇编程序,了解ATPCS基本规则。2实验内容Cunit32 Add(unit32x,unit32y)unit32unsignedint.(2ADS1.2Registers)监视R0,R1的值,打开存储器观察窗口(Memory)监视0x30003000上的值。预备知识ARMRM的PS3S1.2调试的内容。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)ADS1.2ARMExecutableImagec2.mcp。Startup.SAdd.S(3)设置工程连接地址ROBase为0x30000000,RWBase为x00Iageentrypoint为000。(4)设置工程连接选项,位于开始位置的起始代码段设置为Startup.o的Start段.AXD(c1cd,然(7)程序在断点处停止,使用StepIn单步运行程序,观察程序是否跳转到汇编程序中Add.s运行。(8)Processor|,观/,实验报告内容(1)简述ATPCS含义和内容。(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语言调用汇编语言程序#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实验五 寄存器装载及存储汇编指令实验实验目的ADS1.2掌握寄存器装载指令的条件执行等和使用各种形式的寄存器装载指令完成存储器的访问。实验内容(1)主要内容:①单一指令加载/存储指令(LDR/STR)的基本格式有:LDR/STR{条件码}{类型码}Rd,[Rn]LDR/STR{条件码}{类型码}Rd,[Rn,Flexoffset]{!}LDR/STR{条件码}{类型码}Rd,labelLDR/STR{条件码}{类型码}Rd,[Rn],Flexoffset说明:条件码:可选,默认是无条件执行。内容见表2.6.1ARM条件码表。类型码:(32bit)BSB、无HSHD。Rd:ARM9/存储操作的目的/源。RnARM9//目的。Flexoffset:Rn2一个立即数,范围-4095~+4095,书写格式#常数或#常数表达式。shiftRmASRnn;LSLnn;LSRnn;RORnn;RRX1PC4K!:表示写回地址的符号,可选。若带有后缀!,表示加载/存储完成后,将包含偏移量的新地址写回Rn。②多数据加载/存储指令(LDM/STM)的基本格式是:LDM/STM{条件码}类型码Rn{!},寄存器列表{^}条件码:同上。类型码:取其下列情况之一:IA:1;IB:1;DA:1;DB:1;FD:满递减堆栈;(ADS的堆栈方式)ED:空递减堆栈;FA:满递增堆栈;EA:空递增堆栈;Rn:是内部寄存器,但不允许是R15,用作存储器地址指针。寄存器列表:在格式中使用大括号括起来的内部寄存器,一般用逗号分开。当使用连续号的寄存器时,使用减号“-”CPSR^”:PCCPSRPCCPSRSTMFDR13!,{R0-R12,R14}„„LDMFDR13!,{R0-R12,PC}^(2)主要实验项目ADS1.2②编制在各种基本指令下指令实验程序,上机调试,使用各种窗口观察实验结果;③编制无符号字节块、无符号半字块和字块的传送指令,使用汇编伪指令DCB定义字节数据、DCW定义半字数据、DCD定义字数据。使用ARM伪指令ADR、LDR设置块的首地址,完成各数据块的传送与拷贝工作。预备知识ARM指令系统的寄存器装载及存储指令;ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程arm1.mcp。(2)建立汇编源文件Exp5_arm.s,使用寄存器装载及存储指令编写实验程序,然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容寄存器装载及存储指令可以完成哪些任务。简要总结实验的内容和收获。实验六 算术加/减法汇编指令实验实验目的ADS1.2掌握算术逻辑指令对标志寄存器标志的影响、条件执行和功能等;使用算术指令编写简单的汇编程序并进行调试。实验内容主要内容① ADDADCADD/ADC{条件码}{S}Dest,Op1,Op2说明:条件码:可选,默认是无条件执行。内容见表2.6.1ARM条件码表。S:可选,默认是不影响状态寄存器CPSR的标志位。当选写S时,则影响CPSR的标志位。Dest:为目的寄存器Rd。Op1、Op2:为两个操作数,Op2也可以是寄存器移位操作的结果。ADDDest=Op1Op2主要形式有:ADDRd,Rm,Rn ;Rd=Rm+RnADDRd,Rm,#立即数 ;Rd=Rm+立即数ADDRd,Rm,Rn,shift ;Rd=Rm+RnshiftADCDest=Op1+Op2+进位位。主要形式有:ADCRd,Rm,Rn ;Rd=Rm+Rn+进位位ADCRd,Rm,#立即数 ;Rd=Rm+立即数+进位位ADCRd,Rm,Rn,shift ;Rd=Rm+Rnshift+进位位shift代表Rm的可选移位方法,有:ASRn 算术右移n; LSLn 逻辑左移n;LSRn 逻辑右移n; RORn 循环右移n;RRX 1②不带借位SUB指令、带借位SBC指令的基本格式是:SUB/SBC{条件码}{S}Dest,Op1,Op2说明:条件码、S、Dest、Op1、Op2:同上。SUBDestOp1-Op2主要形式有:SUBRd,Rm,Rn ;Rd=Rm-RnSUBRd,Rm,#立即数 ;Rd=Rm-立即数SUBRd,Rm,Rn,shift ;Rd=Rm-RnshiftSBCDest=Op1-Op2!Carry主要形式有:SBCRd,Rm,Rn ;Rd=Rm-Rn-!CarrySBCRd,Rm,#立即数 ;Rd=Rm-立即数-!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,#立即数 ;Rd=立即数-RmRSBRd,Rm,Rn,shift ;Rd=Rnshift-RmRSCDestOp2-Op1!Carry主要形式有:RSCRd,Rm,Rn ;Rd=Rn-Rm-!CarryRSCRd,Rm,#立即数 ;Rd=立即数-Rm-!CarryRSCRd,Rm,Rn,shift ;Rd=Rnshift-Rm-!CarryShift同上④位逻辑指令“与”AND、“或”ORR、“异或”EOR和位清除指令BIC,其指令格式为:操作码{条件码}{S}Dest,Op1,Op2功能如下:AND功能:Dest=Op1ANDOp2 ;位与ORR功能:Dest=Op1ORROp2 ;位或EOR功能:Dest=Op1ANDOp2 ;位异或AND功能:Dest=Op1AND!Op2 ;将OP2中为1位的对应位清0主要完成的工作①编写一个汇编程序,通过寄存器窗口观察每一指令的运行结果和CPSR的状态标志位;②编写代码实现无符号数(R1)(R0)+(R3)(R2)→(R1)(R0),若有益处,则R48BICAND、ORROxaa,0x55;R48BICAND、ORROxaa,0x55;④编写程序计算1+2+22+23+„„+220的值。预备知识ARM指令系统的算术加/减法指令;ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。-实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程arm4.mcp。(2)建立汇编源文件Exp6_arm.s,使用算术类指令(主要是加减法)编写实验程序,然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容ARM/减法指令的种类,各指令完成的功能。ARM0写出上述实现无符号数相加减的部分程序代码片段。实验七 ARM乘及其它指令汇编指令实验实验目的掌握ARM乘法及其它指令对标志寄存器标志的影响、条件执行和功能等;使用乘法指令编写简单的汇编程序并进行调试。实验内容主要内容① 32MUL、32MLA,其基本格式分别为:乘法指令:MUL{条件}{S}Dest,Op1,Op2 ;Dest=Op1×Op2乘加指令MLA{条件}{S}Dest,Op1,Op2,Op3 ;Dest=Op1×Op2+Op3说明:条件码、S与之前的意义相同;目的寄存器与操作数1必须是不同的寄存器,但不能使用R15寄存器。②64SMULLSMLAL64位无符号数乘UMULLUMLAL说明:具体格式参阅第2章的相关内容。64位有符号数乘法指令SMULL{条件}{S}<RdLo>,<RdHi>,<Rm>,<Rs> ;Rd←Rm×Rs64位有符号数乘加指令SMLAL{条件}{S}<RdLo>,<RdHi>,<Rm>,<Rs>;RdLo←(Rm×Rs)Lo+RdLo RdHi←(Rm×Rs)Hi+RdHi注意:该指令高位计算时也包含低位的进位位,但是高位相加的进位不影响CPSR中的进位位C64位无符号数乘法指令UMULL{条件}{S}<RdLo>,<RdHi>,<Rm>,<Rs>;Rd←Rm×Rs64位无符号数乘加指令UMLAL{条件}{S}<RdLo>,<RdHi>,<Rm>,<Rs>;RdLo←(Rm×Rs)Lo+RdLo RdHi←(Rm×Rs)Hi+RdHi注意:该指令高位计算时也包含低位的进位位,但是高位相加的进位不影响CPSR中的进位位C(实验已证明)③传送指令MOV和传送取反值指令MVN指令,其基本格式分别是:MOV:MOV{条件码}{S}Dest,Op1 ;Dest←Op1说明:条件码、S、Dest:Op1;DestOp1NOPmovr0,r0可以对相同的寄存器进行移位操作;例: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运算但不保存结果,只影响CPSR的标志,与加法指令ADDS相同。用以决定之后的条件汇编指令能否执行。④位测试指令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编写代码实现无符号数(R1)(R0)×(R3)(R2)→(R3)(R2)(R1)(R0),即完成64bit128bit预备知识ARM指令系统的乘法指令、传送指令、比较指令和测试指令;ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程arm4.mcp。64(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容简述本实验中各指令完成的功能。写出上述实现无符号数相乘的部分程序代码片段。实验八 ARM处器运行模式与堆栈指针设置实验实验目的MSRMRSARM工作模式的切换,CPU的理解;ARMSP实验内容主要内容① ARM97(1)表1.ARM9运行模式处理器模式处理器模式描述CPSR寄存器的M[4:0]的值用户模式usrARM处理器正常程序执行模式0b10000快速中断模式fiq用于高速数据传输或通道处理0b10001外部中断模式irq用于通用的中断处理0b10010管理模式svc操作系统使用的保护模式0b10011数据访问终止模式abt当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护0b10111未定义指令终止模式und当未定义的指令执行时进入该模式0b11011系统模式sys运行具有特权的操作系统任务0b1111165FIQ(FastInterruptReQuest)IRQ(InterruptReQuest)svc(Supervisor)abt(Abort)und(Undefined)在软件的控制下可以改变模式,外部中断和异常也可以引起模式发生改变。大多数应用程序在用户模式下执行。当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的处理器资源,也不能改变模式,除非异常(Exception)发生。这允许适当编写操作系统来控制系统资源的使用。ARM9体系结构的异常类型和异常处理模式(如表2)表2异常类型进入模式地址(异常向量)优先级复位管理模式0x000000001(最高)未定义指令未定义模式0x000000046(最低)软件中断管理模式0x000000086(最低)指令预取中止中止模式0x0000000C5数据中止中止模式0x000000102外部中断请求外部中断请求模式0x000000184快速中断请求快速中断请求模式0x0000001C3②状态寄存器CPSR/SPSR以及对其进行的访问CPSRSPSRSPSR,SPSRCPSRCPSRSPSRNZCVQ预留IFTM4M3M2M1M031-28NZCVNegativeZero、CarryOverflow。控制位:I(b7)F(b6)ARM/ThumbARM处理器的工作模式。CPSR程序状态寄存器到通用寄存器传送指令格式MRS{条件码}Op1,CPSR/SPSR ;Op1←CPSR/SPSR说明:Op1是通用寄存器;CPSR是当前程序状态寄存器。通用寄存器到程序状态寄存器传送指令格式MSR{条件码}CPSR/SPSR,Op2_Domain, ;CPSR/SPSR←Op2说明:Op2是通用寄存器;CPSR是当前程序状态寄存器。DomainCPSP/SPSR,324最高8位,即b31-b24为条件标志位域,用f表示。在指令中的形式为CPSR_f。8b23~b16s8b18~b8x最低8位,即b7~b0为控制位域,用c表示。在指令中的形式为CPSR_c。主要完成的工作0x00000000,即进入到系统的启动入口Reset,此时系统进入到管理模式,这时就可以进行模式的切换,设置各模SPSPARM9R13R14M[4:0]的取值而进入相应的模式,对其专有的寄存器赋值并观察,最后回到用户模式。EQUSP预备知识ARM9的运行模式、特权模式、异常模式以及模式之间的转换;ARM9的堆栈及堆栈指针寄存器。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程exp8.mcp。(2)Exp8_arm.sMRS/MSR(3)设置工程连接地址ROBase为0x00000000,RWBase为0x30003000,设置调试口地址Imageentrypoint为0x00000000。(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容ARM为什么每一模式下都要设置相应的堆栈SP实验九LED虚拟显示混合编程实验实验目的ARMGPIOCC实验内容G0LEDG1引LED2LED周期性地轮流交替点亮与熄灭。CG0LEDG1LED。预备知识(1)熟悉ARM处理器通用端口GPIO使用方法。(2)熟悉使用ARM汇编语言、C语言对通用I/O端口的控制与访问。ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程Exp9.mcp。(2)建立汇编源文件Exp9_arm.s,使用ARM汇编语言对GPIO端口的访问方法编写实验程序,然后添加到工程中。包括汇编延时子程序。(3使用C语言对AM的GPO端口的控制方法编写C语言程序xp9_.,并添加到工程中。(4)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(5)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(6)打开存储器观察窗口(Memor/O口对应存储器地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容ARM9I/OCI/O实验十汇编-C语言数据块拷贝编程实验实验目的CCARM实验内容C②编写C语言字符块拷贝函数,在汇编语言中调用。可以使用指针或函数strcpy()进行编写。C16short型指针编写。C32int预备知识(1)汇编语言调用C语言的参数传递;(2)C语言中的相关函数和指针的应用;ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程exp10.mcp。(2)建立汇编源文件startup.s,包括对数据区的赋值、参数传递地址的获取、参数的传递和C语言函数的调用。将其添加到工程中。(3)建立编写C语言文件exp_c10.c,实现各种数据块的拷贝。(4)ROBase0x00000000,RWBase0x30003000,Imageentrypoint0x30000000。(5)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(6)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(7)单步运行程序,或设置断点进行观察。6、实验报告内容C观察存储器窗口,在各种数据块拷贝时,指针本身的字节长度与指针中内容的字节长度有什么区别。实验十一C-汇编语言数据块拷贝编程实验实验目的CARM实验内容C②编写汇编语言字符块拷贝函数,在C语言中调用。③编写汇编语言半字块拷贝函数,在C语言中调用。④编写汇编语言字块拷贝函数,在C语言中调用。预备知识(1)C语言调用汇编语言的方法以及参数传递;(2)汇编语言拷贝字节数据块、半字数据块和字数据块的编程方法;ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程exp11.mcp。(2)建立汇编源文件startup.s,包括对数据区的赋值并跳转到C的主函数中。Cexp11_asm.s,实现各种长度数据的拷贝。(4)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(5)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(6)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Mmor,设置观察存储器操作的地址内容。(7)单步运行程序,或设置断点进行观察。6、实验报告内容C字节、半字和字在存储器是怎样存储的。实验十二汇编-C语言整型4参数加法编程实验实验目的C语言程序的方法;ARMCR0—R4CR0、R1实验内容(1)CC4(2)C4intshortchar预备知识ARM规则标准。ARMC语言的规则。ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程exp12.mcp。(2)建立汇编源文件exp12_arm.s并进行编写;分别编写C语言函数longadd1(int,int,int,int,int)intadd2(short,short,short,short)shortadd3(unsignedunsignedunsignedunsignedchar,),然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容CCR0、R1实验十三 汇编-C语言BCD码编程实验实验目的CBCD码的实现算法及其编程。ARMC实验内容C4BCD4个全局变量中。(2)ARMC语言中定义的全局变量传递参数,R0寄存器中。预备知识ARMC语言全局变量的方法。ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程exp13.mcp。(2)startup.sCC语言Cexp13_c.c,BCD4BCD4个全局变量中,然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容AXDBCD实验十四C-汇编语言整型4参数加法编程实验实验目的C语言程序调用汇编语言程序的方法;ARMC实验内容(1)编写一个汇编程序,建立C语言的运行环境并进入到C语言程序;(2)用汇编语言编写具有4参数的字节数据、半字数据和字数据相加的程序,使用C语言调用。预备知识ARM规则标准。ARMC语言调用汇编语言的规则。ADS1.2AXD调试。实验设备硬件:PC机一台。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程exp14.mcp。(2)建立汇编源文件exp14_arm.s、exp14_c.c和三个汇编加法程序并命名,进行编写;然后添加到工程中。(3)ROBase0x30000000,RWBase0x30003000,Imageentrypoint0x30000000。设置工程的开始文件(4)编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProssorReistersCurnt项监视其中寄存器的值。打开存储器观察窗口(Memor,设置观察存储器操作的地址内容。(6)单步运行程序,或设置断点进行观察。6、实验报告内容CC实验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论