ARM汇编实验报告

ARM汇编实验报告
ARM汇编实验报告

《嵌入式系统原理与应用B》课程实验报告

ARM汇编语言编程与调试

要求完成的主要实验

1、给出的数据中寻找最大、最小数问题

2、两种求和运算的编程与调试

3、第四章作业第9题

4、排序冒泡程序的调试与总结

5、第四章作业第11题

说明:标注完成的实验,未完成的给予说明

专业名称:通信工程

班级:1510班

学生姓名:石龙飞

学号(8位):03151307

指导教师:刘钊远

给出的数据中寻找最大、最小数问题

一、实验目的

1、学习汇编软件的安装、使用,熟悉汇编环境。

2、学会使用汇编软件,如何新建一个工程,如何书写源代码,如何进行链接、编译,以及如何调试。

3、尝试一些简单的指令,学会用汇编指令写一些简单的程序。

二、实验内容

编写一个汇编程序,要求在给定的一组数中找到最大数和最小数。

三、实验主要步骤

1、首先建立一个工程

2、再新建.s的源文件,添加到工程中

3、编写源代码,这里主要是实现在一组数中寻找最大数和最小数,最后将找到的两个数放到相应的寄存器中。

4、进行链接编译,看看有没有语法的错误,如果有错误编译器会提示错误的类型以及在哪里出错。

5、进行debug调试,查找代码中的逻辑错误,若无逻辑错误,可在debug界面查看运行结果,其最需要的关注的几个地方是菜单栏的一组运行按钮、源码执行的步骤以及断点、左边的寄存器状态、下方的存储器状态,将这些综合起来,就可以很明确的回到程序如何运行,运行结果如何。

四、实验代码

五、实验总结与分析

1、实验结果分析

其中用红色方框框起来的是最后程序运行的结果,也就是在R3中保存了最小数在R2中保存了最大数,完成了实验要求。

2、在用汇编语言编程之前首先要看看有没有汇编软件ADS、没有的话需要安装,WindowsXP安装起来比较简单,只需要点击setup,一直点击写一部就可以,但是如果是Windows 7或者更高版本的话就需要在setup的属性里点击兼容WindowsXP,运行时以管理员身份运行才能正确进行安装。

两种求和运算的编程与调试

一、实验目的

1、掌握循环的使用技巧,主要确定循环的上下界,以及循环体里需要执行的代码,防止一些越界的操作。

2、尝试不同的求和运算的算法。

二、实验内容

给定一个正整数,求从零到这个数的所有整数的和。简单得对问题进行分析可知,这个功能能过用两种方式实现,一种是循环,一种是直接用求和公式计算出来,如果从算法的时间复杂度来说,那肯定是后者时间复杂度低,只有O(1),但是从学习的角度,还是要练习一下循环结构,因此,这里主要用循环语句实现,以研究其中的问题。

三、实验主要步骤

1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。

2、链接、编译源文件,检查语法错误

3、用debug进行调试,观察寄存器的状态,在stop前打断点,全速运行代码,这样就可以在代码最后天下来,查看运行结果。

四、实验代码

五、实验总结与分析

1、实验结果分析

用红色框圈起来的是最后执行的结果,也就是将最后0~100的和放在了R3中,是0x13BA,二这个程序采用的是循环的方式求1~100的和,所以最后一个数字是100,正是R2中的0x64。

2、实验总结:因为这个程序里用到了循环语句,所以就有几个点需要注意,也就是循环的上下界和循环体力边的语句。在代码实现中,将R1寄存器的值置为100,然后再循环体里每次减一,然后和0进行比较,大于零的话继续,小于等于零的话就跳出循环。这里容易出错的地方就是最后到底是和谁比较或者R1的初值给多少合适。再循环体里主要做了两件事,R2从零开始每次加一,而R3就是截止目前所有数的和。

排序冒泡程序的调试与总结

一、实验目的

1、更加深入理循环程序设计,注意循环嵌套中的一些问题,比如条件判断、步长、两层循环中间的代码设计。

2、深入学习掌握debug调试的使用技巧,以及存储器窗口数据的观察,在存储器中找到代码需要的地址。

3、学会如何遍历存储在存储器中的数据,将其读入寄存器进行处理。

二、实验内容

利用冒泡排序将给定的一组数进行排序,这里采用升序,在排序完和排序后查看存储器的状态,检查排序是否成功。

三、实验主要步骤

1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。

2、链接、编译源文件,检查语法错误。

3、用debug进行调试,观察寄存器的状态,在stop前打断点,全速运行代码,这样就可以在代码最后天下来,查看运行结果。

四、实验代码

五、实验总结与分析

1、实验分析

第一张图为排序前寄存器以及存储器的状态及数据,主要观察两个部分,一个是寄存器的R2,它代表的是存放哪些数组地址的首地址,所以从这里开始读取数据。然后找到地址为0x8040的存储器,可以看到其中存放了数组中的十个数,其顺序和定义时的顺序是一样的,也就是没有顺序。

再看第二张图,这是程序执行完以后的寄存器和存储器的状态以及数据,从标红的数据看一看出,这十个数据都发生了变化,第一个是最小的0x00,最后一个是最大的0x0100,这样就将这十个数排序好了。

冒泡排序的实现方法有很多种,比如可以先将最大的数推到数组的末尾,也可以将最小的数先拿到数组的前边,两者道理其实都是一样,时间复杂度更是一样,都是O(N2),对于大型的数据来说,最好还是采用快速排序,它的速度是相当快的。

