您好,欢迎访问三七文档
32位嵌入式微处理器ARM(1)思考题(一)1)写出ARM可以运行的不同模式。1.用户模式2.快速中断模式3.中断模式4.管理模式5.系统模式6.数据访问终止模式7.未定义指令终止模式2)ARM核有多少个寄存器?37个3)哪个寄存器用来存储程序指针,链接寄存器和堆栈指针?R134)哪种模式能访问的寄存器是最少的?用户模式和系统模式5)哪些寄存器在Thumb态时是在低端一组的?R0,R1,R2,R3,R4,R5,R6,R76)CPSR的哪一位反映了当前处理器的状态?T位。T=0:处理器处于ARM态;T=1:处理器处于Thumb态7)所有的Thumb指令必须对齐的边界是多少?半字对齐8)写出ARM不同的异常类型。未定义指令、预取中止、数据中止、中断、快中断、复位、软中断指令SWI9)处理器核复位后分别处于哪种模式和哪个状态?ARM状态,管理模式10)Thumb指令对比ARM指令,有哪两个主要优势?对C代码的紧密度做了优化(大约是ARM代码大小的65%);对窄内存的性能进行了提高思考题(二)1.ARM7TDMI的流水线有多少级?3级2.写出ARM9TDMI流水线各阶段的名字.取指令,指令译码,执行,内存访问,回写寄存器堆3.冯诺依曼体系和哈佛体系有什么不同?冯诺依曼结构数据空间和地址空间不分开;哈佛结构数据空间和地址空间是分开的4.ARM9核在什么情况下会导致读取-使用的互锁?紧接着LDR指令后用相同寄存器的数据操作会引起流水线互锁5.Cortex家族实现的是ARM的哪个架构版本?ARMV7架构32位嵌入式微处理器ARM(2)思考题(一)1.用一条ARM指令分别实现下面的语句:a)r0=16MOVr0,#0x10b)r0=r1/16(signednumbers)MOVr0,r1ASR4c)r1=r2*3ADDr1,r2,r2LSL1d)r0=-r0MVNr0,r02.BIC指令的作用?BIC{cond}{S}Rd,Rn,operand2BIC指令将Rn的值与操作数operand2的反码按位逻辑”与”,结果存放到目的寄存器Rd中.3.哪些数据处理指令总是设置条件标志位?算数逻辑运算指令不但将运算结果保存到目的寄存器中,同时更新CPSR中的相应条件标志位;比较运算:CMPCMNTSTTEQ比较指令仅仅设置了条件标志位思考题(二)1.哪些指令可用于子程序调用的返回?BL指令实现子程序调用,重新加载链接寄存器的内容至PC寄存器即可实现返回:LDR,STR,DCD,CMP,BLT,LDM,STM2.要打开或者屏蔽IRQ中断该使用哪些指令?MSRBIC3.为了克服ARM分支指令只有±32MB范围的局限,应该使用哪些指令?BLLDRpc,=label思考题(三)1.CLZ指令的用途是什么?前导0计数:返回寄存器内容中第一个1之前的二进制0的个数2.以下指令的结果是什么?r1=0x7FFFFF00r2=0x00001000QADDr0,r1,r2r0=0x80000F003.以下的指令有效吗?LDRDr7,[r2,0x100]无效,因为LDRD指令加载的是两个字中内存较小的地址-较高地址由该地址+4产生,该指令中r2地址不知道4.以下指令的效果是什么?SMULBTr0,r1,r2将r1和r2中各选择一半的16位带符号整数相乘,将32位结果放入r0中。5.如果r1=0x12406700,那么在执行这条语句后r0的值是什么:REVr0,r1r0=006740126.以下指令的意义是什么SUB16r1,r2,r0Thumb状态下r1=r2-r0思考题(四)1.下面这条Thumb指令的效果是什么?ADDr1,r2r1=r1+r22.这是一条有效的Thumb指令吗?MSRCPSR_S,r0有效3.Thumb中BL指令的跳转范围是多少?范围在+/-4MB(被编码为一对指令)32位嵌入式微处理器ARM(4)1、请将C语言中的IF语言用ARM指令系统来表示,并具体写出程序。例如c语言代码如下:if(ab){x=5;y=c+d;}elsex=c-d;用ARM指令实现代码如下:ADRr4,a;读取变量a的地址LDRr0,[r4];读变量a的内容到r0ADRr4,b;读取变量b的地址LDRr1,[r4];读变量b的内容到r1CMPr0,r1;BGEfblock;如果a=b,跳转到fblockADRr4,x;MOVr0,#5;STRr0,[r4];令x=5ADRr4,c;读取变量c的地址LDRr0,[r4];读变量c的内容到r0ADRr4,d;读取变量d的地址LDRr1,[r4];读变量d的内容到r1ADDr0,r0,r1;ADRr4,y;读取变量y的地址STRr0,[r4];Bafter;fblock:ADRr4,c;读取变量c的地址LDRr0,[r4];读c的内容到r0ADRr4,d;读取变量d的地址到r4LDRrl,[r4];读变量d的内容到r1SUBr0,r0,rl;计算a–b结果保存在r0ADRr4,x;读取变量x的地址STRr0,[r4]2、请将C语言中的数组用ARM汇编语句表示,并具体写出访问数组的语句。例如C语言语句:for(i=0;i=10;i++){a[i]=b[i]+c;}假设R0,R1分别存放了a[i],b[i]的基地址,c的值在R2中,R3中存着0x0a则汇编代码如下:MOVR3,#0xA;i^NextRSBR5,R3,#0xA;i=0,1,2...0xALDRR6,[R1,R5];b[i]ADDR6,R6,R2;b[i]+cSTRR6,[R0,R5];a[i]=b[i]+cSUBR3,R3,#0x1CMPR3,#0x0BNENext
本文标题:嵌入式思考题
链接地址:https://www.777doc.com/doc-6279319 .html