ARM习题及答案.docx

上传人:b****2 文档编号:238586 上传时间:2023-04-28 格式:DOCX 页数:11 大小:18.38KB
下载 相关 举报
ARM习题及答案.docx_第1页
第1页 / 共11页
ARM习题及答案.docx_第2页
第2页 / 共11页
ARM习题及答案.docx_第3页
第3页 / 共11页
ARM习题及答案.docx_第4页
第4页 / 共11页
ARM习题及答案.docx_第5页
第5页 / 共11页
ARM习题及答案.docx_第6页
第6页 / 共11页
ARM习题及答案.docx_第7页
第7页 / 共11页
ARM习题及答案.docx_第8页
第8页 / 共11页
ARM习题及答案.docx_第9页
第9页 / 共11页
ARM习题及答案.docx_第10页
第10页 / 共11页
ARM习题及答案.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ARM习题及答案.docx

《ARM习题及答案.docx》由会员分享,可在线阅读,更多相关《ARM习题及答案.docx(11页珍藏版)》请在冰点文库上搜索。

ARM习题及答案.docx

ARM习题及答案

ARM习题

什么是嵌入式系统

答:

嵌入式系统是以应用为中心,以计算机技术为基础,软/硬件可裁减,功能。

可靠性,成本,体积,功耗要求严格的专用计算机系统。

与通用计算机相比,嵌入式系统有哪些特点

答:

(1).嵌入式系统通常是面向特定应用的;

(2).嵌入式系统是将计算机技术,半导体技术和电子技术与各行各业的具体应用相结合的后的产物,是一门综合技术学科;

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

(4).为了提高执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存储于磁盘等载体中;

(5).嵌入式系统本身不具有自主开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。

ARM处理器有几种寻址方式,说明各种寻址的方式。

答:

立即寻址:

操作数直接放在指令中。

例如:

ADDR0,R0,#0x3f;R0←R0+0x3f

寄存器寻址:

操作数放在寄存器中。

例如:

ADDR0,R1,R2;R0←R1+R2

寄存器间接寻址:

操作数在内存,以寄存器中的值作为操作数的地址。

例如:

LDRR0,[R1];R0←[R1]

基址加偏移量寻址(基址变址寻址):

基址寄存器的内容与指令中的偏移量相加形成操作数的有效地址例如:

