2023年微嵌实验报告_第1页
2023年微嵌实验报告_第2页
2023年微嵌实验报告_第3页
2023年微嵌实验报告_第4页
2023年微嵌实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

电子科技大学

实验报告

课程名称微解决器系统结构与嵌入式系统设计

实验名称。ARM汇编基础实验

任课教师实验教师姓名学号

实验地点分组号时间年—月—日

一、实验目的

I.熟悉并掌握常用ARM汇编指令

2.熟悉并掌握“C+汇编”混合编程技术

3.纯熟使用ARM软件开发调试工具Keil

二、实验内容

1.学习使用Keil开发工具

2.实现累加运算功能(汇编编程,必做)

3.实现字符串拷贝功能(C+汇编,必做)

4.实现求和运算功能(C+汇编,必做)

5.实现冒泡排序算法(汇编编程,选做)

微解决器系统结构与嵌入式系统设计实验报告

三、实验环节

L学习使用keil开发工具

1.点击“KeiluVision5”打开软件主窗口。

2.点击ProjeCt->NewuVis1onProject建立新工程。

3.为新工程命名。

4.为工程选择目的器件:三星S3c2440A。

5.选择是否添加S3c244O.s启动文献:C源程序工程选“是”,汇编源程序工程选

普。

6.在工程SoUrceGroup上点右键选择添加新工程文献。

7.选择源文献类型。

8.录入源代码并保存。

9.对工程进行build或rebui1do

10.点击debug按钮进入/退出调试,忽略代码大小限制。使用单步调试,仔细观测过

程中关键寄存器值的变化。

2.各个实验环节

实验L1:用汇编语言实现1+2+...+N的累加(必做)

1.建立新工程,加入实验1.2文献夹中的sum.s

2.用汇编补充算法核心部分,代码参考流程图如下图所示。

「RO=RO+R1

'YES

结果溢出?►SUM_END

NO

'YES

R1>=N

NO

R1=R1+1

3.使用单步调试,仔细观测过程中关键寄存器值的变化。

实验1.2:C调用汇编实现字符串拷贝功能(必做)

1.建立新工程,加入实验L3文献夹中的main.c和testf1le.s(同一个工程下添加两个

文献一起编译)。

2.补充完毕源代码中缺失的部分,实现字符串拷贝功能

3.运营Debug进行调试

实验1.3:汇编调用C实现实现求和1+2+...+N(必做)

1.建立新工程,加入实验1.4文献夹中的Sum.c和testfile.s(同一个工程下添加两个文

献一起编译)。

2.补充完毕源代码中缺失的部分,通过调用c函数g()实现l+2+3+glovbl,结果存

在R8中。

3.运营Debug进行调试

实验1.4:ARM汇编实现冒泡算法(选做)

1.建立新工程,加入实验1.5文献夹中的maopao.S。

2.补充完毕源代码中缺失的部分,实现冒泡排序功能。

3.运营Debug进行调试

四、实验结果

实验1.1用ARM汇编实现l+2+...+n的运算。

在sum.s文献中,添加如下核心代码:

SUN_L1

ADDRO,RI;R0,RI求和

BVSSUM_END;判断是否溢出,溢出则执行SUM_END程序,求和结束

CMPRI,R2;R1、R2作差与。进行比较

BHSSUM_END;R1〉=R2,则执行SUM_END程序,否则向下继续执行

ADDRI,#1;R1增1

BSUNLI;循环运营SUN_L1

调试过程:

1.设立N的值并赋值给R0

Register|ValueOxOOOOOOOE3000ADDR0,*0x00

19:LDRR0,7;设置子程序SUM_N的入口参数

2Current

|0x00000010

0x000000642064IMOVRO,*0x64

0x0000000020:BLSUMN;谒用子程序SUMN

0x000000000x00000012F0000x00000018-Parctl

0x000000000x00000014F8010x00000018-Part12

0x00000000

0x00000000

0x00000000

0x00000000Jsum.s

0x00000000;功能:计算1+2+3—...+N

