文档库 最新最全的文档下载
当前位置:文档库 › ARM课后习题及答案

ARM课后习题及答案

《ARM嵌入式系统基础教程》第二版周立功北航出版社

第二章ARM7体系结构

1、基础知识

(1)ARM7TDMI中的T D M I为何含义?

这四个字母分别代表ARM7的一个特点,T:高密度16位Thumb指令集扩展,D:支持片上调试,M:64位乘法指令,I:带嵌入式ICE硬件仿真功能模块

(2)ARM7TDMI采用几级流水线?使用何种存储器编址方式?

ARM7为三级流水线(ARM9为五级),注意PC指向的是正在取指的指令,而非执行的指令。是

(3)ARM处理器模式和ARM处理器状态有何区别?

模式指指令集,即出于ARM模式还是Thumb模式;状态指七种状态,即用户、管理、中断、快速中断、中止、未定义、系统等。

(4)分别列举ARM的处理器模式和状态

见(3)

(5)PC和LR分别使用哪个寄存器?

PC:R15 LR:R14 SP:R13

(6)R13寄存器的通用功能是什么?

堆栈指针

(7)CPSR寄存器中哪些位用来定义处理器状态?

低5位。CPSR寄存器详细格式如下:

31 30 29 28 ... 7 6 5 4 3 2 1 0

N Z C V 保留I F T M4 M3 M2 M1 M0

(8)如何禁止IRQ和FIQ中断?

将CPSR寄存器的I位和F位置1。

2、存储器格式

定义R0=0x12345678,使用存储指令将R0的值存放在0x4000单元。若存储器格式为大端格式,将0x4000单元的值取到R2中,会是多少呢?若小端格式呢?

先说小端模式,小端指低字节在低地址,是顺着的。小端模式时,数据存储如下:

地址:0x4003 0x4002 0x4001 0x4000

数据:0x12 0x34 0x56 0x78

大端模式时,

地址:0x4003 0x4002 0x4001 0x4000

数据:0x78 0x56 0x34 0x12

而无论数据如何存储,将0x4000单元的值取到R2中,都是顺序读的。所以小端模式时,R2中的值为0x78563412,大端模式时是0x12345678。

3、处理器异常

请描述一下ARM7TDMI产生异常的条件。各种异常会使处理器进入哪种模式?进入异常时内核有何操作?各种异常的返回指令又是什么?

第三章、ARM7TDMI指令系统

1.

(1)ARM7TDMI有几种寻址方式?LDR R1,[R0,#0x08]属于哪种?

共有7种寻址方式,略述如下:

寄存器寻址:MOV R1,R2

立即寻址:MOV R1,#0x0707

寄存器移位寻址:MOV R1,R2,LSL #2

寄存器间接寻址:LDR R1,[R2]

基址寻址:LDR R1,[R2,#0x03]

多寄存器寻址:LDMIA R1,{R2-R7,R12}

堆栈寻址:STMFD SP,{R1-R7,LR}

相对寻址:即跳转

故,题中提问的寻址方式为基址寻址

(2)ARM指令的条件码有多少个?默认条件码是什么?

条件码共有16个,分别为相等、不等、无符号数大于或等于、无符号数大于、无符号数小于、无符号数小于或等于、有符号数大于或等于、有符号数小于、有符号数大于、有符号数小于或等于、负数、正数或零、溢出、未溢出、无条件执行、从不执行。

默认条件码为无条件执行(AL)

(3)ARM指令中,第二个操作数有哪几种形式?列举5个8位图立即数。

有三种形式:

常数表达式(必须为8位图立即数)MOV R0,#1

寄存器方式MOV PC,R0

寄存器移位方式ADD R1,R1,R1,LSL #3 ;R1=R1*9

所谓8位图立即数,是指由一个8位数循环移动偶数位得到的。之所以做这样的限制,详细解释见https://www.wendangku.net/doc/e416014287.html,/bournechen/archive/2009/12/07/4958132.aspx 随意举例:0x01<<2 0x02<<3 0x03<<19 0x04<<30 0x05>>18

(4)LDR/STR指令的偏移形式有哪4种?LDRB指令和LDRSB指令有何不同?

零偏移LDR Rd,[Rn]

前索引偏移LDR Rd,[Rn,#3] LDR Rd,[Rn,#3]!

后索引偏移LDR Rd,[Rn],#3

程序相对偏移LDR Rd,label

LDRB和LDRSB的区别在于,前者为无符号字节加载,高24位清零;后者为有符号字节加载,高24位用符号位扩展

(5)请写出MOV指令和LDR加载指令的区别及用途。

MOV指令进行的是寄存器与寄存器之间的数据传递,LDR指令进行的是寄存器与存储器之间的数据传递

(6)CMP指令是如何执行的?写一程序,判断R1是否大于0x30,是则将R1减0x30

CMP R1,#0x30

相关文档
相关文档 最新文档