ARM3.2嵌入式系统原理第三章习题(2)2012.doc

上传人:b****2 文档编号:1638977 上传时间:2022-10-23 格式:DOC 页数:5 大小:45.50KB
下载 相关 举报
ARM3.2嵌入式系统原理第三章习题(2)2012.doc_第1页
第1页 / 共5页
ARM3.2嵌入式系统原理第三章习题(2)2012.doc_第2页
第2页 / 共5页
ARM3.2嵌入式系统原理第三章习题(2)2012.doc_第3页
第3页 / 共5页
ARM3.2嵌入式系统原理第三章习题(2)2012.doc_第4页
第4页 / 共5页
ARM3.2嵌入式系统原理第三章习题(2)2012.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ARM3.2嵌入式系统原理第三章习题(2)2012.doc

《ARM3.2嵌入式系统原理第三章习题(2)2012.doc》由会员分享,可在线阅读,更多相关《ARM3.2嵌入式系统原理第三章习题(2)2012.doc(5页珍藏版)》请在冰豆网上搜索。

ARM3.2嵌入式系统原理第三章习题(2)2012.doc

嵌入式系统原理

第三章习题答案

(2)2012

1简述什么是ARM汇编语言中的伪操作、宏指令和伪指令?

伪操作是ARM汇编语言程序里的一些特殊指令助记符,主要作用是为完成汇编程序做各种准备工作,在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行。

伪操作只在汇编过程中起作用,一旦汇编结束,伪操作的使命也随之结束。

宏指令是一段独立的程序代码,可以插在源程序中,通过伪操作来定义。

宏在被使用之前必须提前定义好。

宏之间可以互相调用,也可以自己递归调用。

宏定义本身不会产生代码,只是在调用它时把宏体插入到源程序中。

伪指令也是ARM汇编语言程序里的特殊指令助记符,也不在处理器运行期间由机器执行,它们在汇编时将合适的机器指令代替成ARM或Thumb指令从而实现真正指令操作。

2请写出在Thumb状态下调用ARM状态下子程序的调用返回关键指令。

CODE16

ADRLR,NEXT

ADRR0,ARMSUB

BXR0

NEXTMOVR1,#2

CODE32

ARMSUB

ADDLR,LR,#1

BXLR

3请写出在主程序中调用子程序SUB1,SUB1中调用子程序SUB2,SUB2中调用子程序SUB3的调用返回关键指令。

其中主程序、子程序SUB1、SUB2、SUB3均在同种状态下。

BLSUB1

SUB1…

STMFDSP!

{R0-R2,LR}

BLSUB2

LDMFDSP!

{R0-R2,PC}

SUB2…

STMFDSP!

{R0-R2,LR}

BLSUB3

LDMFDSP!

{R0-R2,PC}

SUB3…

MOVPC,LR

4用汇编语言完成对C语言全局变量的访问。

假设CVAR1和CVAR2是C语言中定义的全局变量,请用一段汇编语言访问它们,完成两者的相加运算,结果存放在CVAR1中。

答:

AREAglobals,CODE,READONLY

EXPORTaccesscvar

IMPORTcvar1

IMPORTcvar2

ENTRY

accesscvar

LDRR1,=cvar1

LDRR2,=cvar2

LDRR0,[R1]

LDRR3,[R2]

ADDR0,R0,R3

STRR0,[R1]

MOVPC,LR

END

5编写一段程序,用内嵌汇编指令实现快速中断的使能和禁止。

答:

intmain(void)

{

disable_FIQ();

enable_FIQ();

}

voiddisable_FIQ(void)

{inttmp;

__asm

{MRStmp,CPSR

ORRtmp,tmp,#0x40

MSRCPSR_c,tmp

}

}

voidenable_FIQ(void)

{inttmp;

__asm

{MRStmp,CPSR

BICtmp,tmp,#0x40

MSRCPSR_c,tmp

}

}

6编写一段C语言与汇编语言的混合编程代码,在C语言程序中调用汇编语言代码,完成字符串STR1与STR2内容的互换(假设STR1和STR2长度一致)。

答:

externvoidstrcopy(char*d,char*s);

intmain(void)

{

char*str1=“contentofstring1”;

char*str2=“contentofstring2”;

strswap(str1,str2);

}

AREAStrSwap,CODE,READONLY

EXPORTstrswap

strswap

LDRBR2,[R0]

LDRBR3,[R1]

STRBR2,[R1],#1

STRBR3,[R0],#1

CMPR2,#0

BNEstrswap

MOVPC,LR

END

7请完成一段字符串“helloworld!

”的拷贝,要求主程序用C语言编写,字符串拷贝子程序用汇编语言编写。

答:

#include

externvoidstrcopy(char*d,constchar*s);

intmain()

{constchar*srcstr=”helloworld!

”;

char*dststr=”copytome!

”;

strcopy(dststr,srcstr);

return(0);

}

AREASCopy,CODE,READONLY

EXPORTstrcopy

strcopy

LDRBR2,[R1],#1

STRBR2,[R0],#1

CMPR2,#0

BNEstrcopy

MOVPC,LR

END

8请用跳转表思想重写下述程序。

BLJUMPTAB

JUMPTABCMPR0,#0

BEQSUB0

CMPR0,#1

BEQSUB1

CMPR0,#2

BEQSUB2

CMPR0,#3

BEQSUB3

答:

SUBMAXEQU3

BLJUMPTAB

JUMPTABADRR1,SUBTAB

CMPR0,#SUBMAX;检查超限

LDRLSPC,[R1,R0,LSL#2]

BERROR

SUBTABDCDSUB0;子程序表入口

DCDSUB1

DCDSUB2

DCDSUB3

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

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1