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...