1、嵌入式 ARM 基础习题第一章1.1 什么是嵌入式操作系统?答:嵌入式系统是以应用为中心,以计算机技术为基础,软/硬件可裁减,功能。可靠性,成本,体积,功耗要求严格的专用计算机系统。1.2 与通用计算机相比,嵌入式系统有哪些特点?答:(1) 嵌入式系统通常是面向特定应用的;(2) 嵌入式系统是将计算机技术,半导体技术和电子技术与各行各业的具体应用相结合的后的产物,是一门综合技术学科;(3).嵌入式系统和具体应用有机的结合在一起,它的升级换代也是和具体产品同步进行的,因此嵌入式产品一旦进入市场,就有较长的生命周期;(4).为了提高执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机
2、本身中,而不是存储于磁盘等载体中;(5).嵌入式系统本身不具有自主开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。1.3 根据嵌入式的复杂程度,嵌入式系统可分为哪 4 类?答:1.单个微处理器;2.嵌入式处理器可扩展系统;3.复杂的嵌入式系统;4.在制造或过程控制中使用的计算机系统;1.4 举例介绍嵌入式处理器有哪几类?答:1.嵌入式微处理器(Embedded Microprocessor Unit,EMPU) ;2.嵌入式微控制器;(Embedded Microcontroller Unit,EMCU)3.嵌入式 DSP 处理器(Emb
3、edded Digital Signal Processor,EDSP) ;4.嵌入式片上系统(Embedded System on Chip,EsoC) ;1.5 从硬件系统来看,嵌入式系统由哪几个部分组成?画出简图。 电源模块微处理器时钟 复位外设keyboardother1.6.嵌入式系统中,非数值数据编码主要包括哪几种?答:1.字符表示;2.汉字编码;3.语音编码;1.7 若在嵌入式系统采用 CRC 码进行信息传输,接收端接收到的码字为 101011,已知生成多项式 g(x)=1011,问收到的码字是否正确?出错的是哪一位?解:收到的码字不正确;出错的是第 4 位。方法:(将收到的码字
4、与生成多项式相除,所得结果为 0011。对“ CRC 出错模式(G(x)=1011) ”可查找出出错位为第四位) 。第三章3.1 编写 1+2+3+*+100 的汇编程序。AREA EXAMPLE1, CODE,READONLY ;定义一个代码段,名称为;EXAMPLE1ENTRY ;入口MOV R0,#0 ;给 R0 赋值为 0MOV R1,#0 ;用 R1 来存放 1100 的总和,初;始化为 0START ADD R0,R0,#1 ;用来判断终止的,每次加 1ADD R1,R1,R0 ;从 1 加到 100 CMP R0,#100 ;执行 R0-100 的操作,但不保存,;只影响 CPS
5、R 的值BLT START ;带符号数小于时跳转到 START 处 ;执行STOP B STOP ;死循环END 3.2 如何实现 128 位数的减法,请举例说明。AREA EXAMPLE2,CODE,READONLY ENTRYSTARTSUBS R5,R5,R9SBCS R4,R4,R8SBCS R3,R3,R7SBCS R2,R2,R6STOPB STOP END3.3 将存储器中起始地址 M1 处的 4 个字数据移动到 M2 处。AREA EXAMPLE2,CODE,READONLY ENTRYLDR R0 ,=0X10 ;把地址 0X10 赋给 R0LDR R5,=0X20 ;把地址
6、 0X20 赋给 R5STARTSTMIA R0,R1-R4 ;把 R1 到 R2 的值依次赋给 R0 为首地址;的内存单元中,每次赋完一次值,R0 自;动加 1LDMIA R5,R1-R4 ;把 R1 到 R4 的值依次赋给以 R5 为首地;址的内存单元中,R5 每次自动加 1STOPB STOP ;死循环END3.4 参考 CPSR 寄存器中各标志位的含义,使处理器处于系统模式。AREA EXAMPLE2,CODE,READONLY ENTRYSTARTMOV R0,#0X1F ;给 R0 赋值, 2 进制为 11111MSR CPSR_c,R0 ;把 CPSR 的条件位置 1STOPB
7、STOP ;死循环END3.5 用跳转指令实现两段程序间的来回切换。AREA EXAMPLE5 ,CODE, READONLYENTRYBL a ;跳到 a 对 R0,R1,赋值 START CMP R0,R1 ;比较 R0,R1 的值BNE b ;不等是跳转到 b BEQ STOP ;相等时跳转到 STOPaMOV R0,#3 ;对 R0,R1 赋值MOV R1,#2MOV R15,R14 ;返回bADD R1,R1,#1 ;R1 自加 1B START ;跳转到 STARTSTOP B STOP ;死循环END第四章4.1 什么是伪指令和伪操作?在 ARM 汇编中有哪几种伪 指令?答:在
8、ARM 汇编语言程序中有些特殊助记符,这些助记符与一般指令的助记符的不同之处在于没有相对应的操作码或者机器码,通常称这些特殊指令助记符卫伪指令,他们多完成的操作成为伪操作;在 ARM 汇编中,有如下几种伪指令:(1)符号定义伪指令;(2)数据定义伪指令;(3)汇编控制伪指令;(4)信息报告伪指令;(5)宏指令及其他伪指令。4.2 如何定义寄存器列表,试举一个使用寄存器列表的例子,要求实现 4 个字的内存复制。答: AREA EXAMPLE1,CODE,READONLYENTRYLDR R0,=0XFF ;把地址 0XFF 赋给 R0LDR R5,=0X0F ;把地址 0X0F 赋给 R5STA
9、RTPBLOCK RLIST R1-R4 ;把 R1-R4 定义为 PBLOCKSTMIA R0,PBLOCK ;把 R1 到 R2 的值依次赋给;R0 为首地址;的内存单元中,每次赋完一次 ;值自动加 1LDMIA R5,PBLOCK ;把 R1 到 R4 的值依次赋给以 R5;为首地址的内存单元中,R5 每;次自动加 1STOPB STOP ;死循环END3.4 参考 CPSR 寄存器中各标志位的含义,使处理器处于系统模式。AREA EXAMPLE2,CODE,READONLY ENTRYSTARTMOV R0,#0x1FMSR CPSR_c,R0STOPB STOPEND4.3 如何定义
10、一个宏,宏与子程序的区别是什么?答:宏的格式为:MARCO 和 MEND$标号 宏名 参数,参数 2.指令序列MENDMARCO 表示一个宏定义的开始,MEND 表示一个宏的结束,MARCO 和 MEND 前呼后应可以将一段代码定义为一个整体,又称宏,然后在程序中就可以在程序中通过宏的名称及参数调用该段代码。宏指令可以重复使用,这一点的使用方式与子程序有些相似,子程序可以节省存储空间,提供模块化的程序设计。但使用子程序机构时需要保存/恢复现场,从而增加了系统的开销,因此,在代码传递的参数较多并且比较短时,可以使用宏代替子程序,宏在被调用的地方展开。4.4ARM 汇编中如何定义一个段,段有几种属
11、性?答:AREA 用于定义一个代码段,数据段,或者特定属性的段。段的几种属性如下:READONLY 表示只读属性;READWRITE 表示本段可读写;CODE 定义代码段;DATA 定义数据段;ALIGN=表达式的对齐方式为 2 的表达式次方;COMMON:定义一个通用段,这个段不包含用户代码和数据。4.5 在一个汇编源文件中如何包含另一个文件中的内容?答:通常可以使用 GET/INCLUDE 指令,在某源文件中定义一些宏指令,用 MAP 和FIELD 定义结构化数据结构类型,用 EQU 定义常量的符号名称,然后用 GET/INCLUDE将这个源文件包含到其他源文件中。4.6 分别编写一个函数
12、和一个宏,实现字符串的复制。MACROCOPY $P1,$P2 ;定义一个宏 $P1 DCB “HELLO“ ;分配一个字节的空间,并初始化为一个 ;字符串$P2 DCB “WORLD!“ ;同上LDR R0,=$P1 ;把 P1 的首地址加载到 R0LDR R6,=$P2 ;把 P2 的首地址加载到 R1LDRIA R0,R1-R5 ;把 R0 每载一次,自加一次 ;实现把 P1 加载到 R0 STRIA R6,R1-R5 ;同理(上)MENDAREA COPY,CODE,READONLYENTRYSTART MACRO STR1,STR2 ;调用宏B START ;死循环END4.7 解释归纳变量,同族的归纳变量及基本的归纳变量。48 试将下面这段 C 代码翻译为等效的汇编代码:int Factorial(int) /计算 i 阶乘 If(i=0) Return 1;Return i*Factorial(i-1);解:该段 C 代码等效汇编为:i EQU R1AREA EXAMPLE,CODE,READONLYENTRYBL DATA ;跳到 DATA 取值START i=1 ;如果 i=1MOV R3,#1 ;R3 用来存放阶乘的值,值为 1B EXIT ;跳到死循环