2、实验总结:在定义数组的时候最好将其直接定义为十六进制,这样在存储器中观察的时候就非容易,不需要自己进行十进制和十六进制的转化。在代码全速运行前先进行单步的运行,以确定数组开始的地址,这样就能在存储器中找到对应的数据了。

统计字符个数

一、实验目的

1、学会使用字符串编程,如何在代码中定义字符串,字符串字存储器中占有几个字节,如何将字符串中的每个字符取出来。

2、再一次熟悉循环结果,CMP的条件判断,如何执行。

二、实验内容

自定义一个字符串,编写代码来统计这个字符串中的字符个数。这里还是采用循环的方法来遍历整个字符串,没遍历一次字符数目加一,然后判断当前是不是0,时0则结束。

三、实验主要步骤

1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。

2、链接、编译源文件,检查语法错误。

3、用debug进行调试,观察寄存器的状态,由于此处的数据量较少,因此可以点击单步运行,一直到运行到stop,在此期间观察R1和R2数据的变化,R1代表的是字符数目,R2代表的是当前字符的ASCII码值,当R2的值为0时退出循环。

四、实验代码

五、实验总结与分析

1、实验分析

图一是程序运行前的各寄存器和存储器的状态以及数据,可以看到字符串被存储在0x802c开始的地址中,每个字符占一个字节,因此可以知道,在往外读取的时候应该一次读取一个字节,R1的值是字符个数,再运行的时候,每读取一个字符,R1就加一,这样到最后就能统计到这个字符串总的字符个数。

图二是程序运行结束时的寄存器的数据,可以看到R1最后统计的字符个数是0x0c,也就是11个,而R2当前的值是0x00,也就是0结束标志,这刚好符合事先给定的字符串“Hello, ARM!”。

2、实验总结:实验中比较容易出错的地方就是读取字符串中的每个字符,单个字符在存储器中是以一个字节的ASCII码来存储的,所以每次读取完指针加一就好。

合并两个有序数组到第三个数组

一、实验目的

1、熟悉掌握比较跳转结构,能在程序中对复杂的跳转结构处理的清晰明朗,设计良好的判断语句。

2、深入理解存储器中数组的存放顺序,能够按照程序给定的条件按需取出需要的数据进行处理

二、实验内容

已知BUF1中有N1个按从小到大排序的互补相等的字符号,BUF2中有N2个按从小到大排序的互不相等的字符号,将BUF1和BUF2中的数合并到BUF3中按从小到大的顺序排序,且互不相等。

三、实验主要步骤

1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。

2、链接、编译源文件,检查语法错误。

3、用debug进行调试,观察寄存器的状态,由于此处的数据量较少,因此可以点击单步运行,一直到运行到stop,在此期间观察R1~R10的变化。

四、实验代码

五、实验总结与分析

1、实验分析

实验中用到了复杂的判断和跳转,其中需要分各种情况进行讨论,比如两个数组中的数据是否都已经存完,或者第三个数组是否存满,来确定下一步需要做什么,在这个程序中处理的不好的地方是当有重复的数据的时候,最后第三个数组不能很好的判断,出现了问题,没有相同数据的情况下可以正常运行。

一下两图是运行前后寄存器和存储器数据的对比,可以看出来,除去重复数据,其他都正常运行。

2、实验总结:此程序最难得地方就在于如何如何设置条件进行判断,如何进行跳转,每种情况可能会如何出现等等都是需要慎重考虑的问题。

arm实验报告最终版

ARM与嵌入式技术 实验报告 专业班级:10通信工程1班 姓名:万洁 学号:100103011125 实验日期:2013年5月28日 指导老师:郑汉麟

1、 通过实验掌握ARM 指令的特点和寻址方式; 2、 掌握简单的ARM 汇编语言的程序设计; 3、 了解集成开发环境 Embest IDE 及其开发软件的应用; 、实验环境 Embest IDE 应用于嵌入式软件开发的新一代图形化的集成开发环境,它包括一套完备 的面向嵌入 式系统的开发和调试工具。其开发软件 Embest IDE for ARM 是集编辑器、编译 器、调试器、工程管理器( projectma nager )于一体的高度集成的窗口环境,用户可以在 Embest IDE 集成开发环境中创建工程、编辑文件、编译、链接、运行,以及调试嵌入式应 用程序。 三、实验步骤 1)新建工程: 运行Embest IDE 集成开发环境,选择菜单项 File 宀New Workspace ,如图一,系统弹 出一个对话框,键入文件名“ wj ”,如图二,点击 0K 按钮。将创建一个新工程,并同时创 建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程 .。 (老师提醒:不要放入Bin 文件夹中) ■ Emb?t QE Pre 亠 Educat 「販]£dii_Vww Buid frtbug D if** Qri+W 诊 Open-" Qrl*O 2)建立源文件: 点击菜单项 File T New ,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。 编辑完后,保存文件“ wj.s ”后缀,如图三,四。 Hr* Open Workspace.? 图一 ■■ rflJO IUU rl jil rd f rfl,rl Clop : h Ho. .end 图 tut vUrl:

ARM实验指导

