ARM作业

发布 2023-05-19 21:59:28 阅读 6679

arm实验。

专业年级: 10级通信工程

学号。姓名。

指导教师: 郑汉麟。

2023年6月8日。

华中科技大学文华学院信息学部。

一.编译前工作:

1. 先新建新空间。

2. 新建程序窗口new file,程序写完后,将文件保存为文件,然后点击源文件菜单,增加文件,将。s文件打开。

3. 编译:

project-->settings

对processor设置:

cpu-->arm7

endian-->默认 little endian

build tools---gun tools for arm

对remote设置:

做软件程序时,remote device --simarm7(软件**器)

category: target specific options

instructions sets---arm interworking

4. 将程序编译。

5. 编译成功后,对debug设置。

设置debug:category---general

symbol file—打开文件中的debug文件中编译生成的文件打开。

category---download

symbol file—打开文件中的debug文件中编译生成的文件打开。

execute program from --download addresss

download address : 0x1000

6. 设置成功后 debug---remote connect,然后debug---download

7. view—debug --manger(存储器)address 改成0x00001000

register(寄存器)

8. 按f11执行语句---往下跳一行。

9. 要修改指令,先断开链接debug---disconnect

二,软件编程。

1 .编写程序将r2的高8位传送到r3的低8位(不考虑r3的其他位)。

程序:global _start

textstart:

ldr r2,=0x11111111 @r2赋值0x11111111

ldr r3,=0x33333333 @r3赋值0x33333333

and r2,r2,#0xff000000 @保留r2的高8位,屏蔽低24位。

and r3,r3,#0xffffff00 @保留r3的高24位,屏蔽低8位。

mov r3,r2,lsr#24 @将r2的高8位传送到r3的低8位。

stop:b stop

endconnect 然后download结果:

跟踪。调试过程值:

将r2赋值为0x11111111,r3赋值为0x33333333

取r2的高八位,消去r3的低八位。

将r2的高八位传送到r3的低8位,r3的其他位清零。

最终结果:#用mov r3,r2,lsr#24将r2的高8位传送到r3的低8位没有考虑r3的其他位。还可以用orr r3,r3,r2,lsr #24 将r2的高8位传送到r3的低8位,没有改变r3的其他位。

结果分析:将r2赋值0x11111111然后和0xff000000相与取r2的低八位后为0x11000000,将r3赋值为0x33333333,然后和0xffffff00相与,得到0x333333300,再将将r2的高8位传送到r3的低8位,r3其他位清零。

2 .编写实现64位的加法运算,要求[r1:r0]-[r3:r2],结果放回[r1:r0]中。

程序:global _start

textstart:

ldr r0,=0x00003333 @r0作为低32位赋值。

ldr r1,=0x44440000 @r1作为高32位赋值。

ldr r2,=0x00001111 @r2作为低32位赋值。

ldr r3,=0x22220000 @r3作为高32位赋值。

subs r0,r0,r2r0与r2两个低32位相减。

sbc r1,r1,r3r1与r3两个高32位相减并减去借位位。

stop:b stop

endconnect 然后download结果:

跟踪。调试过程值:

r0,r1,r2,r3分别赋值

r0减去r2,结果0x00002222放在r0;r1减去r再减去借位位3结果0x22220000放在r1

最终结果:结果分析:r0,r1,r2,r3分别赋值为0x00003333,0x44440000,0x00001111,0x22220000。

r0-r2低四位相减结果存入r0,r0为0x00002222,r1-r3高位相减再减去借位位0结果存入r1,r1为0x22220000,得到[r1:r0]。

3 .编程实现除法运算(不是移位指令),并保留商(若不能整除,则要求保留余数).

程序**:global _start

textstart:

mov r0,#25 @r0为被除数,此时设为25

mov r1,#4 @r1为除数,此时设为4

mov r2,#0 @r2为商。

loop:mul r3,r1,r2 @将r1和r2相乘结果放在r3

add r2,r2,#1 @r2加1放在r2

sub r4,r0,r3 @r4为余数。

cmp r4,r1 @余数r4和除数r1比较。

