zoukankan      html  css  js  c++  java
  • 【嵌入式】嵌入式系统开发与应用第二版课后答案第三章(田泽)

    自整理,复习用,考试只考前三章——海底淤泥

    一、简答题

    1ARM寻址方式有几种?举例说明ARM如何进行不同的寻址方式

      6种

      1.立即寻址:    ADD  R0,R0,#1

      2.寄存器寻址:   ADD  R0,R1,R2,#2

      3.寄存器间接寻址: LDR  R0,[R1]

      4.基址加偏址寻址:    1.前:LDR  R0,[R1,#4]  2自动:LDR  R0,[R1,#4]!  3后:LDR  R0,[R1],#4

      5堆栈寻址:1.STMFD  SP!{R1-R7,LR}  2.LDMFD  SP!{R1-R7,LR}

      6块拷贝寻址:1.LDMIA  R0!,{R2-R9}  2.STMIA  R1,{R2-R9}

      7相对寻址:MOV  PC,R14

    2简述ARM指令分类以及指令格式形式

      1.数据处理指令  <op>{<cond>}{S}Rd,Rn,#<32位操作数>  <op>{<cond>}{S}Rd,Rn,Rm,{<shift>}

      2.Load/Store指令  LDR|STR{<cond>}{B}{T}Rd,[Rn,<offset>]{!}  LDR|STR{<cond>}{B}{T}Rd,[Rn]<offset>  

                LDR|STR{<cond>}{B}{T}Rd,LABEL

                LDM|STM<cond>}<add mode> Rn{!},<registers>  SWP{<cond>}{B}Rd,Rm,[Rn]

      3.状态寄存器与通用寄存器之间的传送指令  MRS{<cond>}Rd,CPSR|SPSR

      4转移指令  B{L}{<cond>} <target address>

      5异常中断产生指令  SWI{<cond>} <24位立即数>  BKPT {immed_16}  CLZ{cond} Rd,Rm

      6协处理器指令 CDP{<cond>} <CP#>,<Copl>,CRd,CRn,CRm{,<Cop2>}

    3假设SP的内容为0x8000,寄存器R1、R2的内容分别为0x01与0x10,存储器内容为空,执行下述指令后,说明PC如何变化。存储器以及寄存器内容如何变化。

      STMFD  sp!,{R1,R2}  0x8000<-0x10  0x7996<-0x10  sp=0x7996

      LDMFD  sp!,{R1,R2}  r1<-[0x8000]  r2<-[0x7996]  sp=0x7996

    4试比较ARM指令集与Thumb指令集的异同,并简述各自的特点

      ARM指令是31位二进制编码

      Thumb指令是16位二进制编码

      支持Thumb指令的ARM微处理器都可以执行ARM指令

    5简述Load指令与Store指令的功能

      Load  写

      Store  读

    6ARM处理器如何进入和退出Thumb指令模式

      进入:1.BX R0  R0最低位置1  2.利用异常进入

      退出:2.BX R0  R0最低位置0  2.利用异常退出

    7简述ARM协处理器指令的分类

      1.用于ARM处理器的初始化ARM协处理器的数据操作指令

      2.用于ARM处理器的寄存器和ARM协处理器之间的数据传送指令

      3.用于ARM协处理器的寄存器和内存单元之间的传送数据

    8简述ARM汇编语言中的伪操作、宏指令和伪指令的含义,伪操作和伪指令都分为哪几类?

      伪操作:特殊指令助记符号

      宏指令:一段独立的程序代码,可以插入源程序

      伪指令:特殊指令助记符号

      伪操作:

        1符号定义  2数据定义  3汇编控制

        4框架描述  5信息报告  6其他

      伪指令:

        ADR、ADRL、LDR、NOP

    9如何在汇编语言中定义和使用宏

      使用#define

    10ARM指令与Thumb指令有何异同

      ARM指令是32位二进制编码

      Thumb指令是16位二进制编码

    11简述IRQ和FIQ异常中断处理程序中所使用的的__irq的作用

      在程序内部增加中断保护的代码

    12简述#include<头文件.h>与#inlcude“头文件.h”的区别

      <>标准头文件

      “”自定义头文件

     13简述局部变量和全局变量的区别

      局部变量作用域在局部范围

      全局变量作用域在全局范围

    14函数的存储类说明符有几种?各自的作用是什么?

      static:表示本文件定义前和非本文件定义的文件中,该函数不能被调用

      extern:表示该函数是全程序可见的

    15变量的存储类型是有几种?各自的作用是什么?

      auto——自带存储类型——局部

      register——寄存器存储类型——寄存器提高速度

      entern——外部存储类型——全局

      static——静态存储类型

    16变量在内存中存储方式有几种?分别是什么?

      字符,整形,浮点数

    17函数的参数传递方式有几种?分别是什么?

      1.参数个数固定的子程序传递参数——使用R0,R1,R2,R3

      2.参数个数可变的子程序传递参数——使用R0,R1,R2,R3和数据栈,多于4个之后的参数倒序入栈

    18简述字符串与字符数组的存储区别

      字符串在最后一位有‘’

    19修饰符const、volatile、near、far的作用是什么?用在什么地方?

      const——常量修饰符

      volatile——易失性修饰符

      near,far——远近修饰符

    20定义指针变量是如果不进行初始化,可能出现什么问题?

      出现野指针异常

    21简述const int *  和 int * const

      const int *   说明指针指向对象是常量,是常量指针

       int * const  说明指针本身是常量,是指针常量
      const int * const  常量指针常量指向常量

    22 char a,int b,shot c ,int d,与char a, shot c,int b,int d各自占用的存储空间有何区别?

        char a,int b,shot c ,int d  占4个字

        char a, shot c,int b,int d  占3个字

    23ATPCS包括哪些规则?分别是什么?

      1.寄存器使用规则

      2.数据栈使用规则

    24如何使用内嵌汇编编程?使用内嵌汇编时需要注意什么?

    __asm("指令");
    __asm{
      "指令"
      "指令"
      ...
    }

      注意__asm是两个_

    25如何在ADS开发环境下使用malloc和free?使用 时需要注意什么?

      内存单元分配通过C语言完成

    26简述结构类型与联合类型的异同。

      结构:每个变量都有独立空间

      联合:所有变量共享一份空间

      都可以储存不同类型变量

    27结构类型中存取成员有几种方法?简述他们的区别。

      结构名.变量名

      结构指针名->变量名

    28ARM嵌入式软件设计中,如何在汇编程序中实现子程序调用?

      使用IMPORT来声明C程序   import f

      通过BL来调用子程序      bl  f

    二、程序设计题

    1完成下面操作后,R0的内容是什么?

      mov  R1,#5

      add  R0,R1,LSL #3

    2请将下面C语言代码转换成汇编语言。

      if(a==0||b==1)

      c=d+e

    3编写一段程序实现在C语言中调用汇编语言程序,实现将1KB大小的内存块以字的形式复制到另一内存地址

    4编写一段汇编语言程序,用内嵌汇编指令实现中断的使能和禁止

    5编写一段汇编语言程序,实现从ARM到Thumb的转换

    6编写一段汇编语言程序,实现从Thumb到ARM的转换

    7编写一段程序,实现汇编语言程序中访问C语言程序中的变量

    8编写一段程序,利用跳转表实现程序跳转

    9编写以字节为单位的的字符串拷贝子程序,要求从存储器某处拷贝到另一处。源字符串的起始地址放入R1,长度(以字节为单位)放入R2,目的字符串的起始地址放入R3

    10编写一段C语言与汇编语言的混合编程代码,在C语言中调用汇编语言代码,完成字符串str1和str2内容的互换。

  • 相关阅读:
    GATK-BWA-MEM handle GRCh38 alternate contig mappings
    GATK使用说明-GRCh38(Genome Reference Consortium)(二)
    GATK使用说明(一)
    [python] 线程池
    [python] 线程锁
    [python] 线程简介
    [linux] 更改目录显示颜色
    限制登录次数
    项目经验总结-twice
    Java泛型底层源码解析--ConcurrentHashMap(JDK1.6/JDK1.7/JDK1.8)
  • 原文地址:https://www.cnblogs.com/LPworld/p/13192623.html
Copyright © 2011-2022 走看看