您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页ARM习题及答案.

ARM习题及答案.

来源:化拓教育网
ARM习题及答案.

ARM习题

1.1 什么是嵌⼊式系统?

答:嵌⼊式系统是以应⽤为中⼼,以计算机技术为基础,软/硬件可裁减,功能。可靠性,成本,体积,功耗要求严格的专⽤计算机系统。

1.2 与通⽤计算机相⽐,嵌⼊式系统有哪些特点?答:(1).嵌⼊式系统通常是⾯向特定应⽤的;

(2).嵌⼊式系统是将计算机技术,半导体技术和电⼦技术与各⾏各业的具体应⽤相结合的后的产物,是⼀门综合技术学科;

(3).嵌⼊式系统和具体应⽤有机的结合在⼀起,它的升级换代也是和具体产品同步进⾏的,因此嵌⼊式产品⼀旦进⼊市场,就有较长的⽣命周期;

(4).为了提⾼执⾏速度和可靠性,嵌⼊式系统中的软件⼀般都固化在存储器芯⽚或单⽚机本⾝中,⽽不是存储于磁盘等载体中;

(5).嵌⼊式系统本⾝不具有⾃主开发能⼒,即使设计完成以后⽤户通常也不能对其中的程序功能进⾏修改,必须有⼀套开发⼯具和环境才能进⾏开发。

1.3 ARM处理器有⼏种寻址⽅式,说明各种寻址的⽅式。答:

⽴即寻址:操作数直接放在指令中。例如:ADD R0,R0,#0x3f ;R0←R0+0x3f寄存器寻址:操作数放在寄存器中。例如:ADD R0,R1,R2 ;R0←R1+R2寄存器间接寻址:操作数在内存,以寄存器中的值作为操作数的地址。例如:LDR R0,[R1] ;R0←[R1]

