arm选做实验汇编指令编程C语言编程_图文_第1页
arm选做实验汇编指令编程C语言编程_图文_第2页
arm选做实验汇编指令编程C语言编程_图文_第3页
arm选做实验汇编指令编程C语言编程_图文_第4页
arm选做实验汇编指令编程C语言编程_图文_第5页
全文预览已结束

下载本文档

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

文档简介

1、实验二 汇编指令编程 实验目的1 掌握ARM汇编指令编程2 掌握Thumb汇编指令编程需要完成的任务完成A部分和B部分实验A部分 ARM 汇编指令编程方法1 建立工程 启动ADS1.2 使用ARM Executable Image 工程模板建立一个Instruetion1。关于ADS 工具的使用方法可参照前面的实验。2 编写源代码 COUNT EQU 0x30001010 ;定义一个变量,地址在0x30001010AREA Example1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口CODE32 ;声明31 位ARM 指令START LDR R1,=C

2、OUNT ;R1<=COUNT MOV R0,#0 ;R0<=0STR R0,R1 ;R1<=R0, 即设置COUNT 为0 LOOP LDR R1,=COUNT LDR R0,R1 ;R0<=R1 ADD R0,R0,#1 ;R0<=R0+1 CMP R0,#10 ;R0 与10 比较,影响条件码标志 MOVHS R0,#0 ;若R0>=10,则此指令执行R0<=0 STR R0,R1 ;R1<=R0 ,即保存COUNT B LOOP 3设置编译选项 设置工程连接地址RO Base 为0X30000000,RW Base 为0X30001000

3、 。设置调试入口地址Image entry point 为0X30000000 。编译、调试编译连接工程,选择ProjectÆDebug ,启动AXD 进行软件仿真调试。4查看寄存器,内存打开寄存器窗口(Processor Registers),选择Current 项监视R0 和R1 的值。本实验代码使用LDR 指令读取0x30001010 地址上的数据,将数据加1。若结果小于10, 则使用STR 指令把结果写回原地址;若结果大于等于10,则把0 写回原地址。可以单步运行程序,可以设置/取消断点,或则全速运行程序,停止程序运行,调试时观察寄存器和0x30001010 地址上的值。打开

4、存储器观察窗口(Memory )设置观察地址为0x30001010 ,显示方式Size 为32bit ,监视0x30001010 地址上的值。运行结果如图,B部分 Thumb 汇编指令编程方法1 建立工程。启动ADS1.2 使用ARM Executable Image 工程模板建立一个Instruetion3。2 编写源代码 建立汇编源文件TEST3.S,编写实验程序,然后添加到工程中。;功能:计算1+2+3.+N N EQU 100 ;定义N的值100AREA Example3,CODE,READONLY ;声明代码段Example3 ENTRY ;标识程序入口 CODE32 ;声明32 位

5、ARM 指令 ARM_CODE LDR SP,=0x30003F00 ;设置堆栈指针 ADR R0,THUMB_CODE+1 ;BX R0 ;跳转并切换处理器状态 LTORG ;声明文字池CODE16 ;声明16 位THUMB 指令 THUMB_CODE LDR R0,=N ;设置子程序SUM_N的入口参数 BL SUM_N ;调用子程序SUM_N B THUMB_CODE ; ;SUM_N ;功能:计算1+2+3.+N ;入口参数:R0 N 的值 ;出口参数:R0 运行结果 ;占用资源:R0 ;说明:当N=0 时结果为0,当N=1 时结果为1 ;若运算溢出,结果为0 SUM_N PUSH R

6、1-R7,LR ;寄存器入栈保护 MOVS R2,R0 ;将N 的值复制到R2,并影响条件码标志 BEQ SUM_END ;若N=0,则返回 CMP R2,#1 BEQ SUM_END ;若N=1,则返回 MOV R1,#1 ;初始化计数器R1=1 MOV R0,#0 ;初始化结果寄存器R0=0 SUN_L1 ADD R0,R1 ;R0=R0+R1 BCS SUM_END ;结果溢出,跳转到SUM_ERR CMP R1,R2 ;将计数器的值与N 比较 BHS SUM_END ;若计数器的值>=N,则运算结束 ADD R1,#1 ; B SUN_L1 SUM_ERR MOV R0,#0 SUM_END POP R1-R7,PC ;寄存器出栈,返回 END 3设置编译选项 设置工程连接地址RO Base 为0X30000000,RW Base 为0X30001000 。设置调试入口地址Image entry point 为0X30000000 。详细设置参考B部分。4 查看寄存器和内存打开寄存器窗口(Processor Registers),选择Current 项监视各寄存器的值。单步运行程序,注意执

温馨提示

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

评论

0/150

提交评论