0x00000000

:说明;N>=。,当N=0时结果为0,当N=I时结果为1

RIO0x00000000

Rll0x00000000

R120x00000000EQU100;定义N的值100

RI3csp)0x3O003FO0AREAExaiqples,CODE,READONLY:声明代码断Examples3

R14HR)0x00000000ENTRY;标识程序入口

IRI5(PC)0x000000127

I-CPSROxOOOOOOF3CODE32

0

9ARMCODE

0

010

V011LDRSPr-0X30003F00;设置堆枝指针

I12ADRRO,THUMB_CODE+1;

137跳转并切换处理器状态

T14;声明文字池

M0x1315

SPSR0x00000000

+16CODE16

User/Systea

+17THUMBCODE

*FastInt...

Interrupt18

+

Superv...19LDRR0,-N;设置子程序SUM_N的入口参数

+

Abort20BLSUM_NSUMN

+;调用子程序

UndefinedBTHUMBCODE

-21

Internal22

PC$0x00000012

23;SUMN

ItodaSupervisor.Th^:.44-er-.

2.将R0=N的值复制给R2

,一y,+J-।•••»।-LXJ▼115ii

7

豺画「助o-3n|❖回回武叵)国熄•巨方―/•国•国•立•

Registers»画Disassembly

;若则返回

Register34:BEQSUM_ENDNR,

-Current)x00000010D0093EQ0x00000032

35:CMP

RO0x00000064R2,tl

RI0x00000000X0000001E2AOICMPR2,#0x01

0x00000064t36:BEQSUM_END;若21,则返回

E?0x00000000||0x00000020D007BEQ0x00000032

L40x00000000知44》工*

F50x00000000

I.-:

0x00000000

hJr

0x000000001sums

0x00000000

;功能:计算1+2+3+................+N

0x00000000

;入口参数:RON的值

0x00000000

0x00000000;出口参数:R0运行结果

0x00000000;占用资源:R0

Ox3O0O3EE0;说明:当N=0时结果为0,当N=1时结果为1

0x00000017;若运算溢出.结果为。

|R15(FC)OxOOOOOOlC

I-CPSROxOOOOOOF3SUMN

N0

'PUSH{R1-R7,LR);寄存器入栈保护

Z0

HOVSR2R0;将口的值复制到R2,并影响相应条件标志

C0r

V0BEQSUM_END:若N・0,则返回

,--,三

I1

F1BEQSUM_END;若所1,则返回

T1MOVRI,#!;初始化计数器RW1

M0x13

MOVR0*0;初始化计数器R07

ffiSPSR0x00000000

*User/System

FastIni..

♦Interrupt;用汇镰实现算法核心部分

&Supers...ADDRO,RO,R1;

3.判断N是否为0或者,改变标志位C

|Value|0x0000001CD009BEQ0x00000032

Register

35:CMPR2,1l

-Current

|0x0000001E2AOI

0x00000064CMPR2,#0x01

0x0000000036:BEQSUM_END;若所工,则返回

0x00000064^0x00000020D007BEQ0x00000032

0x0000000037:;初始化计数器R・1

0x00000000|0x00000022

Rlr#0x01

0x00000000

38:MOVR0,*。;初融化计数器R0・l

0x00000000

39:SUN_

0x00000000

0x0000000040:

0x0000000041:;用汇编实现算法核心部分

R100x0000000010*000000242000MOVRO.tOxOO

Rll0x00000000

R120x00000000

R13GF)Ox3OO03EEOsums

:爱明:当NT时经果为。.当NY时结果为1

|R15(PC)0x00000020

;若运算溢出-结果为0

|CPSRQx200000F3

PUSH{R1-R7,LR);寄存器入栈保护

MOVSR2rR0;将11的值复制到R2,并影响相应条件标三

BEQSUM_END;若加0,则返回

CMPR2,#l

BEQSUM_END;若加工,则返回

0x13

3SPSR0x00000000Ri,n;初始化计数器R・1

