嵌入式复习思考题(1)答案

  • 格式:doc
  • 大小:68.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式复习思考题及答案(1)

一、简答题

1、ARM9有哪几种工作模式?其中哪几种属于特权模式?哪几种属于几种异常模式?

答:有用户、系统、管理、中止、未定义、普通中断、快速中断。系统、管理、中止、未定义、普通中断、快速中断属于特权模式。管理、中止、未定义、普通中断、快速中断属于几种异常模式。

2、ARM9有哪2种工作状态?各自特点?实现状态切换指令的是什么?

答:ARM状态与Thumb状态。ARM状态指令是32位;Thumb状态指令是16位。切换指令是BX。

3、简述ARM9在不同工作模式下寄存器分布情况(用图表说明)。R13、R1

4、R15的固定用途;CPRS和SPRS名称及功能。

答:R13常作为堆栈指针SP、R14作为链接寄存器LR、R15作为程序计数器PC。CPRS是当前程序状态寄存器,包含条件代码、中断禁止位、当前处理器模式以及其他状态和控制信息。SPRS是程序状态保存寄存器,异常出现时用于保存CPRS的状态。

4

5

答:响应过程:1、将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14中;

2、将CPSR的内容保存到将要执行的异常中断对应的SPSR中;

3、根据异常类型CPSR中的运行模式位;

4、将相应的矢量地址赋值给PC,开始执行异常处理程序。还可设中断禁止位。

返回过程: 1、将连接寄存器LR的值减去相应的偏移量后送到PC中;

2、将SPSR内容送回CPSR;

3、若在进入异常处理时设置了中断禁止位,要在此清除。

6、写出ARM9支持的寻址方式,各举一例。

答:略

7、写出指令LDRB/LDRH/LDR的区别。

答:LDRB将内存单元一个字节的数据扩展到32位装载到寄存器;

LDRH将内存单元半字(两个字节)的数据扩展到32位装载到寄存器;

LDR 将内存单元一个字的数据装载到寄存器。

8、写出LDM、STM指令用于数据块拷贝时对应的4种后缀以及用于堆栈操作对应的4种后缀。

解释各自的执行过程。

答:数据块拷贝后缀:IA操作后指针增;DA操作后指针减;

IB操作前指针增;DB操作前指针减。

堆栈操作后缀:FD满递减;ED空递减;FA满递增;EA空递增。

9、ARM和Thumb两种状态下各自堆栈的生成方式有何不同?写出各自对应的入栈、出栈指令。答:ARM堆栈有4种生成方式满递增、满递减、空递增、空递减;

入栈指令:STM(FD\ED\FA\EA 4种后缀之一)出栈指令:LDM(FD\ED\FA\EA 4种后缀之一)Thumb堆栈采用满递减的生成方式。入栈指令:PUSH . 出栈指令:POP

10、写出条件代码NE、EQ的判断条件。

答:NE Z=0 (不相等);EQ Z=1 (相等)

11、B、BL及BX指令有何区别?写出无嵌套的子程序调用及返回指令。

答:B是简单的转移指令,实现向目的地址的简单的跳转;

BL是带链接的转移指令,将转移指令后的下一条指令抵制保存到链接寄存器LR;

BX是带状态切换的转移指令。

子程序调用指令:BL DELAY; 无嵌套的子程序返回指令MOV PC,LR

12、举例说明伪指令LDR的2个主要用途。

答:LDR R1, =0X30408020 加载32位立即数到寄存器;

LDR R1, =SRC 加载一个地址值到寄存器。

13、什么是ATPCS?它有哪些规则?

答:ATPCS是ARM程序和Thumb程序中子程序调用的基本规则,使单独编译的C程序和汇编程序能相互调用。有数据栈规则、参数传递规则和子程序调用时寄存器使用规则。

二、程序阅读题(重点检测寻址方式及指令)

1、在每条语句后做简要注释,写出程序执行后R0、R1 、R2和C的值。

(知识点:算术、逻辑操作、影响标志位S)

AREA SUMM , CODE , READONLY

X EQU 8

Y EQU 16

ENTRY

MOV R0 , #X

MOV R1 , #Y

ADD R2 , R0 , R1

AND R0 , R2 , #0X0F

MOV R2 , #Y

ADDS R2 , R0 , R1 , LSR #1

STOP B STOP 程序执行后R0=8、R1=16 、R2=16和C=0。

END

2、分析程序,按照加“//”语句的要求解答。(知识点:堆栈操作)

AREA STK , CODE , READONLY

ENTRY

MOV R1 , #0X30

MOV R2 , #0X08

MOV SP , #0X400

STMFD SP!,{R1,R2};// ①写出语句执行后SP和R2的值SP= 0X3F8 ;R2=0X08

LDMFD SP!,{R5,R6};// ②写出语句执行后SP、R5和R6的值SP=0X400;R5=0X30;R6=0X08 LOOP B LOOP

END

3、写出程序实现的功能,并在每条语句后做简要注释。

(知识点:寻址方式[Rn] , #immediate、循环体、数据拷贝)

AREA armcopy CODE, READONLY

num EQU 16

ENTRY

ADR r1, src

ADR r3, dst

MOV r2, #num 程序实现了将内存src 处的16个字拷贝到dst处。