实验五 (ARM指令系统实验二)

合集下载

ARM实验二报告

ARM实验二报告

汇编语言与接口技术实验报告ARM汇编语言程序设计院系信科院专业班级计科1201学生姓名学号指导教师提交日期 2015 年 5 月 15 日一、实验目的●初步学会使用IAR EWARM 开发环境及ARM 软件模拟器。

●通过实验掌握简单ARM 汇编指令的使用方法。

●通过实验掌握使用ldm/stm、b、bl 等指令完成较为复杂的存储区访问和程序分支,学习使用条件码,加强对CPSR 的认识。

●通过实验掌握 ARM 处理器16 位Thumb 汇编指令的使用方法。

二、实验内容●利用实验参考程序学习使用ldr/str、mov 等指令访问寄存器或存储单元。

使用add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。

●编写程序循环对R4~R11 进行累加8 次赋值,R4~R11 起始值为1~8,每次加操作后把R4~R11 的内容放入SP 栈中,SP 初始设置为0x800。

最后把R4~R11 用LDMFD 指令清空赋值为0。

●新建工程,并自行编写汇编程序,分别使用ldr、str、ldmia、stmia 操作,实现对某段连续存储单元写入数据,并观察操作结果。

学习分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。

●编写程序实现50!(即50的阶乘)。

●编写程序从ARM状态切换到Thumb,在ARM 状态下把R2 赋值为0x12345678,在Thumb状态下把R2 赋值为0x87654321。

同时观察并记录CPSR、SPSR 的值,分析各个标志位。

三、实验设备1. UP-TECH S2410实验平台,ARM标准/增强型仿真器套件2. PC 操作系统WIN98 或WIN2000 或WINXP,IAR EWARM集成开发环境,仿真调试驱动程序(H-JTAG)。

四、实验参考程序#*********************************************************************************************# NAME: ARMcode1.s *# Author: Embest *# Desc: ARMcode examples *# copy words from src to dst *# History: shw.He 2005.02.22 *#*********************************************************************************************NAME mainPUBLIC __iar_program_startSECTION `.text`:CODE:NOROOT(2)ARM ; ARM mode__iar_program_startmain:ldr r0, =src /* r0 = pointer to source block */ldr r1, =dst /* r1 = pointer to destination block */mov r2, #num /* r2 = number of words to copy */mov sp, #0x400 /* set up stack pointer (r13) */blockcopymovs r3,r2, LSR #3 /* number of eight word multiples */beq copywords /* less than eight words to move ? */stmfd sp!, {r4-r11} /* save some working registers */octcopyldmia r0!, {r4-r11} /* load 8 words from the source */stmia r1!, {r4-r11} /* and put them at the destination */subs r3, r3, #1 /* decrement the counter */bne octcopy /* ... copy more */ldmfd sp!, {r4-r11} /* don't need these now - restore originals */ copywordsands r2, r2, #7 /* number of odd words to copy */beq stop /* No words left to copy ? */ wordcopyldr r3, [r0], #4 /* a word from the source */str r3, [r1], #4 /* store a word to the destination */subs r2, r2, #1 /* decrement the counter */bne wordcopy /* ... copy more */stopb stopALIGNsrcDCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dstDCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END五、程序运行测试实验代码(替换参考程序的main部分)及测试结果如下:实验1LDR R0, =SRCLDR R1,=DSTMOV R2,#55MOV SP,#0x400BLOCKCOPYMOVS R3,R2, LSR #3BEQ COPYWORDSSTMFD SP!, {R4-R11}OCTCOPYLDMIA R0!, {R4-R11}STMIA R1!, {R4-R11}SUBS R3, R3, #1BNE OCTCOPYLDMFD SP!, {R4-R11}COPYWORDSANDS R2, R2, #7BEQ STOPWORDCOPYLDR R3, [R0], #4STR R3, [R1],#4SUBS R2, R2, #1BNE WORDCOPYSTOPB STOPALIGNSRCDCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4DSTDCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END实验2STARTldr r0,=SRCmov r2,#8mov sp,#0x800mov r4,#1mov r5,#2mov r6,#3mov r7,#4mov r8,#5mov r9,#6mov r10,#7mov r11,#8LOOPadd r4,r4,#1add r5,r5,#1add r6,r6,#1add r7,r7,#1add r8,r8,#1add r9,r9,#1add r10,r10,#1add r11,r11,#1stmfd sp!,{r4-r11}subs r2,r2,#1bne LOOPLDMIA r0!,{r4-r11}STOPLTORGSRCDCD 0,0,0,0,0,0,0,0 exit: B exitEND实验3main:STARTmov r0,#0x3000mov r1,#0x10000001mov r2,#100LOOPstr r1,[r0],#4add r1,r1,#1subs r2,r2,#1bne LOOPmov r0,#0x3000mov r2,#100mov r9,#0LOOP1ldr r1,[r0],#4adds r8,r1,r8adc r9,r9,#0subs r2,r2,#1bne LOOP1STOPb STOPEND实验4STARTmov r8,#20mov r9,#0sub r0,r8,#1LOOPmov r1,r9umull r8,r9,r0,r8mla r9,r1,r0,r9subs r0,r0,#1bne LOOPEND实验5STARTldr r2,=0x12345678CODE16ldr r2,=0x87654321END。

