ARM汇编指令实验_第1页
ARM汇编指令实验_第2页
ARM汇编指令实验_第3页
ARM汇编指令实验_第4页
ARM汇编指令实验_第5页
全文预览已结束

下载本文档

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

文档简介

1、ARM 汇编指令实验一1. 实验目的1. 初步学会使用 Vision IDE for ARM 开发环境及ARM 软件模拟器;2. 通过实验掌握简单 ARM 汇编指令的使用方法。2. 实验设备1. 硬件:PC 机一台;2. 软件:Vision IDE for ARM 集成开发环境,Windows 98/2000/NT/XP。3. 实验内容1. 熟悉开发环境的使用并使用 ldr/str,mov 等指令访问寄存器或存储单元;2. 使用 add/sub/lsl/lsr/and/orr 等指令,完成基本算术/逻辑运算。4. 实验原理ARM 处理器共有37 个寄存器:31 个通用寄存器,包括程序计数器(P

2、C)。这些寄存器都是32 位的;6 个状态寄存器。这些寄存器也是32 位的,但是只是使用了其中的12 位。1. ARM 通用寄存器通用寄存器(R0-R15)可分为三类:1) 不分组寄存器 R0R7不分组寄存器R0R7 在所有处理器模式下,它们每一个都访问一样的32 位寄存器。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。2) 分组寄存器 R8R14分组寄存器R8R14 对应的物理寄存器取决于当前的处理器模式。若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。寄存器R8R12 各有两组物理寄存器:一组为FIQ 模式,另一组为除了FIQ 以外的所有模式。寄存器R8R12

3、 没有任何指定的特殊用途,只是在作快速中断处理时使用。寄存器R13,R14 各对应6 个分组的物理寄存器,1 个用于用户模式和系统模式,其它5 个分别用于5 种异常模式。寄存器R13 通常用做堆栈指针,称为SP;寄存器R14 用作子程序链接寄存器,也称为LR。3) 程序计数器 PC寄存器R15 用做程序计数器(PC)。在本实验中,ARM 核工作在用户模式,R0R15 可用。2. 存储器格式ARM 体系结构将存储器看作是从零地址开始的字节的线性组合。字节零到字节三放置第一个字(WORD),字节四到字节七存储第二个字,以此类推。ARM 体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。

4、1) 大端格式在这种格式中,字数据的高位字节存储在低地址中,而字数据的低位字节则存放在高地址中。2) 小端格式在这种格式中,字数据的高位字节存储在高地址中,而字数据的低位字节则存放在低地址中。3. REALVIEW 基础知识1) ENTRY设置程序默认入口点,一个程序可有多个ENTRY,但一个源文件最多只有一个ENTRY。2) EQUEQU 伪操用于将数字常量、基于寄存器的值和程序中的标号定义为一个字符名称。语法格式:symbol EQU expression其中,expression 可以是一个寄存器的名字,也可是由程序标号、常量或者32 位的地址常量组成的表达式。symbol 是EQU 伪

5、操作所定义的字符名称。示例:COUNT EQU 0X1FFF3) EXTERN/IMPORTIMPORT(EXTERN 功能完全相同)用于声明在其他模块中定义但需要在本文件中使用的符号。EXTRN 声明的变量必须是在其他模块中用EXPORT 或GLOBAL 声明过的。语法格式:IMPORT class (symbol, symbol .)其中,class 为变量的类型,可以为ARM、CODE16、CODE32、DATA、CONST、THUMB;symbol为所声明的变量名。4) EXPORT/GLOBALEXPORT(GLOBAL 功能完全相同)用于声明在本文件中定义但能在其他模块中使用的变量

6、,相当于定义了一个全局变量。语法格式:EXPORT symbol, symbol.其中,symbol 为所声明的变量名。5) AREAAREA 用于定义一个代码段或数据段,ARM 汇编程序设计采用分段式设计,一个ARM 源程序至少有一个代码段,大的程序会有若干个代码段和数据段。语法格式:AREA segment-name, class-name, attributes ,.其中,segment-name 为所定义段的名称;class-name 为所定义段的类型名称,可以为系统类型(CODE, CONST, DATA, ERAM)或用户定义类型;attributes 为段的属性。6) ENDEN

7、D 用于标记汇编文件的结束行,即标号后的代码不作处理。5. 实验步骤1. 新建工程首先在KeilARMExamplesMini2410-IV4.1_asm1 目录下建立文件夹命名为Asm1_a,运行Vision3 IDE 集成开发环境,选择菜单项“Project -> New-> Vision Project”,系统弹出一个对话框,输入相关内容。点击“保存”按钮,将创建一个新工程asm_1a.Uv2。2. 为工程选择 CPU新建工程后,要为工程选择CPU,在此选择SAMSUNG 的S3C2410A:3. 添加启动代码在图4-1-5 中点“确定”后,会弹出一个对话框,问是否要添加启动