ADS 集成开发环境及EasyJTAG 仿真器应用 ADS 集成开发环境是ARM 公司推出的ARM 核微控制器集成开发工具,英文全称为ARM Developer Suite,成熟版本为ADS1.2。ADS1.2 支持ARM10 之前的所有ARM 系列微控制器,支持软件调试及JTAG 硬件仿真调试,支持汇编、C、C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、Windows XP、Windows2000 以及RedHat Linux上运行。 这里将简单介绍使用ADS1.2 建立工程,编译连接设置,调试操作等等。最后还介绍了基于LPC2100 系列ARM7 微控制器的工程模板的使用,EasyJTAG 仿真器的安装与使用。 一、ADS 1.2 集成开发环境的组成 ADS 1.2 由6 个部分组成,如表1 所示。 表1 ADS 1.2 的组成部分 由于用户一般直接操作的是CodeWarrior IDE 集成开发环境和AXD 调试器,所以这一章我们只介绍这两部分软件的使用,其它部分的详细说明参考ADS 1.2 的在线帮助文档或相关资料。 1. CodeWarrior IDE 简介

ADS 1.2 使用了CodeWarrior IDE 集成开发环境,并集成了ARM 汇编器、ARM 的C/C++编译器、Thumb 的C/C++编译器、ARM 连接器,包含工程管理器、代码生成接口、语法敏感(对关键字以不同颜色显示)编辑器、源文件和类浏览器等等。CodeWarrior IDE 主窗口如图1所示。 2. AXD 调试器简介 AXD 调试器为ARM 扩展调试器(即ARM eXtended Debugger),包括ADW/ADU 的所有特性,支持硬件仿真和软件仿真(ARMulator)。AXD 能够装载映像文件到目标内存,具有单步、全速和断点等调试功能,可以观察变量、寄存器和内存的数据等等。AXD 调试器主窗口如图2 所示。

arm嵌入式实验报告完整版

arm嵌入式实验报告完整版 篇一:ARM嵌入式系统实验报告1 郑州航空工业管理学院 嵌入式系统实验报告 第 赵成,张克新 院姓专学 系:名:业:号:电子通信工程系周振宇物联网工程 121309140 电子通信工程系 XX年3月制 实验一 ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容

1.ADS1.2 IDE的安装、环境配置及工程项目的建立;2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加;(2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制;(4)使用查表法实现程序跳转;(5)使用BX指令切换处理器状态;(6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上;内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2;集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括两个软件组件。在ADS1.2

中建立 ARM Executable Image(ARM可执行映像)类型的工程,工程目标配置为 Debug;接着,还需要对工程进行目标设置、语言设置及链接器设置;最后,配置仿真环境为ARMUL仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名: AREA XTF,CODE,READONLY 声明32位ARM指令 R0arm嵌入式实验报告完整版) ADD R0,R1,R2 3.列写出使用LDR、STR指令的汇编程序,并在关键语句后面给出相应的注释。 AREA XTF,CODE,READONLY ;声明代码段XTFENTRY ;标示程序入口CODE32 ;声明32位ARM 指令START LDR R0,=1 ;加载数据LDR R1,=2LDR R3,=ADDR_1;载符号地址 ADD R2,R0,R1;R2[R3] ;数据空间定义 AREA Data_1,DATA,ALIGN=2 ADDR_1 DCD 0 END ;结束 4.“使用多寄存器传送指令进行数据复制”汇编程序分析。 LDR R0,=SrcData ;

ARM实验1

ARM技术原理与应用 实验报告 专业电子信息工程班级 学生姓名 学号 指导教师 2017年4月12 日

一、实验目的 (1)掌握ADS集成开发环境的创建; (2)掌握ADS环境下工程创建; (3)掌握ADS环境下汇编语言源程序创建、编辑、修改; (4)掌握ADS环境下汇编语言源程序的汇编操作; (5)掌握AXD环境下汇编语言程序的调试。 二、实验要求 1、实验必须在在ADS1.2环境下进行。 2、工程名、汇编语言源文件名按照下面规则命名: 工程名:pj+学号最后4位+其它字符 汇编语言源文件名:p+学号最后4位+其它字符+.s 例如:张维智同学学号最后4位是3134 因此,pj3134、pj3134a、pj31341等都是允许的工程名;而 p3134a.s、p3134b.s等都是允许的源文件名。 3、实验报告中需要说明实验中在ADS、AXD环境下进行的实际操作; 4、实验报告中应给出实际的实验操作及计算机的调试观察结果; 5、按照规定格式打印实验报告。 三、实验任务 1、在自己的笔记本电脑上安装ADS1.2ARM集成开发环境。同时,操作实验室台式机上ADS1.2以便熟悉实验室的ADS1.2集成开发环境。 2、参考课件文档:ARM汇编语言程序设计实验环境与工具的使用-笔记本电脑版-v2.doc,创建pjxxxx工程。 3、创建pxxxx.s汇编语言源程序。然后严格按照下面格式输入源程序。 AREA Example, CODE, READONLY Entry 才ode32 START: Mov R0,#5 MOV R2,#5 ;r2 MOV R0,0 mov R1,#0 LOOP: CUP R1,R2 BHI ADD_END ADD R0,R0 R1 ADD R1,R1,#1 B LOOP ADD_end B START End 在实验报告中列出上面自己创建的pxxxx.s汇编语言源程序。 4、将pxxxx.s汇编语言源程序添加到pjxxxx工程中。记录实验步骤和结果。 5、选Project->Make操作,对pxxxx.s汇编语言源程序进行汇编。记录错误数,出错行的

《嵌入式系统与开发》ARM汇编及接口设计-实验报告 - 答案

《ARM汇编与接口设计》 实验报告 学生姓名: 学号: 专业班级: 指导教师: 完成时间:

实验1 ARM汇编与S3C6410接口设计 一.实验目的 熟悉裸板开发环境构建,掌握利用ADS开发工具或arm-linux-gcc开发工具编写裸板系统下程序的基本步骤和方法,掌握裸板程序的基本架构,熟悉汇编设计的基本指令和伪指令的使用方法,掌握S3C6410接口开发基本方法和步骤,并编程设计LED流水灯和看门狗程序设计。深刻体会软件控制硬件工作的基本思路和方法。 二.实验内容 实验1.1 熟悉ADS开发工具或交叉编译器arm-linux-gcc的安装和基本使用 实验1.2 LED流水灯实验 实验1.3 看门狗实验 三.预备知识 C 语言、微机接口等 四.实验设备及工具(包括软件调试工具) 硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。 软件:WinXP或UBUNTU开发环境。 五.实验步骤 5.1 ADS开发工具安装和使用 步骤: 第一步,ADS工具安装在 平台 B.linux平台)下,按照类似于VC++ 第二步,利用ADS打开demo项目模板,查看ADS中配置中几个重要选项, 第三步,参照demo项目代码结构,编写裸板程序完成两整数加和两整数减函数,分别用C代码实现,写出完成汇编启动代码和C代码。 第四步 用ADS自带的ARM的汇编代码,b被编译器优化到寄存器中,函数返回汇编语句 。 5.2 arm-linux-gcc编译工具安装和使用