基址加偏移量寻址(基址变址寻址):基址寄存器的内容与指令中的偏移量相加形成操作数的有效地址例如:LDR R0,[R1,#4] ;R0←[R1+4]

LDR R0,[R1,R2] ;R0←[R1+R2]

多寄存器寻址:⼀条指令可以完成多个寄存器值的传送。例如:

LDMIA R0,{R1,R2,R3,R4} ;R1←[R0];R2←[R0+4];R3←[R0+8];R4←[R0+12]

堆栈寻址:堆栈是⼀种数据结构,按先进后出(First In Last Out,FILO)的⽅式⼯作,使⽤⼀个称作堆栈指针的专⽤寄存器指⽰当前的操作位置,堆栈指针总是指向栈顶。例如:STMFD R13!,{R0,R4-R12,LR}LDMFD R13!,{R0,R4-R12,PC}1.4举例介绍嵌⼊式处理器有哪⼏类?

答:1.嵌⼊式微处理器(Embedded Microprocessor Unit,EMPU);2.嵌⼊式微控制器;(Embedded Microcontroller Unit,EMCU)3.嵌⼊式DSP处理器(Embedded Digital Signal Processor,EDSP);4.嵌⼊式⽚上系统(Embedded System on Chip,EsoC);1.5从硬件系统来看,嵌⼊式系统由哪⼏个部分组成?画出简图。3.1编写1+2+3+***+100的汇编程序。

AREA EXAMPLE1, CODE,READONLY ;定义⼀个代码段,名称为EXAMPLE1 ENTRY ;⼊⼝

MOV R0,#0 ;给R0赋值为0

MOV R1,#0 ;⽤R1来存放1~100的总和,初始化为0START ADD R0,R0,#1 ;⽤来判断终⽌的,每次加1ADD R1,R1,R0 ;从1加到100

CMP R0,#100 ;执⾏R0-100的操作,但不保存,只影响CPSR的值BLT START ;带符号数⼩于时跳转到START处执⾏STOP B STOP ;死循环END

3.2如何实现128位数的减法,请举例说明。AREA EXAMPLE2,CODE,READONLYENTRYSTART

SUBS R5,R5,R9SBCS R4,R4,R8SBCS R3,R3,R7SBCS R2,R2,R6STOPB STOPEND

3.3将存储器中起始地址地址0X10处的4个字数据移动到地址0X20处。AREA EXAMPLE2,CODE,READONLYENTRY

LDR R0,=0X10 ;把地址0X10赋给R0LDR R5,=0X20 ;把地址0X20赋给R5START

LDMIA R0,{R1-R4} ;把R0为⾸地址的内存单元中的值依次赋给,; R1到R4,每次赋完⼀次值,R0⾃动加1

STMIA R5,{R1-R4} ;把R1到R4的值依次赋给以R5为⾸地址的内存单元中,R5每次⾃动加1 STOPB STOP ;死循环END

3.4参考CPSR寄存器中各标志位的含义,使处理器处于系统模式。AREA EXAMPLE2,CODE,READONLYENTRYSTART

MOV R0,#0X1F ;给R0赋值,2进制为11111MSR CPSR_c,R0 ;把CPSR的条件位置1STOP

B STOP ;死循环END

3.5⽤跳转指令实现两段程序间的来回切换。AREA EXAMPLE5 ,CODE, READONLYENTRY

BL X ;跳到a对R0,R1,赋值START

CMP R0,R1 ;⽐较R0,R1的值BNE Y ;不等跳转到b

BEQ STOP ;相等时跳转到STOPX

MOV R0,#3 ;对R0,R1赋值MOV R1,#2MOV R15,R14 ;返回Y

ADD R1,R1,#1 ;R1⾃加1B START ;跳转到STARTSTOP

B STOP ;死循环END

3.5 ARM调⽤ Thumb⼦程序例⼦

AREA ThumbSub, CODE, READONLY ; Name this block of code ENTRY ; Mark first instruction to executeCODE32 ; Subsequent instructions are ARMheader

ADR r0, start + 1 ; Processor starts in ARM state,BX r0 ; so small ARM code header used; to call Thumb main program.

CODE16 ; Subsequent instructions are Thumb.start

MOV r0, #10 ; Set up parametersMOV r1, #3

BL doadd ; Call subroutine

stop

MOV r0, #0x18 ; angel_SWIreason_ReportExceptionLDR r1, =0x20026 ; ADP_Stopped_ApplicationExitSWI 0xAB ; Thumb semihosting SWIdoadd

ADD r0, r0, r1 ; Subroutine codeMOV pc, lr ; Return from subroutine.END ; Mark end of file

3.6字符串拷贝⼦程序,将r1指向的字符串拷贝到r0指向的地⽅,字符串以0作结束标志AREA SCopy, CODE, READONLYEXPORT strcopystrcopy

; r0 points to destination string; r1 points to source string

LDRB r2, [r1],#1 ; load byte and update addressSTRB r2, [r0],#1 ; store byte and update address;CMP r2, #0 ; check for zero terminatorBNE strcopy ; keep going if notMOV pc,lr ; ReturnEND

3.7、求两个数的最⼤值,并将最⼤值放R0寄存器AREA MAX,CODE,READONLYENTRYSTARTMOV R1,#0x16M0V R2,#0x17CMP R1,R2MOVMI R0,R2STOPB STOPEND

3.8、循环实现数的递减,即每次减1。最终结果为0时退出循环。AREA MAX,CODE,READONLYENTRYSTARTMOV R0,#10LOOP

SUBS R0,R0,#1BNE LOOPSTOPB STOPEND

3.9 、改下列C程序段代码为ARM汇编程序段代码。void ( int a, int b{

while(a!=bif (a>ba=a-b;elseb=b-a;}

AREA MAX,CODE,READONLYENTRYBEQ STOPBLT LessSUB R0,R0,R1B STOPLess

SUB R1,R1,R0STOPB STOPEnd

4.1什么是伪指令和伪操作?在ARM汇编中有哪⼏种伪指令?

答:在ARM汇编语⾔程序中有些特殊助记符,这些助记符与⼀般指令的助记符的不同之处在于没有相对应的操作码或者机器码,通常称这些特殊指令助记符卫伪指令,他们多完成的操作成为伪操作;在ARM汇编中,有如下⼏种伪指令:(1符号定义伪指令;(2数据定义伪指令;(3汇编控制伪指令;(4信息报告伪指令;(5宏指令及其他伪指令。

4.2如何定义寄存器列表,试举⼀个使⽤寄存器列表的例⼦,要求实现4个字的内存复制。

答:

AREA EXAMPLE1,CODE,READONLYENTRY

LDR R0,=0XFF ;把地址0XFF赋给R0LDR R5,=0X0F ;把地址0X0F赋给R5START

PBLOCK RLIST {R1-R4} ;把R1-R4定义为PBLOCK

LDMIA R0,PBLOCK ;把R0为⾸地址的内存4个字单元装载⾄R1到R4中STMIA R5,PBLOCK ;把R1到R4的值依次存⾄R5为⾸地址的内存字单元STOP B STOP ;死循环END

4.3如何定义⼀个宏,宏与⼦程序的区别是什么?答:宏的格式为:MARCO和MEND

[$标号] 宏名[$参数1,$参数2…..]指令序列MEND

MARCO表⽰⼀个宏定义的开始,MEND表⽰⼀个宏的结束,MARCO和MEND前呼后应可以将⼀段代码定义为⼀个整体,⼜称宏,然后在程序中就可以在程序中通过宏的名称及参数调⽤该段代码。

宏指令可以重复使⽤,这⼀点的使⽤⽅式与⼦程序有些相似,⼦程序可以节省存储空间,提供模块化的程序设计。但使⽤⼦程序机构时需要保存/恢复现场,从⽽增加了系统的开销,因此,在代码传递的参数较多并且⽐较短时,可以使⽤宏代替⼦程序,宏在被调⽤的地⽅展开。

4.4 ARM汇编中如何定义⼀个段,段有⼏种属性?

答:AREA⽤于定义⼀个代码段,数据段,或者特定属性的段。段的⼏种属性如下:READONLY表⽰只读属性;READWRITE表⽰本段可读写;CODE定义代码段;DATA定义数据段;

ALIGN=表达式的对齐⽅式为2的表达式次⽅;;

COMMON:定义⼀个通⽤段,这个段不包含⽤户代码和数据。4.5 在⼀个汇编源⽂件中如何包含另⼀个⽂件中的内容?

答:通常可以使⽤GET/INCLUDE指令,在某源⽂件中定义⼀些宏指令,⽤MAP和FIELD定义结构化数据结构类型,⽤EQU定义常量的符号名称,然后⽤GET/INCLUDE将这个源⽂件包含到其他源⽂件中。4.6分别编写⼀个函数和⼀个宏,实现字符串的复制。MACRO

COPY $P1,$P2 ;定义⼀个宏

$P1 DCB \"HELLO\" ;分配⼀个字节的空间,并初始化为⼀个字符串$P2 DCB \"WORLD!\" ;同上

LDR R0,=$P1 ;把P1的⾸地址加载到R0LDR R6,=$P2 ;把P2的⾸地址加载到R1LDRIA R0,[R1-R5] ;STRIA R6,[R1-R5] ;MEND

AREA COPY,CODE,READONLYENTRYSTART

COPY STR1,STR2 ;调⽤宏B START ;死循环END

4.9说明在⾼速缓存命中率低时对程序性能的影响。

答:⾼速缓存的命中率随缓冲区的增加⽽提⾼。⾼速缓存的命中减少了对磁盘的访问,并因此提⾼了系统的整体性能。如果⾼速缓存的命中率降低,⾼速缓存对CPU的有效访问就会减弱,系统运⾏就会变慢,程序的运⾏就会变慢。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务