实验五 ARM 指令系统实验二

实验五 ARM 指令系统实验二

实验五ARM指令系统实验二注意:本实验在模拟环境下进行,请不要打开实验箱电源!!一、实验目的:1、掌握MDK开发环境下多文件编程的方法;二、实验原理我们编程时会以工程为单位来解决一个问题,为了解决问题的复杂性和人脑的局限性之间的矛盾,编程人员常常把把一个大问题分解成若干过小问题,每个小问题的解决方法在一个文件中实现,把每个文件解决问题的方法综合起来就够成了解决了大问题的方法。

这些文件之间是存在一定关系的,如果一个文件与其他文件不发生任何关系,那么就没有在工程中存在的必要了!从ARM汇编程序员的角度理解这种关系为:一个文件有标号被其他文件引用,另一个文件应用了其他文件的标号;这用引用与被应用的关系分别通过import和export实现。

例如:三、实验任务下面文件中的定义的数据为某科目学生成绩,试编程找出最高分数的放在maxscore,score.s的内容如下:;score.sarea score,data,readwritescoresdcb65,78,92,47,77,83,59,93,82,97;学生成绩numofstudentdcb10;学生人数maxscoredcb0;存放最高分数end四、实验步骤;A.s……export labellabel……;B.s……import label bl label……说明标号label可以被其他文件引定义了标号label说明标号label可以被其他文件引引用了标号label1、用自然语言描述解决给问题的算法,可以尽可能的抽象!2、建立工程并建立源文件score.s并把输入(复制)上面内容,并将该文件添加到工程;3、建立文件maxoftwo.s,在文件中实现子程序getmax,调用者传入的参数位于r0、r1中,要求找出r0、r1中的较大值,并把较大值保存在r0当中,该文件架构如下:;maxoftwo.s;两个要比较的数在r0,r1中;比较所得的最大数放在r0当中area max,code,readonlygetmaxend4、建立文件init.s,通过调用maxoftwo.s和score.s完成任务,自己编写代码,注意下页有该文件的参考代码,但希望同学在实验课上尽量不看参考代码或少看代码!import scoresimport numofstudentimport maxscoreimport getmaxarea init,code,readonlyentryldr r2,=scores;指向学成成绩ldr r3,=numofstudentldrb r3,[r3];获取学生人数ldrb r0,[r2];获取第一个学生的成绩,并暂时认为它是最大的loopcmp r3,#0beq exit;判断是否比较结束ldrb r1,[r2],#1;获取要比较的数bl getmaxsub r3,r3,#1;人数减一b loopexitldr r1,=maxscorestrb r0,[r1];将结果保存在maxscore中b.end。

