【嵌入式】嵌入式系统开发与应用第二版课后答案第三章(田泽)

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

一、简答题

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简述字符串与字符数组的存储区别

  字符串在最后一位有‘\0’

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内容的互换。

 

posted @ 2020-06-25 19:08  海底淤泥  阅读(2766)  评论(0编辑  收藏  举报