封User/SystenR0,10;初始化计数器R0-1

31FastIni..

51Interrupt

研Sxiperv...;用汇编实现算法核心部分

51'Abort

ADDRORORl;

3"Undefinedft

SUMEND;

dInternal

PC$0x00000020

ModeSupervisor

Stat«z24

S«c0.00000200ADD

3CPI5

?+)-「PIS-r

4.将R0,R1分别初始化为0与1

Registers埠|tJjuiiassemoi)

RegisterIValue,用汇缠妥现算法核心部分

RD0x000000002000MOVR0,#0x00

0x00000001ADDRO,R0,RI;

0x000000641840ADDR0zRO,RI

0x0000000043:BVSSUM_END;

0x0000000044:

0x00000000

)x00000028D603BVS0x00000032

0x00000000

45:

0x00000000CMPR1,R2;

0x000000004291CMPRl/R2

0x00000000BHSSUM_END;

0x00000000D201BCS0x00000032

0x00000000

0x00000000

0x30003EEQsums

BEQSUM_END;若-一。,则返回

|R15(K)0x00000026

|CPSROx60000QF3CMPR2,tl

0BEQSUMEND;若21,则返回

MCV:,r

MOVR0,#0;初始化计数器ROT

0SUN_L1

I

F;用汇编实现算法核心部分

T|ADDR0R0R:;

M0x13rr

ESPSR0x00000000BVSSUM_END;

♦JUser/System

.t!FastInt…CMPR1,R2;

+'

*jInterr3tBHSSUM_END;

+JSuperv...ADD

+!,Abort

3SUN_L1;

hdefined

5.将R0+R1赋值给RO

r\cyiaici3

RegisterValue

41:;用汇缝实现算法核心部分

-Current

|R00x00000001|0x000000242000MOVRO,#0x00

0x0000000142:ADDRO,RO,RI;

0x00000064|0x000000261840ADDRO,RO,RI

R10x0000000043:BVSSUMEND;

R20x0000000044:

R30x00000000

D603BVS0x00000032

R40x00000000

RM545:CMPR1,R2;

0x00000000

10x0000002A

0x000000004291CMPR1,R2

R7即

0x0000000046:BHSSUM_END;

R90x00000000■0X0000002CD201BCS0x00000032

R10x00000000・□

R1

R10x00000000

R1(SP0x30003EE0Jsums

R1(LR0x00000017

BEQSUM_END;若加0,则逐茴

R15(PC)0x00000028

CMPR2,#l

CPSROxOOOOOOF3

BEQSUM_END;若?口,则返回

MOVRI,Il;初始化计数器Rl=l

MOV;初始化计数器R0・l

V0SUNLI

I1

;用汇编实现算法核心部分

T1

ADD,,•

M0x13J

ESPSR0x00000000BVSSUMEND;

User/System

FastInt.CMPRlrR2;

InterruptBHSSUM_END;

Sapcrv...ADD,一,J:

Abort

Undefined

6.判断是否溢出与R1是否大于等于R2=N,改变标志位N

”:;用汇编实现算法核心部分

Value

BXt.0x000000242000MOVRO,*0x00

.cur

.R00x0000000142:ADDR0,R0,RI;

■0x00000026

K10x000000011840ADDRO,RO,RI

R20x0000006443:BVSSUMEND;

K3

R40x0000000044:

BS0x0000000010x00000028D603BVS0x00000032

R60x00000000

45:CMPR1,R2;

K70x00000000

R8■OX0000002A4291CMPR1,R2

0x00000000

R9:;

R10x0000000046BHSSUMEND

R10x00000000=J>0x0000002CD201BCS0x00000032

R10x00000000

K1

R10x00000000

G0x00000000

p)Ox30OO3EEOJ

JR)0x00000017

ILISUM_END;^N=O,则返回

R15CPC)OxOOOOOOZC

R2,#l

HCPSROx800000F3

;若只=则返回

1SUM_END1,

RI,Il

温馨提示

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

评论

0/150

提交评论