5_ARM实验报告

5_ARM实验报告

实验五数码管显示实验实验目的:通过实验掌握 LED 的显示控制方法;掌握对存储区进行访问的方法。

一.实验内容:编写程序使实验板上八段数码管循环显示0到9字符。

二.实验原理:1.八段数码管的结构八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母。

见图5-1-2。

图5-1-2 八段数码管的结构2八段数码管的硬件电路原理EMBEST ARM EDUKIT II教学电路中,使用的是共阳极八段数码管,数码管的控制通过芯片ZLG7290 控制,各段的控制信号是芯片ZLG7290 的SEGA ~SEG G 引脚控制,需要显示的段码通过IIC 总线传送到该芯片。

如图5-1-1、图5-1-2、图5-1-3所示。

图5-1-1 八段数码管控制电路图5-1-2 八段数码管控制电路3.八段数码管的类型八段数码管有两种不同的形式:一种是八个发光二极管的阳极都连在一起的,称之为共阳极八段数码管;另一种是八个发光二极管的阴极都连在一起的,称之为共阴极八段数码管。

工作原理以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,制信号为高电平时点亮。

电平信号按照dp→g→f→e……a的顺序组合形成的数据字称为该字符对应的段码,常用字的段码表如下:4.八段数码管的显示方式有两种,分别是静态显示和动态显示。

静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。

动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。

三.实验工具:硬件:Embest Arm EduKit II 实验平台,Embest ARM标准/增强型仿真器套件,PC机;软件:Embest IDE Pro 2004集成开发环境,Windows 98/2000/NT/XP操作系统。

实验二_ARM汇编语言程序设计

实验二_ARM汇编语言程序设计

实验二ARM汇编语言程序设计实验目的1、了解ARM汇编语言程序的结构特点2、了解ARM汇编语言程序的编写方法3、掌握用ARM汇编语言设计简单程序实验仪器设备及软件ARM实验箱,计算机,ADS程序开发软件实验原理1、存储空间的格式ARM920将存储空间视为从0开始由字节组成的线性集合,字节0-3中保存了第一个字,字节4-7中保存了第二个字,依此类推。

字节还可以按小端格式或大端格式排列。

ARM实验箱中存储器的配置见附录C。

2、ARM的寄存器ARM状态下任何时刻都可以看到16个通过寄存器(r0-r15),1或2个状态寄存器(CPSR,SPSR),在特权模式下会切换到具体模下的寄存器组。

每个寄存器都是32位的,并且每个通用寄存器都可以作为数据处理的源数据或目标数据寄存器。

因此可以编写出更精简的程序。

3、ARM指令的条件执行状态寄存器中的N,Z,C,V是数据处理指令影响的标志。

几乎每条ARM指令可以根据状态位或状态位的逻辑运算有条件执行。

条件执行的指令后缀参考教材。

4、桶形移器ARM的桶形移位器,使ARM指令的中第二个操作数非常录活。

利用移位器,一条ARM 指令可以完成更多功能。

移位操作有:LSL 逻辑左移LSR 逻辑右移ASL 算术左移ASR 算术右移ROR 循环右移RRX 带扩展循环右称实验内容1、把内存中ramaddr开始的ramword个字清零(1)用后变址法ramaddr equ 0x31000000ramword equ 64clrrammov r0,#0mov r1,#ramwordldr r2,=ramaddrclrram1str r0,[r2],#4subs r1,r1,#1bne clrram1mov pc,lrLTORG(2)用前变址法clrrambakmov r0,#0mov r1,#ramwordldr r2,=ramaddr-4clrram2str r0,[r2,#4]!subs r1,r1,#1bne clrram2mov pc,lrLTORG2、把寄存器中,r0-r12的32位无符号32位数进行求和,和的低32位保存在r1中,高32位保存在r0中。

ARM培训实验指导书(第一版)

ARM培训实验指导书(第一版)

