嵌入式报告3.docx
《嵌入式报告3.docx》由会员分享,可在线阅读,更多相关《嵌入式报告3.docx(10页珍藏版)》请在冰豆网上搜索。
嵌入式报告3
中南大学
嵌入式系统与单片机
实验报告
学生姓名惠苗壮
指导教师贺建飚
学院信息科学与工程学院
专业班级计科0904班
学号0909091627
完成时间2012年4月24日
ARM汇编指令实验二
一.实验目的:
实验A:
通过实验掌握LDM/STM,B,BL等指令,完成较为复杂的存储区访问和程序分支。
学习使用条件码,加深对CPSR的认识。
实验B:
通过实验熟悉MOV/CMP/B等指令的使用,在实验中根据R0寄存器的不同选择不同的子程序。
二.实验设备:
1)硬件:
PC机;
2)软件:
ADS1.2集成开发环境,Windows98/2000/NT/XP。
三.实验内容:
1)熟悉开发环境并完成一块存储区的复制;
2)完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
四.实验原理:
1)ARM程序状态寄存器
在所有处理器模式下都可以访问当前的程序状态寄存器CPSR。
当异常出现时,SPSR用于保存CPSR的状态。
CPSR和SPSR的格式如下:
五.实验操作步骤:
实验A:
本实验主要让读者熟悉stmfd/ldmia/sub/bne/beq等指令的使用。
通过使用这些指令实现到一块存储区的复制。
先进行2次以8个字节为单位的数据复制,对剩下不足8个字的数据跳转到copywords,以字为单位复制。
1)参考2.1节ARM汇编指令实验一中实验A的步骤
(1),建立一个新的工程,命名为ARMcode。
2)参考2.1节ARM汇编指令实验一中实验A的步骤
(2)和本实验参考程序,建立ARM-code.S并添加文件到工程ARMcode。
3)参考2.1节ARM汇编指令实验一中实验A的步骤(3),程序编辑ARMcode.S。
4)参考2.1节ARM汇编指令实验一中实验A的步骤(4).进行编译和链接。
5)参考2.1节ARM汇编指令实验一中实验A的步骤(5).设置AXD进行调试.并选择
ProcessorViewRegisters打开寄存器窗口;
6)选择ProcessorViewMemory打开存储器窗口,观察地址Ox8054-Ox80A0的内容,以及地址Ox80A4-Ox80F0的内容
7)劝单步执行程序并观察和记录寄存器与存储器中的值变化,注意观察步骤(6)里面地址的内容变化当执行STMFD.LDMFD.LDMIA和STMIA指令时.注意观察其后面参数听指的地址段或寄存器段的内容变化。
8)结含实验内容和相关资料,观察程序运行.通过实验加深理解ARM指令的使用。
9)理解和掌握实验后,完成实验练习题.
实验B:
1)参考汇编指令实验一和本实验的参考程序,创建新工程asm_b;
2)参考实验A的步骤完成调试;
3)理解和掌握实验后完成练习题。
六.实验代码
实验A代码:
numequ20
areastart,code,readonly
entry
ldrr0,=src
ldrr1,=dst
movr2,#num
movsp,#0x400
blockcopy
movr3,r2,lsr#3
beqcopywords
stmfdsp!
{r4-rl1}
octcopy
ldmiar0!
{r4-rl1}
stmiar1!
{r4-rl1}
subsr3,r3,#1
bneoctcopy
ldmfdsp!
{r4-rl1}
copywords
andsr2,r2,#7
beqstop
;创建数据缓冲区
ltorg
areasrc,data,readwrite
dcd1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,3
areadst,data,readwrite
lcd0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
end
实验b代码
numequ2
areastart2,code,readonly
entry
movr0,#0
movr1,#3
movr2,#2
blarithfunc
stop
bstop
;………………
arithfunc
cmpr0,#num
bhsdoadd
adrr3,jumptable
ldrpc,[r3,r0,lsl#2]
jumptable
dcddoadd
dcddosub
doadd
addro,r1,r2
movpc,lr
dosub
subro,r1,r2
movpc,lr
end
七.实验注意事项
1)标号的使用
标号是一个符号,它表示程序中当前的指令或者数据地
址。
如果在程序中出现两个相同的标号,汇编器回产生一个警告,并且只有第一个标号有效。
2)几个伪指令
1.LDR
2.ADR
3.LTORG
2.4ARM处理器工作模式实验
一.实验目的:
通过实验掌握使用MSK/MRS指令实现ARM处理器下咋模式的切换,观察不同模式下的寄存器.加深对CPU结构的理解。
二.实验设备:
1)硬件:
PC机;
2)软件:
ADS1.2集成开发环境,Windows98/2000/NT/XP。
三.实验内容:
通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握
ARM不同模式的进人与退出,该实验通过使用MSR/MRS等指令实现依次从System模式
(sys)-FIQ模式(fiq)-管理模式(svc)-中止模式(abt)-IRQ模式(irc).最后到未定义模式(und)的切换。
四.实验原理:
1)ARM处理器模式
ARM体系结构支持如表2-2所列的7种处理器模式。
在软件控制下可以改变模式,外部中断或异常处理也可以引起模式发生改变。
大多数应用程序在用户模式下执行当处理器下咋在用户模式时.正在执行的程序不能访
问某些被保护的系统资源·也不能改变模式·除非异常(exception)发生。
这允许适当编写操作系统来控制系统资源的使用。
除用户模式外的其他模式称为特权模式它们可以自由地访问系统资源和改变模式。
其中
的5种称为异常模式FIQ,IRQ,管理,终止,和未定义。
当特定的异常出现时,进人相应的模式每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。
剩下的模式是系统模式仅ARM体系结构v4以及以上的版本有该模式不能由于任何
异常而进人该模式。
它与用户模式有完全相同的寄存器.然而它是特权模式,不受用户模式的限制,它供需要访问系统资源的操作系统任务使用,但希望避免使用与异常模式有关的附加寄存器避免使用附加寄存器,保证了当任何异常出现时,都不会使任务的状态不可靠。
2)程序状态寄存器
有关程序状态寄存器的介绍详见实验一的实验原理。
五.实验操作步骤:
1)参考2.1节ARM汇编指令实验一中实验A的步骤
(1),建立一个新的工程,命名为ARMMode。
2)参考2.1节ARM汇编指令实验一中实验A的步骤
(2)和本实验参考程序,建立ARM-
Mode.S并添加文件到工程ARMMode。
3)参考2.1节ARM汇编指令实验一中实验A的步骤(3),程序编辑ARMMode.S。
4)参考2.1节ARM汇编指令实验一中实验A的步骤(4).进行编译和链接。
5)参考2.1节ARM汇编指令实验一中实验A的步骤(5).设置AXD进行调试.并选择
ProcessorViewRegisters打开寄存器窗口;
6)单步执行.观察并记录寄存器RO和CPSR值的变化,以及每次变化后执行寄存器赋值
后的36个寄存器值的变化情况,尤其注意各个模式下R13和R14的值。
7)劝结合实验内容和相关资料,观察程序运行.通过实验加深理解ARM各种状态下寄存器的使用
8)理解和掌握实验后,完成实验练习题.
六.实验代码
.global_start
.text
_start:
bReset_Handler
Undefined_Handler:
bUndefined_Handler
bSWI_Handler
Prefetch_Handler:
bPrefetch_Handler
Abort_Handler:
bAbort_Handler
nop/*Reservedvector*/
IRQ_Handler:
bIRQ_Handler
FIQ_Handler:
bFIQ_Handler
SWI_Handler:
movpc,lr
Reset_Handler:
mrsr0,cpsr/*readCPSRvalue*/
bicr0,r0,#0x1f/*clearlow5bit*/
orrr0,r0,#0x1f/*setthemodeasSystemmode*/
msrcpsr,r0/*writethedataintoCPSR*/
movr0,#1/*initializationtheregisterinSystemmode*/
movr1,#2
movr2,#3
movr3,#4
movr4,#5
movr5,#6
movr6,#7
movr7,#8
movr8,#9
movr9,#10
movr10,#11
movr11,#12
movr12,#13
movr13,#14
movr14,#15
/*intoFIQmode*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0x11/*setthemodeasFIQmode*/
msrcpsr,r0
movr8,#16/*initializationtheregisterinFIQmode*/
movr9,#17
movr10,#18
movr11,#19
movr12,#20
movr13,#21
movr14,#22
/*intoSVCmode*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0x13/*setthemodeasSVCmode*/
msrcpsr,r0
movr13,#23/*initializationtheregisterinSVCmode*/
movr14,#24
/*intoAbortmode*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0x17/*setthemodeasAbortmode*/
msrcpsr,r0
movr13,#25/*initializationtheregisterinAbortmode*/
movr14,#26
/*intoIRQmode*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0x12/*setthemodeasIRQmode*/
msrcpsr,r0
movr13,#27/*initializationtheregisterinIRQmode*/
movr14,#28
/*intoUNDEFmode*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0x1b/*setthemodeasUNDEFmode*/
msrcpsr,r0
movr13,#29/*initializationtheregisterinUNDEFmode*/
movr14,#30
bReset_Handler
.end
七.实验感想
通过此次实验学会了使用MSR/MRS指令实现ARM处理器工作模式的切换,观察不同模式下的寄存器,加深了对CPU结构的理解,同时掌握了ld中如何使用命令行指定代码段起始地址。