第一步:arm-linux-gcc(A. WINDOWS平台 B.linux平台)下,按照类似于gcc 第二步:参看相关实验样例,一般基于arm-linux-gcc编译的裸板程序通常包含汇编启动代码文件,C功能代码文件和make工具文件Makefile。 5.3 LED流水灯设计实验 本实验要求使用arm-linux-gcc编译。备注,控制LED1的GPIO口为GPM0 步骤1:编写代码 参看相关实验样例,编写LED1报警灯代码,实现LED1以1秒左右的时间进行闪烁,要求LED 驱动代码编写在leddrv.c中,功能代码编写在main.c文件中,启动代码文件和Makefile文件参照实验样例代码来设计。 则启动代码文件内容: 功能层main.c文件内容: 步骤2:编译 编译步骤为: 步骤3:加载到内存中运行

ARM实验汇编代码.

AREA Example1,CODE,READONLY ENTRY CODE32 START MOV R0,#15 MOV R1,#8 ADDS R0,R0,R1 B START END Test2.s X EQU 11 Y EQU 8 BIT23 EQU (1<<23 AREA Example3,CODE,READONLY ENTRY CODE32 START Y MOV R0,#X MOR R1,#Y ADD R3,R0,R1 MOV R8,R3

MVN R0,#0XA0000007 SUB R5,R0,R8,LSL #3 MOV R0,#Y ADD R0,R0,R0,LSL #2 MOV R0,R0,LSR #1 MOV R1,#X MOV R1,R1,LSL #1 CMP R0,R1 LDRHI R2,=0XFFFF0000 ANDHI R5,R5,R2 ORRLS R5,R5,#0X000000FF TST R5,#BIT32 BICNE R5,R5,#0X00000040 B START END //*******Test3.s******************** X EQU 11 Y EQU 8 BIT23 EQU (1<<23

AREA Example3,CODE,READONLY ENTRY CODE32 START MOV R0,#X MOV R1,#Y ADD R3,R0,R1 MOV R8,R3 MVN R0,#0XA0000007 SUB R5,R0,R8,LSL #3 MOV R0,#Y ADD R0,R0,R0,LSL #2 MOV R0,R0,LSR #1 MOV R1,#X MOV R1,R1,LSL #1 CMP R0,R1 LDRHI R2,=0XFFFF0000 ANDHI R5,R5,R2 ORRLS R5,R5,#0X000000FF TST R5,#BIT23

ARM实验报告

湖南科技学院ARM嵌入式设计实验报告题目:基于ARM嵌入式系统跑马灯的设计 专业:电子信息工程 班级:电信1102班 姓名:段相辉 学号:201106002232 指导教师:陈光辉 2014年11 月

目录 摘要............................................. 错误!未定义书签。ABSTRACT .......................................... Ⅰ错误!未定义书签。 1 题目要求 (1) 2 设计软件的安装 (2) 3 开发平台的搭建 (22) 4 项目设计 (23) 4.1 设计思路概述 (2) 4.1.1 设计层次介绍 (2) 4.1.2 设计模块介绍 (3) 5总结 (6) 致谢 (25) 参考文献 (26) 附录 (27)

引言 随着生活水平的提高和IT技术的进步,8位处理器的处理能力已经不能满足嵌入式系统的需要了;而16位处理器在性能和成本上都没有很大的突破。并且在8位机的开发中,大多使用汇编语言来编写用户程序。这使得程序的可维护性、易移植性等都受到了极大的挑战。正是基于此,ARM公司适时的推出了一系列的32位嵌入式微控制器。目前广泛使用的是ARM7和ARM9系列,ARM7TDMI内核的ARM7处理器广泛应用于工业控制、仪器仪表、汽车电子、通讯、消费电子等嵌入式设备。

