ARM嵌入式系统结构与编程习题答案_第1页
ARM嵌入式系统结构与编程习题答案_第2页
ARM嵌入式系统结构与编程习题答案_第3页
ARM嵌入式系统结构与编程习题答案_第4页
ARM嵌入式系统结构与编程习题答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1章绪论。答:见教材节的嵌入式Linux和嵌入式实时操作内核UC/OS-I。哪些2ARM技术与ARM体系结构章ISARM序执行的模式,大部分任务在这种模式下执行。在用户模式下,如果没器的工作模式,如果有异常发生,处理器会自动切换工作模式器方式又分为向量中断和非向量中断两种。通常的中断处理都在IRQ模式下进行。SVC理器将进入这种进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可4.分析程序状态寄存器(PSR)各位的功能描述,并说明C、Z、N、V在什么情况下进行置位和清零。V—溢出标志位例如:两个正数(最高位为0)相加,运算结果为一个负数(最高位为1),则符号位溢出,相应V=1。对于加法指令(包括比较指令CMN),结果产生进位,则C=1,表示无符号数运算发生上溢出,其他情况下在减法指令中(包括比较指令CMP),结果产生借位,则C=0,表示无符号数运算发生下溢出,其他情况下(2)将CPSR的内容复制到新的异常模式下的SPSR中;(3)根据异常类型将CPSR模式控制位强制设定为发生异常所对应的模式值;(4)强制PC指向相应的异常向量地址。ARM在异常返回时 1)小端存储格式(Little-Endian)在小端存储格式中,对于地址为A的字单元,其中字节单元由低位到高位字节地址顺序为A,A+1,A+2,A+3;AA,A+1;2)大端存储格式(Big-Endian)7.分析带有存储器访问指令(LDR)的流水线运行情况,并用图示说明其流水线的运行机制。LDR单周期指令。这类指令在“执行”阶段后,还要进行“存储器访问”和“寄据的存储器操作(访存),在时钟周期T6要进行寄存器的回写操作,这两步还要占用执行单元,因此ALU果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。4)存储器访问:如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据Cache);如果不是对存储。,完成存储器访问和寄存器写操作,但这时指令MOV中用到的R9正是LDR中需要进行3章ARM指令集寻址方式。(也就是8位常数和4位的移位数)。0x54300x1080x3040x5010xFB100000x3340000x3FC0000x1FE00000x55800000x7F8000x39C0000x1FE80000的答:每个立即数由一个8位的常数进行32位循环右移偶数位得到,其中循环右移的位数由一的<immediate>=immed_进行32位循环右移(2*rotate_4)位符合这一条件的都为合法的立即数。0B0101010000110000不合法B00001000B0100B0001B1000000000000不合法B000000001001(18/2)B00000000B(0000)[4]B(0000)[4]B(0000)[4]B000000001001(18/2)B11110(0000)[4]不合法的答:在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址有三种,具体见教材节;Load/Store指令寻址中,半字、有符号字节寻址有两种,具体见教材节;它们之间的差别:在半字、有符号字节寻址中,没有Addressing_mode中的偏移量通过寄存器移位得到的形式。答:Load/Store指令在实现寄存器组和连续的内存单元中数据传递时,地址的变化方式(addr_mode)有以后增IA(IncrementAfter):每次数据传送后地址加4;IB(IncrementBefore):每次数据传送前地址加4;后减DA(DecrementAfter):每次数据传送后地址减4;DB(DecrementBefore):每次数据传送前地址减4。变化情况,从而得出栈操作指令寻址和块答:(1)四种类型的堆栈工作方式,即:满递增堆栈FA(EmptyAscending):堆栈指针指向最后压入的数据,且由低地址向高地址生成。满递减堆栈FD(FullDescending):堆栈指针指向最后压入的数据,且由高地址向低地址生成。空递增堆栈EA(FullAscending):堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。空递减堆栈ED(EmptyDescending):堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。(2)栈操作指令寻址和块拷贝Load/Store指令之间的对应关系见表3-10。CMPR,#0XabRA答:现对以下三条指令进行编码,其余的参照本章的编码说明。器之间的传送指令2.如何实现两个64位数的加法操作,如何实现两个64位数的减法操作,如何求一个64位数的负数答:(1)见教材例4-4:实现64位数据加法运算:假设R0和R1存放了一个64位数据(作为被加数),低32位数据。运算结果送回到[R1:R0]中(R0中存放低32位)。ADCRRR;高32位相加再加上C标志位(进位值)2)见教材例4-6:中值。运算结果送回到[R1:R0]中(R0中存放低32位)。SUBSR0,R0,R2;低32位相减并影响标志位SBCR1,R1,R3;高32位相减再减去C标志位的反码3)见教材例4-8:个64位数,其中R0中放置32位数值;寄存器R4和R5中放置其负数,其低;0减去低32位并影响标志位;0减去高32位再减去C标志位的反码CMPR,#0MOVEQR1,#0MOVGTR1,#1于0;5.请使用多种方法实现将字数据0xFFFFFFFF送入寄存器R0。6.写一条ARM指令,分别完成下列操作:a)R0=16b)R0=R1/16(带符号的数字)c)R1=R2*3dR0=-R0ADDR1,R0=-RO解答:(参考程序)/*-----------------------------------------------寄存器的使用说明:R0:队列指针R1:加载队列中的数据R4:队列数据的累加结果*-----------------------------------------------*/LDRR0,=DataZone@.globalstartstart:MOVR4,#0@结果寄存器初始化为0addNum:LDRBR1,[R0],#1@加载队列中的数据存入R1中CMPR1,#0@判断R1的值是否为0如果R1的值小于或等于0则停止累BLSstop@加ADDR4,R4,R1@累加求和BaddNum@继续循环.DataZone:.space10,0x10@在存储单元中申请10个字节的连续空间并用0x10填充.zero5@在存储单元中申请5个字节的连续空间并用0填充.endARM指令所实现操作:RAxAMDBRRRRRRRRRRR指向存放R11的地址单元ARM作,因为信号量操作的要求是作原子操作,即在一条指令SUBR14,R14,#4;STMFDR13!,{R0-R3,R12,LR};如果IRQ中断处理程序返回到被中断的进程则执行下面的指令。该指令从数据栈中恢复寄存器R0~R3及R12的值,将返回地址传送到PC中并将SPSR_irq值复制到CPSR中LDMFDR13!,{R0-R3,R12,PC}^12.用ARM汇编语言编写代码,实现将ARM处理器切换到用户模式,并关闭中断。.equUser_Mode,0x10.equMode_Mask0x1F.equNOINT,0xC0MRSR0,CPS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论