8、代码。如图 4-1-5 所示。由于本实验是简单的汇编实验,因此不需要启动代码,选择否。4. 选择开发工具要为工程选择开发工具,在Project - Manage - Components,Environment and Books -Folder/Extensions 对话框的Folder/Extensions 页内选择开发工具,有三个开发工具可选,在此选择RealView Compiler。5. 建立源文件点击菜单项File - New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件asm1_a.s。(源代码可以参考D

9、ISK3_S3C241003-Codes01-MDKMini2410-IV4.1_asm1 中的asm1_a.s 文件)6. 添加源文件单击工程管理窗口中的相应右键菜单命令,选择Add Files to,会弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s。7. 工程配置把光盘DISK3_S3C241003-Codes01-MDKMini2410-IV4.1_asm1Asm1_a 目录中的DebugINRam.ini 文件拷贝到KeilARMExamplesMini2410-IV4.1_asm1Asm1_a 目录下。选择菜单项Project->Option for Ta

10、rget,将弹出工程设置对话框,对话框会因所选开发工具的不同而不同,在此仅对Target 选项页、Linker 选项页及Debug 选项页进行配置。Target 选项页的配置如图4-1-8;Linker 选项页的配置如图4-1-9;Debug 选项页的配置如图4-1-10。需要注意,在Debug 选项页内需要一个初始化文件:DebugINRam.ini。此.INI 文件用于设置生成的.AXF 文件下载到目标中的位置,以及调试前的寄存器、内存的初始化等配置操作。它是由调试函数及调试命令组成调试命令脚本文件。8. 生成目标代码选择菜单项Project - Build target 或快捷键F7,生

11、成目标代码。在此过程中,若有错误,则进行修改,直至无错误。若无错误,则可进行下一步的调试。9. 调试选择菜单项Debug - Start/Stop Debug Session 或快捷键 Ctrl+F5,即可进入调试模式。若没有目标硬件,可以用Vision 3 IDE 中的软件仿真器,做如下调试工作:1) 打开 memory 窗口,单步执行,观察地址0x30200000 中内容的变化;2) 单步执行,观察寄存器的变化;3) 结合实验内容和相关资料,观察程序运行,通过实验加深理解 ARM 指令的使用;4) 理解和掌握实验后,完成实验练习题。实验B 与上述步骤完全相同,只要把对应的asm1_a.s

12、文件改成asm1_b.s 以及工程名即可。6. 实验参考程序1. 实验 A汇编程序:;*; NAME: asm1_a.s; Author: TYW /WUHAN R&D Center,Embest; Desc: ARM instruction examples; History: 2007.5.1;*;/*- */;/* constant define */;/*- -*/x EQU 45 ; x=45y EQU 64 ; y=64/stack_top EQU 0x30200000 ; define the top address for stacksexport Reset_Hand

13、ler;/*- -*/;/* code */;/*-*/AREA text,CODE,READONLYexportReset_Handler ; code start */ldr sp, =stack_topmov r0, #x ; put x value into R0str r0, sp ; save the value of R0 into stacksmov r0, #y ; put y value into R0ldr r1, sp ; read the data from stack,and put it into R1add r0, r0, r1 ; R0=R0+R1str r0

14、, spstopb stop ; end the code cyclingend注意:语句 export Reset_Handler 前面必须有空格,具体原因请参考ARM 指令格式文档。调试命令脚本文件:/* <<< Use Configuration !disalbe! Wizard in Context Menu >>> */* Name: DebugINRam.ini */FUNC void Setup (void)/ <o> Program Entry Point, .AXF File download AddressPC = 0x300

15、00000;map 0x00000000,0x00200000 read write exec / Map this memory to be read、write and execmap 0x30000000,0x34000000 read write exec / Map this memeory to be read,write and execSetup(); / Setup for Running/g, main2. 实验B汇编程序;#*;# NAME: asm1_b.s;# Author: WUHAN R&D Center, Embest;# Desc: ARM instr

16、uction examples;# History: TianYunFang 2007.05.12;#*;/*- */;/* constant define */;/*- */x EQU 45 ;/* x=45 */y EQU 64 ;/* y=64 */z EQU 87 ;/* z=87 */stack_top EQU 0x30200000 ;/* define the top address for stacks*/export Reset_Handler;/*- */;/* code */;/*- */AREA text,CODE,READONLYReset_Handler ;/* co

17、de start */mov r0, #x ;/* put x value into R0 */mov r0, r0, lsl #8 ;/* R0 = R0 << 8 */mov r1, #y ;/* put y value into R1 */add r2, r0, r1, lsr #1 ;/* R2 = (R1>>1) + R0 */ldr sp, =stack_topstr r2, spmov r0, #z ;/* put z value into R0 */and r0, r0, #0xFF ;/* get low 8 bit from R0 */mov r1, #y ;/* put y value into R1 */add r2, r0, r1, lsr #1 ;/* R2 = (R1>>1) + R0 */ldr r0, sp ;/* put y value into R1 */mov r1, #0x01orr r0, r0, r

温馨提示

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

最新文档

评论

0/150

提交评论