NXP 大学计划指定民大实验教材ARM与嵌入式技术版本:2008年1月第一版目录实验一熟悉Embest IDE集成开发环境 (1)实验二ARM汇编指令实验(1) (4)实验三ARM汇编指令实验(2) (9)实验三存储器实验.................................................................................... 错误!未定义书签。

实验四I/O接口实验............................................................................... 错误!未定义书签。

实验五中断实验........................................................................................ 错误!未定义书签。

实验六串口通信实验................................................................................ 错误!未定义书签。

实验七数码管(LED)显示实验 ............................................................ 错误!未定义书签。

实验八RTC及数码管显示实验(设计性实验).................................... 错误!未定义书签。

实验九液晶显示实验................................................................................ 错误!未定义书签。

实验十键盘控制实验................................................................................ 错误!未定义书签。

ARM实验指导书(wjq)

ARM实验指导书(wjq)

实验一、ARM开发环境的建立一、实验目的学会安装ADS集成环境及连接仿真硬件平台。

二、实验设备硬件:嵌入式实验平台一套、仿真器一个、PC机一台。

软件:Windows 98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容正确安装完全版ARM ADS1.2集成环境,并了解JTAG硬件仿真环境的一些设置和工作方法。

四、实验原理ARM ADS (ARM DEVELOPER SUITE )是ARM平台集成开发环境,它包括两个部分:CodeWarrior for ARM Developer Suite 和AXD debugger 。

AXD调试通过Windows驱动程序及中间件软件与JTAG接口连接,并通过JTAG接口与硬件平台连接本实验使用ARMJtagDebugFinal中间件软件通过LPT1并行接口经JTAG协议转换连接ARM目标板。

五、实验操作步骤1、安装ADS1.2集成开发环境, 把ADS1.2_Licence.rar中的license.dat文件copy到“C:\Program Files\ARM\ADSv1_2\licenses”路径中,覆盖原来的license.dat,若安装目录设置为其他目录,必须copy到相应目录中。

2、启动CodeWarrior for ARM Developer Suite集成开发环境,设置许可证文件指向最新license.dat文件。

3、首次使用时,①把文件夹ARMJtagDebugFinal.rar中的文件copy到“C:\Program Files\ARM\ADSv1_2\ARMJtagDebugFinal”目录中或其他安装目录;②先安装ARMJtagDebugFinal驱动软件(以后不用再安装),即执行文件夹中的“安装驱动.exe”程序,并点击安装按钮,分别安装“并口驱动”和“OCX”;③在桌面建立Arm7Agent和Arm9Agent 两给快捷连接,分别指向ARMJtagDebugFinal目录中的Arm9.exe, Arm7.exe ;4 安装完毕驱动后,每次调试前,必须先启动运行Arm7Agent或Arm9Agent调试代理软件(中间件),调试过程始终不要关闭调试代理程序,启动并正确连接硬件目标系统之后,既可以开始调试ARM7系统或ARM9系统;5、如果在以后的使用过程中发现程序无法启动,重新执行“安装驱动.exe”即可;6、在ADW(SDT)/AXD(ADS)的调试配置选项里选择remote_a.dll7、在ADW/AXD的调试配置里IP地址必须填写:127.0.0.18、具体的调试使用可以参考"jtag.exe"的使用方法六、常见问题1、THUMB/ARM混合编程时断点设置要素当CPU处于一种CPU模式时(THUMB或ARM) 断点只可以设置在当前模式下的指令处不可以设置在另一种模式下的指令解决方案设置一个断点在CPU模式切换指令处(如BX) 当程序运行到此指令并停下来后然后通过单步执行(Step)进入另一种状态这时候就可以在当前模式下任意设置断点了;2、THUMB/ARM混合编程时因为ADW/AXD启动时默任的CPU模式为ARM模式如果你启动调试前你的ARM CPU 正在执行Thumb模式指令那么将会导致调试错误解决方案按一下你的板子的复位键,然后再启动ADW/AXD即可;3、为了加快软件影响单步执行速度现在暂时屏蔽了semihosting 功能如果你需要此功能可以EMAIL索取;4、如果出现无法逼使CPU进入调试的提示只需要复位你的板子,重新启动软件即可;5、如果发现软件没有任何动作把它关了再启动;6、如果发现软件根本无法运行看不到其运行界面那么执行“安装驱动.exe”,重新驱动OCX即可;7、如果出现打开并口失败,那么执行安装驱动.exe , 重新并口驱动即可;8、如果提示检测不到ARM核如果你的CPU没坏供电正常那么就一定是你的JTAG板子问题了,应该参考常用的那种"SDT"或"Wiggler"接线然后在JTAG调试软件选择对应的选项SDT或wiggler或自定义;9、排除这些如果出现其他的调试错误,那么就是你设置ADW/AXD或你的板子问题了10、一些常见问题请参考 上的BBS;11、有任何疑问请EMAIL sendtoyou@ Tang-ZhongGen,调程序实验二、ADS 1.2 集成开发环境练习ARM ADS(ARM Developer Suite V1.2 )是ARM公司,为开发ARM内核处理机而提供的集成开发环境(IDE)和集成调试环境(ICE)。

