ARM3.2嵌入式系统原理第三章习题(2)2021
    嵌入式系统原理第三章习题答案(2)2021
    1.arm汇编语言中的伪操作、宏指令和伪指令是什么?
    伪操作是arm汇编语言程序里的一些特殊指令助记符,主要作用是为完成汇编程序做各种准备工作,在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行。伪操作只在汇编过程中起作用,一旦汇编结束,伪操作的使命也随之结束。
    宏指令是一种独立的程序代码,可以插入源程序并通过伪操作定义。在使用宏之前,必须预先定义宏。宏可以相互调用,也可以递归调用。宏定义本身不生成代码,而是在调用源程序时将宏体插入源程序。
arm嵌入式系统期末考试    伪指令也是arm汇编语言程序里的特殊指令助记符,也不在处理器运行期间由机器执行,它们在汇编时将合适的机器指令代替成arm或thumb指令从而实现真正指令操作。
    2.请写出在thumb状态下调用arm状态子程序返回的关键指令。代码16…
    adrlr,nextadrr0,armsubbxr0nextmovr1,#2…code32armsub…
    addlr,lr,#1bxlr
    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,代码,只读ExportAccessCvarImportCvar1ImportCvar2EntryAccessCvar
    ldrr1,=cvar1ldrr2,=cvar2ldrr0,[r1]ldrr3,[r2]addr0,r0,r3strr0,[r1]
    莫文德
    5编写一段程序,用内嵌汇编指令实现快速中断的使能和禁止。答:
    intmain(无效){
    disable_fiq();enable_fiq();}
    voiddisable_fiq(void){inttmp;u asm
    {mrstmp,cpsr
    orrtmp,tmp,#0x40msrcpsr_c,tmp}
    voidenable_fiq(void){inttmp;__asm
    {mrstmp,cpsr
    bictmp,tmp,#0x40msrcpsr_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);…}
    Area strswap,code,ReadOnlyExportsTrswapstSwap
    ldrbr2,[r0]ldrbr3,[r1]
    strbr2、[r1]、#1strbr3、[r0]、#1cmpr2、#0
    bnestrswapmovpc,lrend
    请填写一个字符串“HelloWorld!”主程序要求用C语言编写,字符串复制子程序要求用汇编语言编写。
    答:
    #包括
    externvoidstrcopy(char*d,constchar*s);intmain()
    {constchar*srcstr=“helloworld!”;char*dststr=“copytome!”;strcopy(dststr,srcstr);返回(0);}
    areascopy,code,readonlyexportstrcopystrcopy
    ldrbr2、[r1]、#1strbr2、[r0]、#1cmpr2、#0bnestrcopymovpc、lrend
    8请用跳转表思想重写下述程序。
    bljumptab
    …
    跳转选项卡CMPR0、#0beqsub0cmpr0、#1beqsub1cmpr0、#2beqsub2
    cmpr0,#3beqsub3
    答复:
    submaxequ3bljumptab
    …
    jumptabadrr1,subtab
    cmpr0,#submax;检查溢出子选项卡
    ldrlspc,[r1,r0,lslberror
    dcdsub0dcdsub1dcdsub2dcdsub3
    #2];子程序表入口
   
   

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。