ARM实验指导书(wjq)(2)

2019-09-01 22:20

实验三、汇编指令实验 一、实验目的

掌握ARM7TMDI 汇编指令的用法,并能编写简单的汇编程序;

学习ARM 微控制器的16 位Thumb 汇编指令的使用方法掌握指令的条件执行; 二、实验设备

硬件:嵌入式实验平台一套、仿真器一个、PC机一台。

软件:Windows 98/2000/NT/XP 操作系统、仿真器驱动程序、ADS开发软件一套。 三、实验内容

分别使用ARM、Thumb指令ADD,MOV,CMP,B 计算1+2+3+?+N 的值。 四、实验原理

ARM 处理器共有两种工作状态:

ARM 32 位,这种状态下执行字对准的ARM 指令。

Thumb 16 位,这种状态下执行半字对准的Thumb 指令。

注意:ARM和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。 ARM 处理器在两种工作状态之间可以切换。

(1) 进入Thumb 状态。当操作数寄存器的状态位0 为1 时,执行BX 指令进入Thumb 状态。如果处理器在Thumb 状态进入异常,则当从异常出来(IRQ、FIQ、Undef、Abort、SWI)返回时,自动切换到Thumb 状态。

(2)进入ARM 状态。当操作数寄存器的状态位0 为0 时,执行BX 指令进入ARM 状态。处理器进行异常处理(IRQ、FIQ、Undef、Abort、SWI)。在此情况下,把PC 放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。 Thumb 状态下的寄存器集是ARM 状态下寄存器集的子集。程序员可以直接访问8 个通用寄存器(R0-R7)、PC、SP、LR 和CPSP。每一种特权模式都有一组SP、LR 和SPSR。Thumb 状态的R0-R7 与ARM 状态的R0-R7 一致。 Thumb 状态的CPSR 和SPSR 与ARM 状态下的CPSR和SPSR 一致。

Thumb 状态的SP 映射到ARM 状态的R13。

Thumb 状态的LR 映射到ARM 状态的R14。 Thumb 状态的PC 映射到ARM 状态的PC(R15)。 本程序使用R0 保存结果,所以一开始就要初始化为0;循环执行R0=R0+R1,R1 为循环计数器,从1 开始计数,每一次循环R1 加1;当循环计数器R1 的值到达N 时,运算结束。

五、实验操作步骤

1.启动ADS1.2,使用ARM Execuatable Image 工程模板建立一个工程ASM_Project。 2.建立源文件test2.s,编写实验程序,然后添加到工程中(ARM指令和Thumb 指令实验的test2.s 程序源码分别见下清单) 。

3.设置工程链接地址RO Base 为0x0C000000 4.编译链接工程,选择【Project】->【Debug】,启动AXD进行调试。

5.打开寄存器窗口(Processor Registers),选择Current 项监视各寄存器的值。

6.单步运行程序,注意执行BX R0指令前后CPSR寄存器的T位。 说明:在寄存器窗口的CPSR 寄存器,大写字母的位表示该位为1,小写字母的位表示 该位为0(比如“T”表示T 位为1,“t”表示T 位为0)。

7.理解并掌握本实验原理及程序,完成练习题 。

六、实验参考程序

Thumb 汇编指令实验的参考程序代码清单 ;文件名:test.s

;功能:计算1+2+3+?+N 的值

N EQU 50

; 定义N 的值为50

AREA testcode, CODE, READONLY ;声明代码段testcode ENTRY ;标识程序入口 CODE32

; 声明32 位ARM 指令

;设置堆栈指针

ARM_CODE

LDR SP, =0x40003F00

ADR R0,THUMB_CODE+1 BX R0 LTORG

CODE16

;跳转并切换处理器状态 ;声明文字池

;声明16 位Thumb 指令

;设置子程序SUM_N 的入口参数 ;调用子程序SUM_N

THUMB_CODE

LDR R0,=N

BL SUM_N

B THUMB_CODE

;名称:SUM_N

;功能:计算1+2+3+?+N 的值 ;入口参数:R0( N 的值 ) ;出口参数:R0( 运算结果 ) SUM_N

PUSH {R1-R7,LR} MOVS R2,R0 BEQ SUM_END

CMP R2,#1

BEQ SUM_END MOV R1,#1 MOV R0, #0

;寄存器入栈保护

;将N 的值复制到R2,并影响条件码标志 ;若N的值为0,则返回。

;若N的值为1,则返回。

;初始化计算器R1=1 ;初始化结果寄存器R0=0 ; R0=R0+R1

;结果溢出,跳转到SUM_ERR ;将计算器的值与N 比较 ;若计数器的值≥N,则运算结束

SUM_L1 ADD R0,R1

BCS SUM_ERR

CMP R1,R2

BHS SUM_END ADD R1,#1 B SUM_L1

SUM_ERR MOV R0, #0

SUM_END POP {R1-R7,PC} ;寄存器出栈,返回

END

;ARM 汇编指令实验的参考程序代码清单 ;文件名:add.s

;功能:计算1+2+3+?+N 的值

N EQU 5;

AREA Example,CODE,READONLY ENTRY CODE32

START

LDR R0,=N

MOV R2,R0 ;R2 充当计数器 MOV R0,#0 MOV R1,#0 LOOP

