• 94.50 KB
  • 2022-04-22 11:48:16 发布

《ARM嵌入式系统结构与编程》课后习题答案.doc

  • 6页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《ARM嵌入式系统结构与编程》课后思考与练习题参考答案第一章绪论思考与练习题答案:1、答:见教材P2的1.1节内容。2、答:见教材P1的1.1节内容。3、答:见教材P4的1.2.1节的嵌入式Linux和嵌入式实时操作系统内核µC/OS-Ⅱ。4、答:见教材P6的1.3节的“工业控制领域”。5、答:见教材P8的1.4节的嵌入式技术的发展趋势。第二章ARM技术与ARM体系结构思考与练习题答案:1、答:对教材P15的2.2节的图2-1进行描述。2、答:参考教材P12的2.1.2节ARM内核版本命名规则说明。3、答:见教材P18的2.3节的ARM处理器共有7种工作模式。4、答:PSR具体的格式为:P21的图2-7,描述“标志域”和“控制域”各位的功能。C、Z、N、V进行置位和清零见P22的内容。5、答:ARM在异常时会进行以下操作:P24最上面的(1)(2)(3)(4)。ARM在异常返回时:(1)从SPSR_恢复CPSR;(2)从LR_恢复PC。6、答:见教材P25的“数据存储格式”中的“小端存储格式”和“大端存储格式”。7、答:在ARM三级流水线下:见教材P27的“三级流水线运行情况分析”的(1)带有存储器访问指令的流水线。8、答:ARM9在指令操作上采用的5级流水线:(1)取指令:从指令Cache中读取指令。(2)译码:对指令进行译码,识别出是对哪个寄存器进行操作,并从通用寄存器中读取操作数。(3)执行:进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。 (1)存储器访问:如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据Cache);如果不是对存储器访问的指令,本级流水线为一个空的时钟周期。(2)寄存器回写:将指令运算或操作结果写回到目标寄存器中。9、答:见教材P29的“5级流水线互锁分析”的内容。第二章ARM指令集寻址方式思考与练习题答案:1、答:见教材P32的3.1节中“2.指令条件码”的内容。2、答:当指令的算术运算发生异常时,V标志位置1。例如:两个正数相加,其结果为一负数;或者两个负数相加,其结果为一正数,都会置V标志位。3、答:每一个立即数是由一个8位的常数进行32位循环右移偶数位得到的,其中循环右移的位数是由一个4位二进制数的两倍表示的,即:=immed_8进行32位循环右移(2*rotate_4)位,符合这一条件的都为合法的立即数。(1)0x54300B0101010000110000不合法(2)0x1080B000100001000111101000010(3)0x3040B001100000100111111000001(4)0x5010B010100000001不合法(5)0xfb100000B1111101100010000000000000000不合法(6)0x3340000B001100110100000000000000100111001101(7)0x3FC0000B001111111100000000000000100101111111(8)0x1FE00000B0001111111100000000000000000不合法(9)0x55800000B0101010110000000000000000000不合法(10)0x7F8000B01111111100000000000不合法(11)0x39C0000B001110011100000000000000100111100111(12)0x1FE800000B00011111111010000000000000000000不合法4、答:见教材P33的3.2节图3-1移位操作功能描述。5、答:ARM数据处理指令具体的寻址方式有5种:见教材P33的“2.具体寻址类型”内容。如果程序计数器PC作为目标寄存器,会产生程序发生跳转。6、答: 在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址有三种,具体见教材P36的3.3.2节内容。在Load/Store指令寻址中,半字、有符号字节寻址有两种,具体见教材P40的3.3.3节内容。它们之间的差别:在半字、有符号字节寻址中,没有Addressing_mode中的偏移量通过寄存器移位得到的形式。1、答:见教材P45的“2.内存操作”内容。2、答:见教材P46的四种类型的堆栈工作方式。栈操作指令寻址和块拷贝Load/Store指令之间的对应关系见教材P46的表3-10。3、答:见教材P46的3.5节的“1.协处理器加载/存储指令的寻址方式”的内容。4、答:(1)MOVR0,R1Cond00IopcodeSRn(R0)Rd(R0)operand2(R1)11100001101000000000000000000001(2)MOVR1,#0x198Cond00IopcodeSRn(R0)Rd(R0)operand2111000111010000000001111011001100x198:000110011000111101100110(3)ADDEQSR1,R2,#0xABCond00IopcodeSRn(R2)Rd(R1)operand200000010100100100001000010101011(4)CMPR2,#OxabCond00IopcodeSRn(R2)0000operand211100011010000100000000010101011(5)LDRR0,[R1,#4]Cond01IPU0WLRnRdaddressing_mode11100101100100010000000000000100(6)STRRO,[R1,R1,LSL,#2]!Cond01IPU0WLRnRdaddressing_mode11100111101000010000000100000001(7)LDRHR0,[R1,#4]Cond000PUIWLRnRdoffset_H1SH1offset_L11100001110100010000000010110100(8)LDRSBR0,[R2,#-2]!Cond000PUIWLRnRdoffset_H1SH1offset_L11100001011100100000000011010010(9)STRBR1,[R2,#0xA0]Cond01IPU1WLRnRdaddressing_mode11100101110000100001000010100000(10)LDMIAR0,{R1,R2,R8}Cond100PU0WLRnregister_list11101000100100000000000100000110(11)STMDBR0!,{R1-R5,R10,R11}Cond100PU0WLRnregister_list11101001001000000000110000111110(12)STMEDSP!,{R0-R3,LR}Cond100PU0WLRnregister_list11101000001011010100000000001111 第一章ARM指令集系统思考与练习题答案:1、答:ARM指令可以分为:数据处理指令、分支指令、加载/存储指令、批量加载/存储指令、交换指令、程序状态寄存器处理指令、协处理器操作指令和异常产生指令八类。无条件执行的指令有:由程序标号给出目标地址的跳转指令BLX、断点中断指令BKPT。2、答:(1)两个64位数的加法操作:R1和R0中存放了一个64位数据(作为被加数),R0存放数据的低32位;R2和R3中存放了另一个64位数据(作为加数),R2中存放低32位数据。运算结果送回到[R1:R0]中(R0存放低32位)。ADDSR0,R0,R2;低32位相加并影响标志位ADCR1,R1,R3;高32位相加再加上C标志位(进位值)(2)两个64位数的减法操作:使用SBC指令和SUBS指令联合使用可以实现两个64位操作数相减。如果R1和R0中存放了一个64位数据(作为被减数),R0存放数据的低32位;R2和R3中存放了另一个64位数据(作为减数),R2中存放低32位数据。运算结果送回到[R1:R0]中(R0存放低32位)。SUBSR0,R0,R2;低32位相减并影响标志位SBCR1,R1,R3;高32位相减再减去C标志位的反码(3)求一个64位数的负数操作:如果R1和R0中存放了一个64位数据,R0存放数据的低32位;寄存器R4和R5中放置其负数,其中R4放置低32位的数据。RSBSR4,R0,#0;0减去低32位并影响标志位RSCR5,R1,#0;0减去高32位再减去C标志位的反码3、答:LDRB指令的二进制编码格式为:Cond01IPU1WLRnRdaddressing_modeLDRSB指令的二进制编码格式为:Cond000PUIWLRnRdadrr_mode1SH1adrr_mode它们之间的区别是:LDRB指令和LDRSB指令编码格式中内存地址构成格式不一样;在功能上LDRB指令所加载的寄存器高24位清0,而LDRSB指令则用符号位扩展。4、答:CMPR0,#0语句功能:判断R0是否等于0并影响标志位;MOVEQR1,#0语句功能:当R0等于0时,MOVEQ指令执行,则R1等于0;MOVGTR1,#1语句功能:当R0等于正数时,MOVGT指令执行,则R1等于1。此程序段所实现的操作是:判别R0中的值是正数还是0。5、答:(1)MVNR0,#0(2)MOVR0,#0SUBR0,R0,#1(3)MOVR0,#0xFFFFFFFF6、答:(1)MOVR0,0x10(2)MOVR0,R1,ASR#4(3)ADDR1,R2,R2LSL#1(4)RSBR0,R0,#0 1、答:/*************************************************************寄存器使用说明:*R0:队列指针*R1:加载队列中的数据*R4:队列数据的累加结果*************************************************************/.globalstart.textstart:LDRR0,=DataZone@初始化队列起始地址;MOVR4,#0@结果寄存器初始化为0;AddNum:LDRBR1,[R0],#1@加载队列中的数据到R1寄存器;CMPR1,#0@判断R1的值是否为0;BLXstop@如果R1的值小于或等于0则停止累加;ADDR4,R4,R1@累加求和;BAddNum@继续循环;stop:BstopDataZone:.space10,0x10@在存储单元中申请10个字节的连续空间并用0x10填充;.zero5@在存储单元中申请5个字节的连续空间并用0填充;.end2、答:(1)MOVEQR0,R1(2)LDREQR0,[R1,R2](3)LDRR0,[R1,#-4](4)LDRR0,[R1,R6]!3、答:(1)将存储器地址为R3-4的字数据读入R2,并将地址R3-4写入到R3;(2)将存储器地址为R0的字数据读入R0,并将地址R0+R2写入到R0;(3)将存储器地址为R3+R2*4的字数据读入R1,并将地址R3+R2*4写入R3;(4)将存储器地址为R2-2的字节数据读入R0的低8位,将R0的高24位用符号位扩展,并将地址R2-2写入R2;(5)将R1的低8位存入存储器地址为R2+0xA0的字节中;(6)将内存单元R0所指向的地址单元以字为单位后增的方式读取到R1,R2,R8中,低地址编号的字数据内存单元对应低编号的寄存器;(7)将R1-R5,R10,R11以先减的方式存储到以R0为起始地址的递减内存中,R0最终指向存放R11的地址单元。4、答:ARM指令支持原子操作,主要是用来对信号量的操作,因为信号量操作的要求是做原子操作,即在一条指令中完成信号量的读取和修改操作。SWP数据交换指令就能完成此功能,能在一条指令中实现存储器和寄存器之间交换数据。5、答:在进入IRQ中断处理程序时,首先计算返回地址,并保存相关的寄存器:SUBR14,R14,#4STMFDSP!,{R0-R3,R12,LR}如果IRQ中断处理程序返回到被中断的进程则执行下面的指令: LDMFDSP!,{R0-R3,R12,PC}∧该指令从数据栈中恢复寄存器R0-R3和R12的值,将返回地址返回到PC中,并将SPSR_irq值复制到CPSR中。1、答:.equUser_Mode,0x10.equMode_Mask,0x1F.equNOINT,0XC0MRSR0,CPSR@读取CPSRBICR0,R0,#Mode_MaskORRR1,R0,User_Mode|NOINT@修改MSRCPSR_cxsf,R1@写回CPSR,进入用户模式第一章Thumb指令思考与练习题答案:1.答:优势:Thumb指令集具有较高的代码密度,较低的存储器功耗。2.答:Thumb指令可以分为:数据处理指令、存储器操作指令、分支指令和软中断指令。Thumb指令有条件执行指令,它是条件分支指令B{cond}label。3.答:4.答:方法一:MOVR1,#0xAMULR0,R1方法二:'