5_ARM实验报告

5_ARM实验报告

5_ARM实验报告
实验名称:ARM处理器实验报告
实验目的:通过实验掌握ARM处理器的基本结构和工作原理,了解ARM指令的执行过程以及汇编语言编程的基本方法。

实验设备:ARM处理器开发板、电脑、开发软件Keil等。

实验步骤:
1. 准备工作:连接ARM开发板和电脑,打开Keil软件,新建一个工程。

2. 编写程序:在Keil软件中编写一个简单的程序,比如将两个数相加并将结果输出。

3. 编译程序:通过Keil软件进行编译,生成可执行文件。

5.调试程序:在ARM开发板上运行程序,并观察程序的运行结果。

6.分析程序:分析程序的运行过程,了解ARM指令的执行过程和程序的运行逻辑。

实验结果:
通过本次实验,我对ARM处理器的基本结构和工作原理有了更深入的了解。

我了解了ARM指令的执行过程,掌握了汇编语言编程的基本方法。

在实验中,我成功编写了一个简单的程序,并在ARM开发板上成功运行并输出了结果。

总结与反思:
通过本次实验,我对ARM处理器有了更深入的了解,对汇编语言编程也有了更多的实践经验。

我发现在编写程序时需要考虑指令的执行顺序和逻辑关系,需要注意程序的优化和逻辑性。

在今后的学习和工作中,我将继续深入学习ARM处理器的原理和应用,不断提高自己的编程技能和实践能力。

结论:
本次实验让我在实践中掌握了ARM处理器的基本原理和工作方法,提高了自己的实践能力和编程技能。

我将继续学习和实践,不断提高自己在ARM处理器领域的水平,为将来的工作和研究打下坚实的基础。

5_ARM实验报告

5_ARM实验报告

5_ARM实验报告[实验报告]实验名称:5_ARM实验实验目的:1.了解ARM架构的特点和基本原理;2.掌握ARM指令集和编程模式;3.学会使用ARM开发工具进行编程和调试;4.实现一个简单的ARM程序并运行。

实验器材:1.ARM开发板;2.电脑;B数据线。

实验步骤:1.搭建开发环境根据实验指导书的步骤,将开发板与电脑连接,安装开发工具和驱动程序。

2.学习ARM指令集和编程模式通过阅读教材和参考资料,了解ARM指令集的基本原理和常用指令。

同时,学习ARM的编程模式,包括程序的加载、运行和调试等。

3.编写ARM程序根据实验要求,编写一个简单的ARM程序。

这个程序可以是一个简单的计算器,或者是一个LED灯的控制程序等。

编写程序时需要注意使用合适的指令和编程模式。

4.编译和烧录程序使用ARM开发工具,将编写好的程序进行编译和烧录。

