arm汇编指令存储区访问及程序分支
-1- 昆明理工大学信息工程与自动化学院学生实验报告 ( 2012 — 2013 学年 第 2 学期 ) 课程名称:嵌入式技术及应用 开课实验室:信自楼 443 2013年04月 专业、年级、 班 计科101 学号 姓名 成绩 实验项目名称 ARM汇编指令存储区访问及程序分支 指导教师 万小容 教 师 评 语 该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强 □ B.中等 □ C.差 □ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般 □ C.没有 □教师签名:年 月 日 一、实验目的及内容 1、编写程序循环对R4~R11进行8次赋值。R4~R11起始值为1~8,每次加操作后, 把R4~R11的内容放入SP栈中,SP初始设置为0 x800。最后把R4~R11用LDMFD指令 清空赋值为0。 2、通过实验掌握使用ldm/stm,b,bl等指令完成较为复杂的存储区访问及程序分支, 学习使用条件码,加强对CPSR的认识 3、单步调试,截图并用文字说明。 4、要有实验总结。-2- 二、实验原理及基本技术路线图(方框原理图或程序流程图)ARM通用寄存器(R0-R15)可分为三类: 1、不分组寄存器R0-R7; 不分组寄存器R0~R7在所有处理器模式下,它们每一个都访问一样的32位寄存器。它 们是真正的通用寄存器,没有体系结构所隐含的特殊用途。 2、分组寄存器 R8-R14; 分组寄存器R8~R14对应的物理寄存器取决于当前的处理器模式。若要访问特定的物 理寄存器而不依赖当前的处理器模式,则要使用规定的名字。寄存器R8~R12各有两组物 理寄存器:一组为FIQ模式,另一组为除了FIQ以外的所有模式。 寄存器R8~R12没有任何指定的特殊用途,只是在作快速中断处理时使用。寄存器 R13、R14各对应6个分组的物理寄存器,1个用于用户模式和系统模式,其它5个分别用于 5种异常模式。寄存器R13通常用做堆栈指针,称为SP;寄存器R14用作子程序链接寄存器, 也称为LR。 3、程序计数器R15。 寄存器R15用做程序计数器 (PC)。 在本实验中,ARM 核工作在用户模式,R0~R15可用。本实验涉及到的汇编指令语法及规则: ldr ldr伪指令将一个32位的常数或者一个地址值读取到寄存器中。当需要读取到寄存器 中的数据超过了mov或者mnv指令可以操作的范围时,可以使用ldr伪指令将该数据读取到 寄存器中。在汇编编译器处理源程序时,如果该常数没有超过mov或者mnv可以操作的范-3- 围,则ldr指令被这两条指令中的一条所替代,否则,该常数将被放在最近的一个文字池 内(literal pool) ,同时,本指令被一条基于PC的ldr指令替代。 语法格式: ldr , = 其中,expression为需要读取的32位常数;register为目标寄存器。 三、所用仪器、材料(设备名称、型号、规格等或使用软件)PC一台、Embest IDE集成开发环境。 四、实验方法、步骤(或:程序代码或操作过程) .equ stack_top, 0 x800 .equ loop_time, 0 x8 .global _start .text _start:/**//* 设置寄存器初始值 */ldr r0, =reg_initldmia r0!, {r4-r11}/**//* 设置栈顶初始值 */mov sp, #stack_top/**//* 循环 8 次 */mov r0, #loop_time loop:-4-/**//* 累加 */add r4, r4, #0 x1add r5, r5, #0 x1add r6, r6, #0 x1add r7, r7, #0 x1add r8, r8, #0 x1add r9, r9, #0 x1add r10, r10, #0 x1add r11, r11, #0 x1/**//* 入栈 */stmfd sp!, {r4-r11}subs r0, r0, #0 x1bne loop loop_out:/**//* R4-R11 清零 */ldr r0, =reg_finildmfd r0!, {r4-r11}/**//* 结束 */ stop: b stop .ltorg/**//* 寄存器的最终值 */ reg_fini:.long 0, 0, 0, 0, 0, 0, 0, 0-5-/**//* 寄存器的初始值 */ reg_init:.long 1, 2, 3, 4, 5, 6, 7, 8 .end 五、实验过程原始记录( 测试数据、图表、计算等)-6--7- 六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必 须用计算纸或程序运行结果、改进、收获) 通过本次实验我掌握了简单ARM汇编指令的使用方法和对循环的控制,及使用 ldm/stm,b,bl等指令完成较为复杂的存储区访问和程序分支。加强了对CPSR的认识, 初步掌握msr/mrs指令实现ARM处理器工作模式的切换。-8- 注:教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。