bhi loop不相等循环。

bleq a

sub r2,r2,#1 @消除无法消除时的商多1的问题。

stop:b stop

a消除整除时的余数。

mov r4,#

b stop

end connect 然后download结果:

跟踪。调试过程值。

将除数和被除数存进去。

将商初始赋值为0,将商r2和除数r1相乘放入r3,用被除数减去r3得到的就是余数,和除数r1比较。

商为0时商为3时:

要是两者不相等,则跳转到loop语句循环,直到余数哥除数相等,则再将商减去1排除无法消除时的商多1的问题,得到最终结果余数为1。

最终结果:结果分析:首先给商赋初值为0,将商和除数相乘得到r3,用被除数减去r3,得到余数,将余数和除数比较,不相等则跳转到a,循环下去,直到余数和商相等结束循环,再排除无法消除时的商多1的情况,得到商,保留余数。

4.串拷贝(r0指向源数据的首地址,r1指向目的数据串的首地址)

程序**:global

equ num,8定义num==8

start:

ldr r0,=srcstr @指向源数据r0

ldr r1,=dststr @指向目的数据r1

mov r3,#numr3=8

mov lr,pc返回。

b astop:b stop

a:ldrb r2,[r0],#1加载无符号字节数据。

strb r2,[r1],#1存储无符号字节数据。

subs r3,r3,#1r3减去1,结果送入r3

cmp r3,#0将r3的内容与0相比较看是否相等。

bne a不相等则跳转到a

mov pc,lr返回。

data1,2,3,4,5,6,7,0 @定义源数据串srcstr

2,4,8,2,6,4,5,0 @定义目的数据串dststr

endconnect 然后download结果:

跟踪。调试过程值:

r0指向源数据 ,r1指向目的数据,设置num为8

将源数据存入1,将数据加载到r2,将目的数据存入1存储到r2,然后将num减去1然后放在r3,再将r3和0比较,如果不想等则跳转到循环标致a循环。

循环一次结果:

循环8次直到num为0

最后结果:结果分析:先取r0指向源数据的首地址,r1指向目的数据串的首地址,每次循环将r0加载1,r1存储1,直到num为0时结束循环。

三.过程中遇到的问题。

在做arm软件编译的时候遇到了一些问题,在将程序编译好后,在**的时候出现问题,检查一遍后发现在setting---debug中category---general时,没有将symbol file中选中编译后的文件,导致**失败。还有的就是有些指令不是很会用,有的时候会把比如idr和idrb混淆,以致用错。在我觉得,很多问题都出现自己setting的时候,设置的时候,有次将remote---remote device --选择easyiedarm7,然后**的时候就出错了,问同学之后才知道应该选择simarm7, easyiedarm7是在做硬件实验时候选择的。

编写程序的过程中,还是觉得很多指令都不是很会用,字指令和字节指令时最容易弄错的。

四.心得体会。

以前学习过汇编编程,arm给我的感觉就是和汇编很像,但是又比汇编简单很多,有些指令用起来很简单,让很很容易读懂。比如加载字数据idr比mov好用很多,在做实验的过程中有些命令不会用也会去问同学来搞懂。将程序**下来后,我们可以对程序进行单步调试,这样可以很容易就清楚每一步执行之后的结果,还可以通过memony(寄存器)设置地址来观察每个存储空间存储的内容,我觉得真的很方便。

ARM作业

程序 include define key2 0x00004000 p0.14控制led2con define led2con 0x00000800 p0.11低电平时点亮led2con define time0 fpclk 10 初始状态下一周期低电平时间0.1s define time1 fpc...

ARM作业

院系 班级 姓名 学号 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了 i o 设备。概括的讲 一块芯片就成了一台计算机。它的体积小 质量轻 便宜 为学习 应用和开发提供了便利条件。同时,学习使用单片...

ARM作业

程序 file 功能 键盘输入。当检测到有按键输入时,对发光二极管进行取反控制。使用i o口输入方式对按键进行扫描。include define key1 0x00010000 p0.16控制led1con define key2 0x00004000 p0.14控制led2con define l...