嵌入式系统上机实验.doc
12页实验(一) ADS使用与汇编指令实验1. 实验目的(1) 了解ADS的用途;(2) 学习ADS的安装(3) 掌握ADS的基本使用方法(4) 掌握ARM汇编语言常用指令2. 实验器件PC一台3. 实验步骤1) 加载/存储及移位指令实验(1) 打开ADS集成开发环境,新建一个工程项目文件,(2) 新建一个.S文件,输入以下汇编代码注意:根据编译器的规定,除了标号以外,所有的指令都需要在前面加上空格,否则程序会在编译时报错,这里建议使用Tab键对齐指令AREA LDR_STR_LSL_LSR,CODE,READONLY ENTRY;****************************************************************************; 加载/存储指令以及移位指令;****************************************************************************startPRO1 LDR R0,=0x0000 LDR R1,=0x0004 LDR R0,[R1];将存储器地址为R1的字数据读入寄存器R0 LDR R0,=0x0000 LDR R1,=0x0004 LDR R2,=0x0008 LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0 LDR R0,=0x0000 LDR R1,=0x0004 LDR R2,=0x0008 LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1 LDR R0,=0x0000 LDR R1,=0x0004 LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0 AND R0,R0,#0 ;保持R0的0位,其于位清0 LDR R1,=0X0004 LDR R0,[R1,#8]! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1 LDR R0,=0x0000 LDR R1,=0x0004 LDR R0,[R1],#8 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+8写入R1 LDR R0,=0x0000 LDR R1,=0x0004 LDR R2,=0x0008 LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1 LDR R0,=0x0000 LDR R1,=0x0004 LDR R2,=0x0008 LDR R0,[R1],R2,LSR#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址;R1+R2/4写入R1 PRO2 LDR R0,=0x0000 LDR R1,=0x0004 STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中, 并将新地址R1+8写入R1 STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中 B PRO1 END(3) 编写完毕,保存并添加到已建立的工程项目文件中。
4) 编译项目文件(此步会生成.axf文件)(5) 在编译完成后单击Debug按钮进入调试环境AXD(6) 将AXD设置成软件仿真方式实验报告中,要求此步骤的截图)(7) 打开 Processor Views选项下的Registers→Current,出现当前模式下的寄存器观察窗口实验报告中要求此步骤的截图8) 使用工具栏的按钮,可以用step、step in、step out、run to cursor、go、stop等几种方式来控制程序的运行或停止,注意查看寄存器观察窗口中各寄存器内容的变化,对应程序分析结构是否正确记录寄存器的最终结果(要求截图)! 2) 数据处理指令和程序状态寄存器访问指令实验实验步骤与1)相同,在新建的.s文件中输入以下汇编代码 AREA DATA_PSR,CODE,READONLY ENTRY ;****************************************************************************; 数据处理指令和程序状态寄存器访问指令;****************************************************************************PRO1 MVN R0,#3 ;将立即数取反传送到寄存器R0中,十进制3=二进制000......0011,取反以后,111.......1100,即十六进制的FFFFFFFC LDR R0,=0x0000 ;将0x0000赋值给R0 LDR R1,=0x0004 ;将0x0004赋值给R1 CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减(R1-R0),并根据结果设置CPSR的标志位,与C位有关,因为没有产生借位,所以C位=1,其于的N、Z、V、Q为0,因为是在管理模式,所以0~4位是0B10011=13 MRS R0,CPSR ;传送CPSR的内容到R0,这样传送主要是为了便于观察CPSR的值 CMP R1,#100 ;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位 MRS R0,CPSR ;传送CPSR的内容到R0 LDR R0,=0X20000013 ;将0x20000013赋值给R0 MSR CPSR_cf,R0 ;传送R0的内容到CPSR ;c 指CPSR中的control field ( PSR[7:0]);f 指flag field (PSR[31:24]);x 指extend field (PSR[15:8]);s 指status field ( PSR[23:16]) MRS R1,CPSR ;传送SPSR的内容到R1,这样传送主要是为了观察CPSR的值。
TEQ R0,R1 ;将寄存器R0的值与寄存器R1的值按位异或,并根据结果设置CPSR的标志位 MRS R0,CPSR ;传送CPSR的内容到R0,为0X40000013,因为运算结果是0,所以Z位为1, LDR R0,=0x01 ; TEQ R0,#0x10 ; MRS R0,CPSR ;传送CPSR的内容到R0 LDR R0,=0x00 ; LDR R1,=0X01 ; LDR R2,=0X02 ; ADD R0,R1,R2 ;R0=R1+R2 ADD R0,R1,#16 ;R0=R1+16 ADD R0,R1,R2,LSL#1 ;R0=R1+(R2<<1) SUB R0,R0,R1 ;R0=R0-R1 RSB R0,R1,R0 ;R0=R0-R1逆向减法指令 AND R0,R0,#1 ;逻辑与,保持R0的0位,其余位清零 ORR R0,R0,#3 ;逻辑或,设置R0的0、1位,其余位保持不变 EOR R0,R0,#0x0c ;逻辑异或,反转R0的2、3位,其余位保持不变 BIC R0,R0,#3 ;该指令清除 R0 中的位 0、1,其余的位保持不变 MOV R0,R1 ;将寄存器r1的值赋给r0 MOV R1,R0,LSL#3 ;将寄存器R0的值左移3位后传送到R1 mov r14,#0x8000 ; mov pc,r14 ;将寄存器R14的值传送到PC,常用于子程序返回 END(2)观察程序运行过程中寄存器的状态!对应程序分析寄存器的结构是否正确。
3) 跳转指令实验(1)实验步骤与1)相同,在新建的.s文件中输入以下汇编代码 AREA B_JUMP,CODE,READONLY ENTRY ;****************************************************************************; 跳转指令;****************************************************************************startPRO1 LDR R0,=&0 BL PRO2 ;无条件跳转到PRO2处执行,并将当前PC值保存到R14中,R14为子程序链接寄存器(LR) CMP R0,#&4 BEQ PRO3 ;当R0=4时,跳转到PRO3PRO2 ADD R0,R0,#&1 ;子程序循环加1,直到r0=4 MOV PC,LR ;子程序执行完毕返回调用处PRO3 LDR R0,=&8 B . ;保留 END(2)观察程序运行过程中寄存器的状态!对应程序分析寄存器的结果是否正确实验(二) 汇编语言和C语言的混合编程1. 实验目的(1) 熟悉ADS环境下的混合编程(2) 学习使用ADS环境下编译、下载、调试并跟踪程序的方法。
2. 实验器件 PC一台3. 实验内容(1) 在汇编语言中对寄存器R0、R1、R2赋值,通过调用C语言中的加法程序,将三个寄存器的值相加,加法运算后的结构返回到R02) 首先编写汇编和C语言程序,通过AXD调试程序,使程序单步运行,在寄存器窗口观察程序过程及结果3) 编写汇编程序,实现三个数的加法计算并执行程序,观察程序的运行结果,并与内容(2)的运行结果相比较4. 实验步骤(1) 打开ADS集成开发环境,新建一个项目文件(2) 新建一个init.s文件,在新建的init.s文件中编写系统初始化的汇编代码这个程序是该项目文件的入口程序 AREA asm,CODE,READONLY IMPORT add ENTRY LDR r0,=0x1 LDR r1,=0x2 LDR r2,=0x3 BL add ;result saved in r0 B . END(3) 新建一个main.c文件,在新建的main.c文件中编写一段加法程序,被汇编调用 int add(int a, int b, int c){ return a+b+c;}(4) 打开AXD调试程序,单步运行,观察寄存器状态。
5) 新建一个项目文件,编写实现三个数加法运算的汇编程序,在AXD中调试程序,单步执行,观察寄存器状态实验(三)Linux的相关操作1. 实现与Windows的文件共享(1) 启动虚拟机下的“Linux操作系统”(2) 点击“虚拟机”→ “安装VMware工具”,弹出“/mnt/cdrom”,此文件夹下包含WMwareTools-5.5.1-19175i386.tar.gz和WMwareTools-5.5.1-19175i386.rpm(3)将WMwareTools-5.5.1-19175i386.tar.gz复制到\tmp文件夹下,命令为:cp WMwareTools-5.5.1-19175i386.tar.gz /tmp(此时在/mnt/cdrom文件夹下)(4)解压缩:tar -xzvf WMw。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