编译过程会生成一个可执行的二进制文件,烧录过程会将这个二进制文件加载到开发板上。

5.调试并运行程序通过ARM开发工具进行调试,检查程序中可能存在的错误,并进行修正。

调试过程中需要注意程序的执行流程和变量的值等。

调试完成后,运行程序并观察其运行结果。

实验结果与分析:在实验中,我成功地搭建了ARM的开发环境,学习了ARM指令集和编程模式,并编写了一个简单的ARM程序。

经过编译和烧录,我成功地将程序加载到开发板上,并通过调试和运行,验证了程序的正确性。

实验中遇到的问题和解决方法:在编写程序的过程中,我遇到了一些语法错误和逻辑问题。

通过阅读资料、查找文档和与同学的讨论,我解决了这些问题。

在调试的过程中,我还遇到了一些程序运行速度过慢的问题。

通过优化代码和使用合适的编译选项,我解决了这个问题。

实验总结:通过这次实验,我对ARM架构有了更深入的了解,掌握了ARM指令集和编程模式的基本原理和使用方法。

通过编写和调试一个简单的ARM程序,我提高了自己的编程能力和解决问题的能力。

实验还让我明白了实际应用中ARM的重要性,以及它对于现代计算机系统的作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五 ARM 指令系统实验二
注意:本实验在模拟环境下进行,请不要打开实验箱电源!!
一、 实验目的:
1、 掌握MDK 开发环境下多文件编程的方法;
二、 实验原理
我们编程时会以工程为单位来解决一个问题,为了解决问题的复杂性和人脑的局限性之间的矛盾,编程人员常常把把一个大问题分解成若干过小问题,每个小问题的解决方法在一个文件中实现,把每个文件解决问题的方法综合起来就够成了解决了大问题的方法。

这些文件之间是存在一定关系的,如果一个文件与其他文件不发生任何关系,那么就没有在工程中存在的必要了!从ARM 汇编程序员的角度理解这种关系为:
一个文件有标号被其他文件引用,另一个文件应用了其他文件的标号;这用引用与被应用的关系分别通过import 和export 实现。

例如:
三、 实验任务
下面文件中的定义的数据为某科目学生成绩,试编程找出最高分数的放在maxscore ,score.s 的内容如下:
;score.s
area score,data,readwrite
scores
dcb 65,78,92,47,77,83,59,93,82,97;学生成绩
numofstudent
dcb 10;学生人数
maxscore
dcb 0;存放最高分数
end
四、 实验步骤
;A.s
……
export label
label
…… ;B.s …… import label bl label ……
说明标号label 可以被其他文件引定义了标号label 说明标号label 可以被其他文件引引用了标号label
1、用自然语言描述解决给问题的算法,可以尽可能的抽象!
2、建立工程并建立源文件score.s并把输入(复制)上面内容,并将该文件添加到工
程;
3、建立文件maxoftwo.s,在文件中实现子程序getmax,调用者传入的参数位于
r0、r1中,要求找出r0、r1中的较大值,并把较大值保存在r0当中,该文件架构如下:
;maxoftwo.s
;两个要比较的数在r0,r1中
;比较所得的最大数放在r0当中
area max,code,readonly
getmax
end
4、建立文件init.s,通过调用maxoftwo.s和score.s完成任务,自己编写代码,
注意下页有该文件的参考代码,但希望同学在实验课上尽量不看参考代码或少看代码!
import scores
import numofstudent
import maxscore
import getmax
area init,code,readonly
entry
ldr r2,=scores;指向学成成绩
ldr r3,=numofstudent
ldrb r3,[r3];获取学生人数
ldrb r0,[r2];获取第一个学生的成绩,并暂时认为它是最大的loop
cmp r3,#0
beq exit;判断是否比较结束
ldrb r1,[r2],#1;获取要比较的数
bl getmax
sub r3,r3,#1;人数减一
b loop
exit
ldr r1,=maxscore
strb r0,[r1];将结果保存在maxscore中
b .
end。

相关文档
最新文档