ARM3.2嵌入式系统原理第三章习题(2)2012.doc
《ARM3.2嵌入式系统原理第三章习题(2)2012.doc》由会员分享,可在线阅读,更多相关《ARM3.2嵌入式系统原理第三章习题(2)2012.doc(5页珍藏版)》请在冰豆网上搜索。
![ARM3.2嵌入式系统原理第三章习题(2)2012.doc](https://file1.bdocx.com/fileroot1/2022-10/19/339d4202-2f25-4fda-8eb5-47d8fd14bc86/339d4202-2f25-4fda-8eb5-47d8fd14bc861.gif)
嵌入式系统原理
第三章习题答案
(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