1、题目要求 构建嵌入式Linux开发环境,熟悉linux的命令操作,并在嵌入式Linux 开发环境中设计跑马灯。 2、设计软件的安装 2.1 VMware Player简介 (a) VMware Workstation是一个“虚拟机”软件.它使用户可以在一台机 器上同时运行多个操作系统. (b) VMware Player是VMware Workstation的精简版,最初只是虚拟机的“播放机”, 但最新版本的已经具有创建虚拟机的功能.具有体积小,使用灵活,免费等特点. (c) 多个操作系统在主系统的平台上,可像Windows应用程序那样切换.而且每个操作系统都可以进行虚拟的分区、配置而不影响真实硬盘的数据. (d) 利VMware Player创建虚拟机

ARM实验报告--Thumb

XI`AN TECHNOLOGICAL UNIVERSITY 实验报告

西安工业大学实验报告 一丶实验目的 通过实验掌握ARM处理器16位Thumb汇编指令使用方法 二、实验内容 使用Thumb汇编语言,完成基本reg/men访问,以及简单的算术/逻辑运算。 使用Thumb汇编语言,完成较为复杂的程序分支,领会立即数大小的限制,并体会ARM与Thunb的区别。 三、实验原理 ARM 处理器共有两种工作状态: ARM:32 位,这种状态下执行字对准的ARM 指令; Thumb:16 位,这种状态下执行半字对准的Thumb 指令 在Thumb 状态下,程序计数器PC 使用位1 选择另一个半字。 注意: ARM 和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。ARM 处理器在两种工作状态之间可以切换。 1)进入Thumb 状态。当操作数寄存器的状态位0 为1 时,执行BX 指令进入Thumb 状态。如果处理器在Thumb 状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort 和SWI)返回时,自动切换到Thumb 状态。 2) 进入ARM 状态。当操作数寄存器的状态位0 为0 时,执行BX 指令进入ARM 状

态。处理器进行异常处理(IRQ,FIQ,Undef,Abort 和SWI)。在此情况下,把PC 方入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。 四、实验过程 1)打开Embest IDE Pro软件,选择菜单项File-->New Workspace,系统弹出对话框,创建名为TEXT的新工程,并同时创建一个与工程名相同的工作区。此时在工作窗口将打开该工作区和工程。 2)建立源文件: 点击菜单项File-->New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位玉窗口中第一行,将程序所需的源文件代码输入,编辑完后,进行保存,保存文件格式为_a.s文件。 3)添加源文件: 选择Project-->Add To Project-->File命令,弹出文件选择对话框,在工程目录下选择刚才建立的_a.s格式的源文件 4)基本配置: 选择菜单项Project-->Settings,弹出工程设置对话框,在工程设置对话框中,选择Processor设置对话框,选择ARM7对目标板所用处理器进行配置。

ARM嵌入式实验报告

实验一 ARM汇编指令使用实验——基本数学/逻辑运算 一、实验目的 1. 初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2. 通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1. 硬件:PC机。 2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 1.熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验程序如下: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _START: /*程序代码开始标志*/ MOV SP, #STACK_TOP MOV R0, #X /*X的值放入R0*/ STR R0, [SP] /*R0的值保存到堆栈*/ MOV R0, #Y /*Y的值放入R0*/ LDR R1, [SP] /*取堆栈中的数到R1*/ ADD R0, R0, R1 STR R0, [SP] STOP: B STOP /*程序结束,进入死循环*/ .END 2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。具体实验程序如下:/* armasm1b.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU Z, 87 /*定义变量Z,并赋值为87*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _START: /*程序代码开始标志*/ MOV R0, #X /*X的值放入R0*/ MOV R0, R0, LSL #8 /*R0的值乘以2的8次方 */ MOV R1, #Y /*Y的值放入R1*/ ADD R2, R0, R1, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/ MOV SP, #0X1000

ARM实验报告

ARM嵌入式 实验报告 姓名:冯贤成 学号:120101021106 专业:电子信息工程 指导老师:郑汉麟

ARM嵌入式系统 一、实验目的 1、通过实验掌握ARM指令的特点和寻址方式; 2、掌握简单的ARM汇编语言的程序设计; 3、了解集成开发环境Embest IDE及其开发软件的应用; 二、实验平台 Windows 7系统下的Embest IDE嵌入式软件开发平台 三、实验内容 1.编写程序将R2的高8位传送到R3的低8位(不考虑R3的其它位) 程序如下: .global _start .text _start: MOV R2,#0x80000003 /*把第一个立即数送进R2*/ MOV R3,#0x40000013 /*把第二个立即数送进R3*/ AND R0,R2,#0xff000000 /*取R2高8位到R0*/ AND R3,R3,#0xffffff00 /*R3低8位清零*/ ORR R3,R3,R0,lsr #24 /*R0逻辑右移24位后与R3相或,结果送进R3*/ stop: b stop .end 调试结果: ①Download下载: ②把第一个立即数送进R2:

③把第二个立即数送进R3: ④取R2高8位到R0: ⑤R3低8位清零: ⑥R0逻辑右移24位后与R3相或,结果送进R3:

单步跟踪后的结果,存储器及寄存器的结果显示: 2.编程实现64位的加法运算,要求【R1:R0】+【R3:R2】结果放回【R1:R0】。

程序如下: .global _start .text _start: MOV R0,#12 /R0=12 MOV R1,#6 /R1=6 MOV R2,#8 /R2=8 MOV R3,#9 /R3=9 ADDS R0,R0,R2 /R0等于低32位相加,并影响标志位 ADC R1,R1,R3 /R1等于高32位相加,并加上低位进位stop: b stop .end 调试结果: ①Download下载: ②将12赋给R0 ③将6赋给R1

ARM实验三

教师评阅意见: 签名:年月日实验成绩: 一.实验目的 通过实验了解使用ADS 1.2 编写C 语言程序,并进行调试。 二.实验设备 (1)硬件:PC 机一台 (2)软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境 三.实验内容 编写一个汇编程序文件和一个C 程序文件。汇编程序的功能是初始化堆栈指针和初始化C 程序的运行环境,然后调跳转到C 程序运行,这就是一个简单的启动程序。C 程序使用加法运算来计算1+2+3+...+(N-1)+N 的值(N>0)。 四.实验预习要求 (1)仔细阅读参考文献[1]第4 章ARM 指令系统的内容。 (2)仔细阅读产品光盘附带文档《ADS 集成开发环境及仿真器应用》或其它相关资料,了解ADS 工程编辑和AXD 调试的内容。(本实验使用软件仿真)。五.实验步骤 (1)启动ADS 1.2,使用ARM Executable Image 工程模板建立一个工程ProgramC。(2)建立源文件Startup.S 和Test.c,编写实验程序,然后添加到工程中。(3)设置工程链接地址RO Base 为0x40000000,RW Base 为0x40003000。设置调试入口地址Image entry point 为0x40000000。 (4)设置位于开始位置的起始代码段,如图2.14 所示。

(5)编译链接工程,选择【Project】->【Debug】,启动AXD 进行软件仿真调试。 (6)在Startup.S 的“B Main”处设置断点,然后全速动行程序。 (7)程序在断点处停止。单步运行程序,判断程序是否跳转到C 程序中运行。(8)选择【Processor Views】->【Variables】)打开变量观察窗口,观察全局变量的值, 单步/全速运行程序,判断程序的运算结果是否正确。 六.实验参考程序 C 语言实验的参考程序见程序清单2.8。汇编启动代码见程序清单2.6。 程序清单2.8 C 语言实验参考程序 #define uint8 unsigned char #define uint32 unsigned int #define N 100 uint32 sum; // 使用加法运算来计算1+2+3+...+(N-1)+N 的值。(N>0) void Main(void) { uint32 i; sum = 0;

STM32-ARM-综合实验报告(南京航空航天大学)

南京航空航天大学研究生实验报告 项目名称:ARM嵌入式系统设计与应用技术 设计专题:综合实验二类:数据采集和显示系统 班级: 小组成员 (1)姓名:学号:学科:电话:Email:导师: (2)姓名:学号:学科:电话:Email:导师: (3)姓名:学号:学科:电话:Email:导师: 20XX年XX月XX日

一、本实验主要内容及要求 本次综合实验的主要内容是,利用ARM内部的A/D转换器进行数据采集和显示系统设计。实验要求如下: 1、采用STM32开发板上的12位A/D转换器(参考电压3.3V)采集电位器测 试点的电压值。电位器与A/D的输入通道14相连接。 2、当按下Key键之后任意旋转电位器,利用A/D转化器采样20组电压值(每 1ms采样一次,使用定时器TIM2计时),并在液晶屏幕上显示当前电压值,当再次按下Key键之后将20组电压值存入到FLASH中。 3、复位后按下Temper键将保存的20组电压值在液晶屏幕中央绘制出波形(要 求各点连接,每个点为5个像素,要有坐标系)。 1)横坐标为“1~20”,每个横坐标之间的间隔为8个像素点; 2)纵坐标为电压值“0V,1V,2V,3V,4V”,相邻坐标之间的为10个像素 点。 4、在液晶屏合适的位置显示组名、姓名、学号、开发日期等信息。可利用STM32 开发板的资源扩展其他自定义功能(如增加温度采集通道、当前采样频率显示和设置、采样率调节等)。 二、硬件框图 本次实验的硬件部分主要是计算机和STM32两个部分,对于计算机部分不做过多的介绍,下面着重介绍STM32中的与本实验相关模块。 1.1 ADC模块 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。 STM32教学平台的电位器是信号是连接到STM32的PC4口的,PC4正好是A/D转换的通道14,STM32实验教学平台上也标注了ADC12_14(14通道),电位器硬件框图如图1所示,ADC硬件框图如图1所示。

ARM基本指令实验报告书.

ARM基本指令实验报告书 ARM基本指令实验报告书1、实验内容或题目●熟悉开发环境的使用并使用ldr/str,mov 等指令访问寄存器或存储单元。●使用 add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。2、实验目的与要求●初步学会使用Embest IDE for ARM 开发环境及ARM 软件模拟器;●通过实验掌握简单ARM 汇编指令的使用方法。3、实验步骤与源程序⑴ 实验步骤1) 新建工程:运行Embest IDE 集成开发环境,选择菜单项File → New Workspace,系统弹出一个对话框,输入相关内容。点击OK 按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程。2) 建立源文件:点击菜单项File → New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。3) 添加源文件:选择Project → Add To Project → Files 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s。4) 基本配置:选择菜单项Project → Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Processor 设置对话框,按照图3-2 所示,进行目标板所用处理器的配置。5) 生成目标代码:选择菜单项Build → Build asm_a 或快捷键F7,生成目标代码。6) 调试设置:选择菜单项Project → Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Remote 设置对话框,按照图3-4 所示对调试设备模块进行设置。7) 选择Debug 菜单Remote Connect 进行连接软件仿真器,执行Download 命令下载程序,并打开寄存器窗口。打开memory 窗口,观察地址0x8000~0x801f 的内容,与地址 0xff0~0xfff的内容。8) 单步执行程序并观察和记录寄存器与memory 的值变化。9) 结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM 指令的使用。10)理解和掌握实验后,完成实验练习题。首先在C盘根目录下找到EmbestIDE文件夹,打开Examples\ARM_Basic\3.1_asm1,这是实验的第一题。系统用EmbestIDE Pro软件打开此项目。然后在软件中操作Build- >Build asm1_a,接着再操作Debug Remote Connect,最后操作Debug Download.便能得出结果。⑵ 源代码题目一: 0x00008000 mov sp, #40960x00008004 mov r0, #450x00008008 str r0, [sp]0x0000800c mov r0, #640x00008010 ldr r1, [sp]0x00008014 add r0, r0, r10x00008018 str r0, [sp] stop :0x0000801c b 0x801c题目二: 0x00008000 mov r0, #450x00008004 mov r0, r0, lsl #80x00008008 mov r1, #640x0000800c add r2, r0, r1, lsr #10x00008010 mov sp, #40960x00008014 str r2, [sp]毕业论文

北航ARM9实验报告:实验3uCOS-II实验

实验三UC-OS移植实验 一、实验目的 在内核移植了uCOS-II 的处理器上创建任务。 二、实验内容 1.运行实验十,在超级终端上观察四个任务的切换。 2. 任务1~3,每个控制“红”、“绿”、“蓝”一种颜色的显示,适当增加OSTimeDly()的时间,且优先级高的任务延时时间加长,以便看清三种颜色。 3.引入一个全局变量BOOLEAN ac_key,解决完整刷屏问题。 #define RdURXH0() 当键盘有输入时在超级终端上显示相应的字符。 三、实验设备 硬件:ARM嵌入式开发平台、用于ARM920T的JTAG仿真器、PC机Pentium100以上。 软件:PC机操作系统Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。 四、实验原理 所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然uCOS-II的大部分源代码是用C语言写成的,仍需要用C语言和汇编语言完成一些与处理器相关的代码。比如:uCOS-II在读写处理器、寄存器时只能通过汇编语言来实现。因为uCOS-II在设计的时候就己经充分考虑了可移植性,所以,uCOS-II的移植还是比较容易的。 要使uCOS一工工可以正常工作,处理器必须满足以下要求: 1)处理器的C编译器能产生可重入代码。 2)在程序中可以打开或者关闭中断。 3)处理器支持中断,并A能产生定时中断(通常在10Hz}1000Hz之间)。 4)处理器支持能够容纳一定量数据的硬件堆栈。 5)处理器有将堆栈指针和其它CPU寄存器存储和读出到堆栈(或者内存)的指令。

uCOS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是uCOS一工工多任务调度的基础。 五、实验步骤 1 以实验十为模板,将实验六inc目录下的LCD320.H 和src目录下的LCD640.C 拷到模板下的相应目录,将LCD640.C加入工程中。 2包含以下头文件#include “inc/lcd320.h”。 3改LCD640.C 文件中包含头文件的路径。 #include "../inc/drv/reg2410.h" 4 声明引用的变量extern U32 LCDBufferII2[LCDHEIGHT][LCDWIDTH]; 六、源程序 #include"../ucos-ii/includes.h" /* uC/OS interface */ #include "../ucos-ii/add/osaddition.h" #include "../inc/drivers.h" #include "../inc/sys/lib.h" #include "../src/gui/gui.h" #include "../inc/lcd320.h" #include #include //#include "..inc/lcd320.h" //#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting OS_EVENT *MboxSem; ///******************任务定义***************/// /*OS_STK SYS_Task_Stack[STACKSIZE]= {0, }; //system task刷新任务堆栈 #define SYS_Task_Prio 1 void SYS_Task(void *Id);*/ OS_STK task1_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈 void Task1(void *Id); //Main_Test_Task #define Task1_Prio 12 OS_STK task2_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈 void Task2(void *Id); //test_Test_Task #define Task2_Prio 15 OS_STK task3_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈 void Task3(void *Id); //test_Test_Task #define Task3_Prio 17 OS_STK task4_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈 void Task4(void *Id); //test_Test_Task #define Task4_Prio 10

湖南工业大学ARM实验报告

ARM嵌入式系统原理及应用开发 实验报告 学院:电气与信息工程学院 班级:电子信息1204 指导老师:谭会生 姓名: 学号: 实验一:ARM汇编指令使用实验——基本数学/逻辑运算一、实验目的 1.初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2.通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1.硬件:PC机。 2.软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验参考程序如下: 四.实验操作步骤 1.新建工程。先建立一个实验文件夹,如E\ARMSY\armasm1;然后运行Embest IDE集成开发环境,选择File→New Workspace菜单项,弹出一个对话框,输入工程名armasm1a/armasmlb等相关内容;最后单击OK按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将能打开该工作区和工程。 2.建立源文件。选择File→New菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件armasmla. s。 1)armasmla. s源程序: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT

ARM嵌入式实验报告

实验一ARM汇编指令使用实验——基本数学/逻辑运算 一、实验目的 1. 初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2. 通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1. 硬件:PC机。 2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 1.熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验程序如下: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _START: /*程序代码开始标志*/ MOV SP, #STACK_TOP MOV R0, #X /*X的值放入R0*/ STR R0, [SP] /*R0的值保存到堆栈*/ MOV R0, #Y /*Y的值放入R0*/ LDR R1, [SP] /*取堆栈中的数到R1*/

ADD R0, R0, R1 STR R0, [SP] STOP: B STOP /*程序结束,进入死循环*/ .END 2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。具体实验程序如下:/* armasm1b.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU Z, 87 /*定义变量Z,并赋值为87*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _START: /*程序代码开始标志*/ MOV R0, #X /*X的值放入R0*/ MOV R0, R0, LSL #8 /*R0的值乘以2的8次方*/ MOV R1, #Y /*Y的值放入R1*/ ADD R2, R0, R1, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/ MOV SP, #0X1000 STR R2, [SP] MOV R0, #Z /*Z的值放入R0*/ AND R0, R0, #0XFF /*取R0的低八位*/ MOV R1, #Y /*Y的值放入R1*/ ADD R2, R0, R1, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/

ARM7基础实验(附原理图)

11.ADC数模转换——ARM的Proteus实验 LED闪烁——ARM的Proteus实验 实验原理 ARM(LPC21XX)的一个I/O口接LED,通过给它送0和1来设置LED的亮和灭。Proteus仿真电路图

步骤 KEIL 1.创建新工程 2.选择ARM型号(KEIL会自动生成启动代码startup.s) 3.添加源文件,编写程序 4.设置项目选项(是否输出hex、lst文件,设置linker script) Proteus 1.绘制电路图 2.载入程序 3.仿真 C语言源程序 /****************************************************************** ************/ /* */ /* led.c: 用ARM点亮一个led并闪烁,有点浪费…… */ /* */ /****************************************************************** ************/ #include /****************************************************************** ************* **函数名: delay() **描述: 软件延时 ******************************************************************* *************/ void delay (void) { unsigned volatile long i,j; for(i=0;i<60000;i++) for(j=0;j<5;j++) ; } int main(void) {

arm实验报告

电子科技大学成都学院 实验报告册 课程名称:嵌入式系统开发实践 姓名:段定杰 学号:1140710726 院系:微电子技术系 专业:集成电路设计与集成系统(嵌入式)教师:李伟 2014 年6 月14 日

实验一:基于S3C2440 IIC控制 一、实验目的: 本次实验的目的是通过S3C2440的IIC接口,向EEPROM芯片AT24C02A写入8个数据,然后再将所写的数据读出,并显示在串口调试工具上。 二、实验原理和内容: IIC外接EEPROM的硬件原理图: 为了控制多主控 IIC 总线操作,必须写入值到以下寄存器中: –多主控IIC总线控制寄存器,IICCON –多主控IIC总线控制/状态寄存器,IICSTAT –多主控IIC总线 Tx/Rx 数据移位寄存器,IICDS –多主控IIC总线地址寄存器,IICADD 当释放了IIC总线时,SDA和SCL线应该都保持为高电平。一个高到低SDA 的变化可以启动一个起始条件。SCL稳定保持在高电平时的一个低到高SDA的变化可以启动一个停止条件。 起始和停止条件通常由主设备产生。第一个数据字节为7位地址值,其在启动起始条件后放到总线上,可以确定出主设备要选择的从设备。第8位是决定传输方向(读或写)。每个放到 SDA线上的字节都应该总共为8位。字节可以在总线传输操作期间无限制的发送或接收。数据通常从最高有效位(MSB)开始始发送,并且每个字节应该立即通过应答(ACK)位跟上。 实验内容:触摸屏的校准设计中通过IIC总线来存储校准参数到EEPROM,以便

以后校准时可以随时读出。 三:实验步骤: 1、首先在ADS上建立一个工程,工程名为IIC,然后选择一个合适的路径存放。 2、将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h、2440lib.h、2440slib.h、def.h、Nand.h、Option.h、2440addr.inc、Memcfg.inc、Option.inc、2440init.s、2440slib.s、2440lib.c、nand.c这13个文件依次拷贝到刚才所建工程的文件夹下。 3、新建一个源文件,命名为IIC.c,存放到工程名为IIC的文件夹下。 4、在IIC.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件2440init.s、2440slib.s、nand.c依次添加到以startcode命名的文件夹下。 5、将IIC.c添加到工程里面去。 6、配置DebugRel Settings(参考实验一)。 7、在IIC.c里面进行程序的书写。 8、编译所写程序。 9、打开串口调试工具,将波特率设为115200。 10、将开发板、仿真器、串口线和电脑正确连接,打开Hjtag软件,调试程序。 四、实验数据和结果: 1.定义一个延迟函数: 2.IIC的写函数: void wr24c02(unsigned char worAddr,unsigned char *buffer,int date) { int i; flag=1; rIICDS=devaddr; rIICCON=~0x10; rIICSTAT=0xf0; while(flag==1) { delay(100); flag=1; rIICDS=worAddr;

相关文档
最新文档