CMP R1,R2 BHI ADD_END ADD R0,R0,R1 ADD R1,R1,#1 B LOOP

ADD_END

B START END

七、练习题

1.如何切换处理器状态

2.在Thumb 指令只有哪一条指令具有条件执行功能? 3.如何判断运算结果溢出?

实验四、ARM 微处理器工作模式实验

一、实验目的

通过实验掌握学会使用MSR/MRS 指令实现ARM 处理器工作模式的切换,观察 不同模式下的寄存器,加深对CPU 结构的理解。 二、实验设备

硬件:嵌入式实验平台一套、仿真器一个、PC机一台。

软件:Windows 98/2000/NT/XP 操作系统、仿真器驱动程序、ADS 开发软件一套。 三、实验内容

通过ARM 汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握 ARM 不同模式的进入与退出。

四、实验原理

1.ARM 处理器模式

ARM 体系结构支持表1-所示的7 种处理器模式。 处理器模式说明:

用户 usr 正常程序执行模式

FIQ fiq 支持告诉数据传送或通道处理 IRQ Irq 用于通用中断处理

管理 svc 操作系统保护模式

中止 abt 实现虚拟存储器和/或存储器保护 未定义 und 支持硬件协处理器的软件仿真 系统 sys 运行特权操作系统任务

在软件控制下也可以改变模式,外部中断或异常处理也可以引起模式发生改变。大多数应用程序在用户模式下执行。当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。这允许适当编写操作系统来控制系统资源的使用。

除用户模式外的其他模式成为特权模式。它们可以自由地访问系统资源和改变模式。其 中5 种称为异常模式,即:

FIQ(Fast Interrupt Request); IRQ(Interrupt Request); 管理(Supervisor); 中止(Abort); 为定义(Undefined) 。

当特定的异常出现时,进入相应的模式。每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。

剩下的模式是系统模式。仅ARM 体系结构V4 以及以上的版本有该模式。不能由于任 何异常而进入该模式。它与用户模式有相同的寄存器,但它是特权模式,不受用户模式的限 制。它供需要访问系统资源的操作系统任务使用,但希望避免使用与异常模式有关的附加寄 存器。避免使用附加寄存器保证了当任何异常出现时,都不会使任务的状态不可靠。

2.程序状态寄存器

在所有处理模式下,都可以访问当前程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的状态。 CPSR 和SPSR 的格式如下:

31 30 29 28 27 26 8 7 6 5 4 3 2 1 0 N Z C V Q DNM(RAZ) I F T MMMM M (1)条件码标志

N、Z、C、V:大多数指令可以检测这些条码标志,以决定程序指令如何执行。 (2)控制位

最低8 位I、F、T 和M 位用作控制位。当异常出现时改变控制位。当处理器在特权模式下时也可以由软件改变。

中断禁止位:I置1 则禁止IRQ 中断;F 置1 则禁止FIQ 中断。

T 位:T=0 指示ARM 执行;T=1指示Thumb 执行。在这些体系结构的系统中,可自由地使用能在ARM 和Thumb 状态之间切换的指令。

模式位:M0、M1、M2、M3 和M 4(M[4:0])是模式位。这些位决定处理器的工作模 式,如表1- 所列:

M[4:0] 模式可访问的寄存器

0b10000 用户 PC, R14~R0, CPSR

0b10001 FIQ PC, R14_fiq~R8_fiq, R7~R0, CPSR, SPSR_fiq 0b10010 IRQ PC, R14_irq~R13_irq, R12~R0, CPSR, SPSR_irq 0b10011 管理 PC ,R14_svc~R13_svc, R12~R0, CPSR, SPSR_svc 0b10111 中止 PC, R14_abt~R13_abt, R12~R0, CPSR, SPSR_abt 0b11011 为定义 PC,R14_und~R13_und,R12~R0, CPSR, SPSR_und 0b11111 系统 PC,R14~R0,CPSR (3)其他位

程序状态寄存器的其他位保留,用作以后扩展。

五、实验操作步骤

1.启动ADS1.2 ,建立一个新的工程;

2.建立汇编源程序文件TEST3.S,编写实验程序,添加到工程中;

3.编译链接工程,点击Debug 按钮,启动AXD 进行调试;

4.点击【Processor Views】->【Registers】,打开Current 项监视个寄存器的值; 5.单步运行程序,注意观察CPSR、SPSR 以及R0 寄存器值得变化。

说明:CPSR 寄存器显示方式如图1- 所示。显示分为两部分,一部分是各个标志位, 另一部分是工作模式。

标志位NZCVQ 为条件码标志N、Z、C、V、Q,显示为大写字母,表示该位为1;显示为小写字母,表示该位为0。Q标志在ARM 体系结构v5 及以上版本的E 变量中才有效。 标志位IFT 为IRQ 中断禁止位I、FIQ中断禁止位F、ARM微控制器状态位T,显示为 大写字母,表示该位为1;显示为小写字母,表示该位为0。T 标志在ARM 体系结构v4 及以上版本的T变量中才有效。

6.理解并掌握本实验原理及程序,完成练习题


ARM实验指导书(wjq)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:某立交桥工程施工组织设计策划方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: