1.ARM处理器有几种运行模式,处理器如何区别各种不同的运行模式?
答:ARM体系结构支持7种处理器模式:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式等。详见表12-1。
表12-1 处理器模式及其用途
(续)
2.通用寄存器中PC、CPSR和SPSR的作用各是什么?
答:PC:是指令计数器存放下一个指令的地址,用在三地址指令,二地址指令,一地址指令之中。
CPSR:程序状态寄存器(Current Program Status Register)(当前程序状态寄存器),可在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。CPSR在用户级编程时用于存储条件码。
SPSR:程序状态保存寄存器(Saved Program Status Register),每一种处理器模式下都有一个状态寄存器SPSR,用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。由于用户模式和系统模式不是异常中断模式,所以这两种模式没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。
3.从编程的角度讲,ARM处理器的状态有哪两种?这两种状态之间如何转换?
答:第一种ARM状态(复位状态):处理器执行32位的字对齐的ARM指令;第二种Thumb状态:处理器执行16位的半字对齐的Thumb指令。ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换。进入Thumb状态:当操作数寄存器的状态位(最低位)为1时,执行BX指令就可以进入Thumb状态。如果处理器在Thumb状态时发生异常(异常处理要在ARM状态下执行),则当异常处理返回时自动切换到Thumb状态。进入ARM状态:当操作数寄存器的状态位(最低位)为0时,执行BX指令就可以进入ARM状态。处理器进行异常处理时,把PC的值放入异常模式链接寄存器中,从异常向量地址开始执行程序,系统自动进入ARM状态。
4.ARM体系结构中的哪一条特征是大多数RISC体系结构所不具备的?哪些特征是ARM和其他RISC体系结构所共有的?
答:ARM就是一种RISC结构的处理器,ARM有Thumb工作状态和ARM工作状态的区别。普通RISC没有这个区别。ARM和其他RISC体系结构所共有的特征:
1)Load/Store体系结构:也称为寄存器/寄存器体系结构或RR系统结构。在这类机器中,操作数和运算结果不能直接从主寄存器中存取,而是必须借用大量的标量或矢量寄存器来进行中转。采用这一结构的处理器必然要使用更多的通用寄存器存储操作数和运算结果,由于寄存器与运算器之间的数据传输速度远高于主存与运算器之间的数据传输速度,采用这一结构有助于提高计算机整体的运行速度。
2)采用固定长度精简指令集:这样使得机器译码变得容易,可以通过硬件直接译码的方式完成对指令的解析。虽然由于与复杂指令集相比,采用精简指令集需要更多指令来完成相同的任务,但采用硬件直接译码的速度却高于采用微码方式译码。通过采用高速缓存等提高寄存器存储速度的技术,采用固定长度精简指令集的机器可以获得更高性能。
3)三地址指令格式:除了除法指令外,ARM的大部分数据处理指令采用三地址指令,即在指令中包含了目的操作数、源操作数和第二源操作数。
5.ARM指令有哪几种寻址方式?试分别说明。
答:共有9种寻址方式:
6.在使用ARM汇编编程时,其寄存器通常可以采用别名指代,PC、LR和SP分别指的是什么寄存器?它们的主要用途是什么?
答:R15别名PC(Program Counter),中文称为程序计数器,它的值是当前正在执行的指令在内存中的位置,而当指令执行结束后,CPU硬件会自动将PC的值加上一个单位,从而使得PC的值为下一条即将执行的指令在内存中的位置,这样CPU硬件就可以根据PC的值自动完成取指的操作。
R14别名LR(Linked Register),中文称为链接寄存器,它与子程序调用密切相关,用于存放子程序的返回地址,它是ARM程序实现子程序调用的关键所在。(www.xing528.com)
R13又名SP(Stack Pointer),中文称为栈指针寄存器。顾名思义,它是用于存放堆栈的栈顶地址的。也就是说,每当出栈和入栈的时候,都将根据该寄存器的值来决定访问内存的位置(即出入栈的内存位置),同时在出栈和入栈操作完成后,SP寄存器的值也应该相应增加或减小。
7.什么是子程序?如何定义一个子程序的返回值?
答:在一个加工程序中,如果其中有些加工内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。
为子程序定义返回值,需要在子程序的“返回值类型”单元格中定义其返回值的数据类型,同时在子程序的任意一个分支中,都必须使用“返回()”命令将欲返回的值返回。
8.下列代码可以用于中断向量。处理程序(中断服务例程)的地址是多少?程序在哪里分支?
00000004:E59FF31C: LDR PC,&00000328
00000008:E59FF31C: LDR PC,&0000032C
0000000C:E59FF31C: LDR PC,&00000330
00000010:E59FF31C: LDR PC,&00000334
00000014:E59FF31C: LDR PC,&00000338
00000018:E59FF31C: LDR PC,&0000033C
答:处理程序(中断服务例程)的地址是00000004,程序分支地址:00010。
9.ARM芯片LPC2124的P0.0口到P0.10口接LCD,P0.11接LED,如主教材图12-1所示。每过一段时间LED状态改变,LCD显示LED的状态。试搭建Proteus仿真电路并编写C语言程序。
答:仿真电路如图12-1所示。
图12-1 习题与思考题9附图
C语言源程序如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。