LDRR0,[R1,#4];R0←[R1+4]

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

多寄存器寻址:

一条指令可以完成多个寄存器值的传送。

例如:

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

堆栈寻址:

堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。

"

例如:

STMFDR13!

,{R0,R4-R12,LR}

LDMFDR13!

,{R0,R4-R12,PC}

举例介绍嵌入式处理器有哪几类

答:

1.嵌入式微处理器(EmbeddedMicroprocessorUnit,EMPU);

2.嵌入式微控制器;(EmbeddedMicrocontrollerUnit,EMCU)

3.嵌入式DSP处理器(EmbeddedDigitalSignalProcessor,EDSP);

4.嵌入式片上系统(EmbeddedSystemonChip,EsoC);

从硬件系统来看,嵌入式系统由哪几个部分组成画出简图。

编写1+2+3+***+100的汇编程序。

AREAEXAMPLE1,CODE,READONLY;定义一个代码段,名称为EXAMPLE1

[

ENTRY;入口

MOVR0,#0;给R0赋值为0

MOVR1,#0;用R1来存放1~100的总和,初始化为0

STARTADDR0,R0,#1;用来判断终止的,每次加1

ADDR1,R1,R0;从1加到100

CMPR0,#100;执行R0-100的操作,但不保存,只影响CPSR的值

BLTSTART;带符号数小于时跳转到START处执行

STOPBSTOP;死循环

END

如何实现128位数的减法,请举例说明。

AREAEXAMPLE2,CODE,READONLY

ENTRY

START

SUBSR5,R5,R9

SBCSR4,R4,R8

SBCSR3,R3,R7

SBCSR2,R2,R6

STOP

BSTOP

END

?

将存储器中起始地址地址0X10处的4个字数据移动到地址0X20处。

AREAEXAMPLE2,CODE,READONLY

ENTRY

LDRR0,=0X10;把地址0X10赋给R0

LDRR5,=0X20;把地址0X20赋给R5

START

LDMIAR0,{R1-R4};把R0为首地址的内存单元中的值依次赋给,

;R1到R4,每次赋完一次值,R0自动加1

  STMIAR5,{R1-R4};把R1到R4的值依次赋给以R5为首地址的内存单元中,R5每次自动加1

STOP

  BSTOP;死循环

END

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

AREAEXAMPLE2,CODE,READONLY

ENTRY

START

MOVR0,#0X1F;给R0赋值,2进制为11111

MSRCPSR_c,R0;把CPSR的条件位置1

STOP

BSTOP;死循环

?

END

用跳转指令实现两段程序间的来回切换。

AREAEXAMPLE5,CODE,READONLY

ENTRY

BLX;跳到a对R0,R1,赋值

START

CMPR0,R1;比较R0,R1的值

BNEY;不等跳转到b

BEQSTOP;相等时跳转到STOP

X

@

MOVR0,#3;对R0,R1赋值

MOVR1,#2

MOVR15,R14;返回

Y

ADDR1,R1,#1;R1自加1

BSTART;跳转到START

STOP

BSTOP;死循环

END

ARM调用Thumb子程序例子

AREAThumbSub,CODE,READONLY;Namethisblockofcode

ENTRY;Markfirstinstructiontoexecute

CODE32;SubsequentinstructionsareARM

header

ADRr0,start+1;ProcessorstartsinARMstate,

BXr0;sosmallARMcodeheaderused

;tocallThumbmainprogram.

CODE16;SubsequentinstructionsareThumb.

start

MOVr0,#10;Setupparameters

MOVr1,#3

BLdoadd;Callsubroutine

stop

MOVr0,#0x18;angel_SWIreason_ReportException

LDRr1,=0x20026;ADP_Stopped_ApplicationExit

SWI0xAB;ThumbsemihostingSWI

doadd

ADDr0,r0,r1;Subroutinecode

MOVpc,lr;Returnfromsubroutine.

END;Markendoffile

]

字符串拷贝子程序,将r1指向的字符串拷贝到r0指向的地方,字符串以0作结束标志

AREASCopy,CODE,READONLY

EXPORTstrcopy

strcopy

;r0pointstodestinationstring

;r1pointstosourcestring

LDRBr2,[r1],#1;loadbyteandupdateaddress

STRBr2,[r0],#1;storebyteandupdateaddress;

CMPr2,#0;checkforzeroterminator

BNEstrcopy;keepgoingifnot

MOVpc,lr;Return

END

、求两个数的最大值,并将最大值放R0寄存器

AREAMAX,CODE,READONLY

ENTRY

START

MOVR1,#0x16

M0VR2,#0x17

CMPR1,R2

MOVMIR0,R2

MOVPLR0,R1

STOP

BSTOP

END

、循环实现数的递减,即每次减1。

最终结果为0时退出循环。

AREAMAX,CODE,READONLY

ENTRY

START

MOVR0,#10

LOOP

SUBSR0,R0,#1

BNELOOP

STOP

BSTOP

END

、改下列C程序段代码为ARM汇编程序段代码。

voidgcd(inta,intb

{

while(a!

=b

if(a>b

]

a=a-b;

else

b=b-a;

}

AREAMAX,CODE,READONLY

ENTRY

gcd

CMPR0,R1

BEQSTOP

BLTLess

SUBR0,R0,R1

BSTOP

Less

SUBR1,R1,R0

STOP

BSTOP

End

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

答:

在ARM汇编语言程序中有些特殊助记符,这些助记符与一般指令的助记符的不同之处在于没有相对应的操作码或者机器码,通常称这些特殊指令助记符卫伪指令,他们多完成的操作成为伪操作;

在ARM汇编中,有如下几种伪指令:

(1符号定义伪指令;

(2数据定义伪指令;

(3汇编控制伪指令;

(4信息报告伪指令;

(5宏指令及其他伪指令。

如何定义寄存器列表,试举一个使用寄存器列表的例子,要求实现4个字的内存复制。

答:

AREAEXAMPLE1,CODE,READONLY

ENTRY

LDRR0,=0XFF;把地址0XFF赋给R0

{

LDRR5,=0X0F;把地址0X0F赋给R5

START

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

LDMIAR0,PBLOCK;把R0为首地址的内存4个字单元装载至R1到R4中

STMIAR5,PBLOCK;把R1到R4的值依次存至R5为首地址的内存字单元

STOPBSTOP;死循环

END

如何定义一个宏,宏与子程序的区别是什么

答:

宏的格式为:

MARCO和MEND

[$标号]宏名[$参数1,$参数2…..]

指令序列

MEND

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

宏指令可以重复使用,这一点的使用方式与子程序有些相似,子程序可以节省存储空间,提供模块化的程序设计。

但使用子程序机构时需要保存/恢复现场,从而增加了系统的开销,因此,在代码传递的参数较多并且比较短时,可以使用宏代替子程序,宏在被调用的地方展开。

ARM汇编中如何定义一个段,段有几种属性

答:

AREA用于定义一个代码段,数据段,或者特定属性的段。

段的几种属性如下:

READONLY表示只读属性;

READWRITE表示本段可读写;

?

CODE定义代码段;

DATA定义数据段;

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

COMMON:

定义一个通用段,这个段不包含用户代码和数据。

在一个汇编源文件中如何包含另一个文件中的内容

答:

通常可以使用GET/INCLUDE指令,在某源文件中定义一些宏指令,用MAP和FIELD定义结构化数据结构类型,用EQU定义常量的符号名称,然后用GET/INCLUDE将这个源文件包含到其他源文件中。

分别编写一个函数和一个宏,实现字符串的复制。

MACRO

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

$P1DCB"HELLO";分配一个字节的空间,并初始化为一个字符串

$P2DCB"WORLD!

";同上

LDRR0,=$P1;把P1的首地址加载到R0

LDRR6,=$P2;把P2的首地址加载到R1

LDRIAR0,[R1-R5];

STRIAR6,[R1-R5];

MEND

AREACOPY,CODE,READONLY

ENTRY

START

COPYSTR1,STR2;调用宏

BSTART;死循环

END

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

答:

高速缓存的命中率随缓冲区的增加而提高。

高速缓存的命中减少了对磁盘的访问,并因此提高了系统的整体性能。

如果高速缓存的命中率降低,高速缓存对CPU的有效访问就会减弱,系统运行就会变慢,程序的运行就会变慢。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2